Browse Source

Oops. conn->requested_resource is client only.

svn:r6642
Nick Mathewson 19 years ago
parent
commit
b1a8b7869a
2 changed files with 12 additions and 13 deletions
  1. 8 13
      src/or/dirserv.c
  2. 4 0
      src/or/or.h

+ 8 - 13
src/or/dirserv.c

@@ -1750,12 +1750,7 @@ dirserv_orconn_tls_done(const char *address,
 static int
 connection_dirserv_add_servers_to_outbuf(connection_t *conn)
 {
-  int fp;
-
-  if (!strcmpstart(conn->requested_resource, "/tor/server/d/"))
-    fp = 0;
-  else
-    fp = 1;
+  int fp = conn->dir_refresh_src == DIR_REFRESH_SERVER_BY_FP;
 
   while (smartlist_len(conn->fingerprint_stack) &&
          buf_datalen(conn->outbuf) < DIRSERV_BUFFER_MIN) {
@@ -1842,16 +1837,16 @@ connection_dirserv_flushed_some(connection_t *conn)
   tor_assert(conn->type == CONN_TYPE_DIR);
   tor_assert(conn->state == DIR_CONN_STATE_SERVER_WRITING);
 
-  if (! (conn->fingerprint_stack || conn->cached_dir)
+  if (conn->dir_refresh_src == DIR_REFRESH_NONE
       || buf_datalen(conn->outbuf) > DIRSERV_BUFFER_MIN)
     return 0;
 
-  if (!strcmpstart(conn->requested_resource, "/tor/server/")) {
-    return connection_dirserv_add_servers_to_outbuf(conn);
-  } else if (conn->cached_dir) {
-    return connection_dirserv_add_dir_bytes_to_outbuf(conn);
-  } else {
-    return 0;
+  switch (conn->dir_refresh_src) {
+    case DIR_REFRESH_SERVER_BY_DIGEST:
+    case DIR_REFRESH_SERVER_BY_FP:
+      return connection_dirserv_add_servers_to_outbuf(conn);
+    case DIR_REFRESH_CACHED_DIR:
+      return connection_dirserv_add_dir_bytes_to_outbuf(conn);
   }
 }
 

+ 4 - 0
src/or/or.h

@@ -698,6 +698,10 @@ struct connection_t {
   char *requested_resource; /**< Which 'resource' did we ask the directory
                              * for?*/
 /* Used only for server sides of some dir connections. */
+  enum {
+    DIR_REFRESH_NONE=0, DIR_REFRESH_SERVER_BY_DIGEST, DIR_REFRESH_SERVER_BY_FP,
+    DIR_REFRESH_CACHED_DIR
+  } dir_refresh_src;
   smartlist_t *fingerprint_stack;
   struct cached_dir_t *cached_dir;
   off_t cached_dir_offset;