[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r10639: Add a SOURCE_ADDR field to STREAM NEW events so that control (in tor/trunk: . doc/spec src/or)



Author: nickm
Date: 2007-06-17 11:10:51 -0400 (Sun, 17 Jun 2007)
New Revision: 10639

Modified:
   tor/trunk/
   tor/trunk/ChangeLog
   tor/trunk/doc/spec/control-spec.txt
   tor/trunk/src/or/control.c
Log:
 r13463@catbus:  nickm | 2007-06-17 11:10:17 -0400
 Add a SOURCE_ADDR field to STREAM NEW events so that controllers can match requests to applications. (Patch from Robert Hogan.)



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r13463] on 8246c3cf-6607-4228-993b-4d95d33730f1

Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog	2007-06-17 15:10:46 UTC (rev 10638)
+++ tor/trunk/ChangeLog	2007-06-17 15:10:51 UTC (rev 10639)
@@ -10,6 +10,10 @@
     - Fail quickly and (relatively) harmlessly if we generate a network
       status document that is somehow malformed.
 
+  o Minor features (controller):
+    - Add a SOURCE_ADDR field to STREAM NEW events so that controllers can
+      match requests to applications. (Patch from Robert Hogan.)
+
   o Deprecated features:
     - RedirectExits is now deprecated.
 

Modified: tor/trunk/doc/spec/control-spec.txt
===================================================================
--- tor/trunk/doc/spec/control-spec.txt	2007-06-17 15:10:46 UTC (rev 10638)
+++ tor/trunk/doc/spec/control-spec.txt	2007-06-17 15:10:51 UTC (rev 10639)
@@ -835,7 +835,8 @@
 
       "650" SP "STREAM" SP StreamID SP StreamStatus SP CircID SP Target
           [SP "REASON=" Reason [ SP "REMOTE_REASON=" Reason ]]
-          [SP "SOURCE=" Source] CRLF
+          [SP "SOURCE=" Source] [ SP "SOURCE_ADDR=" Address ":" Port ]
+          CRLF
 
       StreamStatus =
                "NEW"          / ; New request to connect
@@ -879,6 +880,11 @@
    answer, and "EXIT" is given if the remote node we queried gave us
    the new address as a response.
 
+   The "SOURCE_ADDR" field is included with NEW and NEWRESOLVE events if
+   extended events are enabled.  It indicates the address that requested
+   the connection, and can be (e.g.) used to look up the requesting
+   program.
+
 4.1.3. OR Connection status changed
 
   The syntax is:

Modified: tor/trunk/src/or/control.c
===================================================================
--- tor/trunk/src/or/control.c	2007-06-17 15:10:46 UTC (rev 10638)
+++ tor/trunk/src/or/control.c	2007-06-17 15:10:51 UTC (rev 10639)
@@ -425,7 +425,7 @@
  * but it will always end with a CRLF sequence.
  *
  * Currently the length of the message is limited to 1024 (including the
- * ending \n\r\0. */
+ * ending \r\n\0. */
 static void
 connection_printf_to_buf(control_connection_t *conn, const char *format, ...)
 {
@@ -2636,6 +2636,7 @@
                             int reason_code)
 {
   char reason_buf[64];
+  char addrport_buf[64];
   const char *status;
   circuit_t *circ;
   origin_circuit_t *origin_circ = NULL;
@@ -2698,15 +2699,25 @@
       break;
     }
   }
+
+  if (tp == STREAM_EVENT_NEW) {
+    tor_snprintf(addrport_buf,sizeof(addrport_buf), "%sSOURCE_ADDR=%s:%d",
+                 strlen(reason_buf) ? " " : "",
+                 TO_CONN(conn)->address, TO_CONN(conn)->port );
+  } else {
+    addrport_buf[0] = '\0';
+  }
+
   circ = circuit_get_by_edge_conn(conn);
   if (circ && CIRCUIT_IS_ORIGIN(circ))
     origin_circ = TO_ORIGIN_CIRCUIT(circ);
   send_control_event_extended(EVENT_STREAM_STATUS, ALL_NAMES,
-                        "650 STREAM %lu %s %lu %s@%s\r\n",
+                        "650 STREAM %lu %s %lu %s@%s%s\r\n",
                         (unsigned long)conn->global_identifier, status,
                         origin_circ?
                            (unsigned long)origin_circ->global_identifier : 0ul,
-                        buf, reason_buf);
+                        buf, reason_buf, addrport_buf);
+
   /* XXX need to specify its intended exit, etc? */
 
   return 0;