[tor-commits] [tor/master] Move USERADDR handling to a dedicated function.

nickm at torproject.org nickm at torproject.org
Thu Aug 15 16:16:46 UTC 2013


commit 85b7c73168eee63d81b4c1c9205e345d7aa8e773
Author: George Kadianakis <desnacked at riseup.net>
Date:   Sun Nov 25 16:26:16 2012 +0200

    Move USERADDR handling to a dedicated function.
---
 src/or/connection_or.c |   98 +++++++++++++++++++++++++-----------------------
 1 file changed, 52 insertions(+), 46 deletions(-)

diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index db2ac9f..4139670 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -2564,15 +2564,6 @@ init_ext_or_auth_cookie_authentication(int is_enabled)
   return 0;
 }
 
-/** Extended ORPort commands (Transport-to-Bridge) */
-#define EXT_OR_CMD_TB_DONE 0x0000
-#define EXT_OR_CMD_TB_USERADDR 0x0001
-
-/** Extended ORPort commands (Bridge-to-Transport) */
-#define EXT_OR_CMD_BT_OKAY 0x1000
-#define EXT_OR_CMD_BT_DENY 0x1001
-#define EXT_OR_CMD_BT_CONTROL 0x1002
-
 /** DOCDOCDOC
     Return -1 on error. 0 on unsufficient data. 1 on correct.
 */
@@ -2761,6 +2752,57 @@ connection_ext_or_auth_process_inbuf(or_connection_t *or_conn)
   }
 }
 
+/** Extended ORPort commands (Transport-to-Bridge) */
+#define EXT_OR_CMD_TB_DONE 0x0000
+#define EXT_OR_CMD_TB_USERADDR 0x0001
+
+/** Extended ORPort commands (Bridge-to-Transport) */
+#define EXT_OR_CMD_BT_OKAY 0x1000
+#define EXT_OR_CMD_BT_DENY 0x1001
+#define EXT_OR_CMD_BT_CONTROL 0x1002
+
+static int
+connection_ext_or_handle_useraddr(connection_t *conn, char *payload, uint16_t len)
+{
+  /* Copy address string. */
+  tor_addr_t addr;
+  uint16_t port;
+  char *addr_str;
+  char *address_part=NULL;
+  int res;
+  addr_str = tor_malloc(len + 1);
+  memcpy(addr_str, payload, len);
+  addr_str[len] = 0;
+
+  res = tor_addr_port_split(LOG_INFO, addr_str, &address_part, &port);
+  tor_free(addr_str);
+  if (res<0)
+    return -1;
+
+  res = tor_addr_parse(&addr, address_part);
+  tor_free(address_part);
+  if (res<0)
+    return -1;
+
+  { /* do some logging */
+    char *old_address = tor_dup_addr(&conn->addr);
+    char *new_address = tor_dup_addr(&addr);
+
+    log_warn(LD_NET, "Received USERADDR." /* XXX FIX ALL LOG SEVERITIES AND MESSAGES */
+             "We rewrite our address from '%s:%u' to '%s:%u'.",
+             safe_str(old_address), conn->port, safe_str(new_address), port);
+
+    tor_free(old_address);
+    tor_free(new_address);
+  }
+
+  /* record the address */
+  tor_addr_copy(&conn->addr, &addr);
+  conn->port = port;
+
+  return 0;
+}
+
 /** Process Extended ORPort messages from <b>or_conn</b>. */
 int
 connection_ext_or_process_inbuf(or_connection_t *or_conn)
@@ -2810,44 +2852,8 @@ connection_ext_or_process_inbuf(or_connection_t *or_conn)
       conn->state = EXT_OR_CONN_STATE_FLUSHING;
       connection_stop_reading(conn);
     } else if (command->cmd == EXT_OR_CMD_TB_USERADDR) {
-      /* XXX Put this in a function of its own. We need to empasize
-         that we change the address and port of this connection. */
-
-      /* Copy address string. */
-      tor_addr_t addr;
-      uint16_t port;
-      char *addr_str;
-      char *address_part=NULL;
-      int res;
-      addr_str = tor_malloc(command->len + 1);
-      memcpy(addr_str, command->body, command->len);
-      addr_str[command->len] = 0;
-
-      res = tor_addr_port_split(LOG_INFO, addr_str, &address_part, &port);
-      tor_free(addr_str);
-      if (res<0)
-        goto err;
-
-      res = tor_addr_parse(&addr, address_part);
-      tor_free(address_part);
-      if (res<0)
+      if (connection_ext_or_handle_useraddr(conn, command->body, command->len) < 0)
         goto err;
-
-      {
-        char *old_address = tor_dup_addr(&conn->addr);
-        char *new_address = tor_dup_addr(&addr);
-
-        log_warn(LD_NET, "Received USERADDR." /* XXX FIX ALL LOG SEVERITIES AND MESSAGES */
-                 "We rewrite our address from '%s:%u' to '%s:%u'.",
-                 safe_str(old_address), conn->port, safe_str(new_address), port);
-
-        tor_free(old_address);
-        tor_free(new_address);
-      }
-
-      /* record the address */
-      tor_addr_copy(&conn->addr, &addr);
-      conn->port = port;
     } else {
       log_notice(LD_NET, "Got an Extended ORPort command we don't understand (%u).",
                  command->cmd);





More information about the tor-commits mailing list