Browse Source

fix some bugs; more remain

svn:r1450
Roger Dingledine 21 years ago
parent
commit
bbc9484957
5 changed files with 12 additions and 8 deletions
  1. 1 1
      src/or/circuit.c
  2. 3 2
      src/or/connection.c
  3. 4 2
      src/or/connection_edge.c
  4. 2 2
      src/or/or.h
  5. 2 1
      src/or/rendclient.c

+ 1 - 1
src/or/circuit.c

@@ -334,7 +334,7 @@ circuit_t *circuit_get_newest(connection_t *conn,
  * the list.
  * the list.
  */
  */
 circuit_t *circuit_get_next_by_pk_and_purpose(circuit_t *start,
 circuit_t *circuit_get_next_by_pk_and_purpose(circuit_t *start,
-                                         const char *digest, int purpose)
+                                         const char *digest, uint8_t purpose)
 {
 {
   circuit_t *circ;
   circuit_t *circ;
   if (start == NULL)
   if (start == NULL)

+ 3 - 2
src/or/connection.c

@@ -1026,8 +1026,9 @@ void assert_connection_ok(connection_t *conn, time_t now)
   } else {
   } else {
     assert(!conn->socks_request);
     assert(!conn->socks_request);
   }
   }
-  if(conn->type != CONN_TYPE_DIR) {
-    assert(!conn->purpose); /* only used for dir types currently */
+  if(conn->type != CONN_TYPE_DIR &&
+     conn->type != CONN_TYPE_AP) {
+    assert(!conn->purpose); /* only used for dir and ap types currently */
   }
   }
 
 
   switch(conn->type)
   switch(conn->type)

+ 4 - 2
src/or/connection_edge.c

@@ -817,8 +817,9 @@ int connection_ap_handshake_attach_circuit(connection_t *conn) {
       /* is one already on the way? */
       /* is one already on the way? */
       circ = circuit_launch_new(desired_circuit_purpose, NULL);
       circ = circuit_launch_new(desired_circuit_purpose, NULL);
       /* depending on purpose, store stuff into circ */
       /* depending on purpose, store stuff into circ */
-      if (desired_circuit_purpose == CIRCUIT_PURPOSE_C_GENERAL ||
-          desired_circuit_purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND) {
+      if(circ &&
+         (desired_circuit_purpose == CIRCUIT_PURPOSE_C_GENERAL ||
+          desired_circuit_purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND)) {
         /* then write the service_id into circ */
         /* then write the service_id into circ */
         strcpy(circ->rend_query, conn->rend_query);
         strcpy(circ->rend_query, conn->rend_query);
       }
       }
@@ -964,6 +965,7 @@ int connection_ap_make_bridge(char *address, uint16_t port) {
   }
   }
 
 
   conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
   conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
+  conn->purpose = AP_PURPOSE_GENERAL;
   connection_start_reading(conn);
   connection_start_reading(conn);
 
 
   /* attaching to a dirty circuit is fine */
   /* attaching to a dirty circuit is fine */

+ 2 - 2
src/or/or.h

@@ -176,7 +176,7 @@
 #define AP_PURPOSE_RENDDESC_WAIT 2
 #define AP_PURPOSE_RENDDESC_WAIT 2
 #define AP_PURPOSE_RENDPOINT_WAIT 3
 #define AP_PURPOSE_RENDPOINT_WAIT 3
 #define AP_PURPOSE_INTROPOINT_WAIT 4
 #define AP_PURPOSE_INTROPOINT_WAIT 4
-#define _AP_PURPOSE_MAX 3
+#define _AP_PURPOSE_MAX 4
 
 
 #define _DIR_CONN_STATE_MIN 1
 #define _DIR_CONN_STATE_MIN 1
 #define DIR_CONN_STATE_CONNECTING 1
 #define DIR_CONN_STATE_CONNECTING 1
@@ -699,7 +699,7 @@ circuit_t *circuit_get_by_conn(connection_t *conn);
 circuit_t *circuit_get_newest(connection_t *conn,
 circuit_t *circuit_get_newest(connection_t *conn,
                               int must_be_open, uint8_t conn_purpose);
                               int must_be_open, uint8_t conn_purpose);
 circuit_t *circuit_get_next_by_pk_and_purpose(circuit_t *circuit,
 circuit_t *circuit_get_next_by_pk_and_purpose(circuit_t *circuit,
-                                             const char *servid, int purpose);
+                                              const char *servid, uint8_t purpose);
 circuit_t *circuit_get_rendezvous(const char *cookie);
 circuit_t *circuit_get_rendezvous(const char *cookie);
 
 
 void circuit_expire_building(void);
 void circuit_expire_building(void);

+ 2 - 1
src/or/rendclient.c

@@ -9,7 +9,7 @@ void
 rend_client_introcirc_is_ready(connection_t *apconn, circuit_t *circ)
 rend_client_introcirc_is_ready(connection_t *apconn, circuit_t *circ)
 {
 {
 
 
-
+  log_fn(LOG_WARN,"introcirc is ready");
 }
 }
 
 
 /* send the rendezvous cell */
 /* send the rendezvous cell */
@@ -18,6 +18,7 @@ rend_client_rendcirc_is_ready(connection_t *apconn, circuit_t *circ)
 {
 {
 
 
 
 
+  log_fn(LOG_WARN,"rendcirc is ready");
 }
 }
 
 
 /* bob sent us a rendezvous cell, join the circs. */
 /* bob sent us a rendezvous cell, join the circs. */