|
@@ -425,7 +425,7 @@ get_escaped_string(const char *start, size_t in_len_max,
|
|
|
* 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 @@ control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp,
|
|
|
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 @@ control_event_stream_status(edge_connection_t *conn, stream_status_event_t tp,
|
|
|
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);
|
|
|
+
|
|
|
|
|
|
|
|
|
return 0;
|