Loading ChangeLog +3 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ Changes in version 0.2.0.8-alpha - 2007-10-12 - Use annotations to record the time we received each descriptor. - Use annotations to record the source for each descriptor. - Use annotations to record the purpose of each descriptor. - Disable the SETROUTERPURPOSE controller command: it is now obsolete. - Bridge authorities now write bridge descriptors to disk, meaning we can export them to other programs and begin distributing them to blocked users. Loading Loading @@ -113,7 +115,7 @@ Changes in version 0.2.0.8-alpha - 2007-10-12 Bugfix in 0.2.0.7-alpha. - Fix a minor memory leak whenever we parse guards from our state file. Bugfix on 0.2.0.7-alpha. - Fix a minor memory leak whenever we wrote out a file. Bugfix on - Fix a minor memory leak whenever we write out a file. Bugfix on 0.2.0.7-alpha. - Fix a minor memory leak whenever a controller sends the PROTOCOLINFO command. Bugfix on 0.2.0.5-alpha. Loading doc/TODO +1 −1 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ N . Cache for bridge descriptors o Set annotations based on purpose o Preserve routers with unrecognized purpose. R - Stop setting the do-not-cache flag based on purpose. - Disable and mark as obsolete the setrouterpurpose controller o Disable and mark as obsolete the setrouterpurpose controller command. - Bridges operators (rudimentary version) - Ability to act as dir cache without a dir port. Loading doc/spec/control-spec.txt +4 −0 Original line number Diff line number Diff line Loading @@ -590,6 +590,10 @@ $Id$ This changes the descriptor's purpose. See +POSTDESCRIPTOR below for details. NOTE: This command was disabled and made obsolete as of Tor 0.2.0.8-alpha. It doesn't exist anymore, and is listed here only for historical interest. 3.13. ATTACHSTREAM Sent from the client to the server. The syntax is: Loading src/or/control.c +17 −36 Original line number Diff line number Diff line Loading @@ -116,8 +116,7 @@ static int handle_control_getinfo(control_connection_t *conn, uint32_t len, static int handle_control_extendcircuit(control_connection_t *conn, uint32_t len, const char *body); static int handle_control_setpurpose(control_connection_t *conn, int for_circuits, static int handle_control_setcircuitpurpose(control_connection_t *conn, uint32_t len, const char *body); static int handle_control_attachstream(control_connection_t *conn, uint32_t len, Loading Loading @@ -262,7 +261,7 @@ control_event_is_interesting(int event) } /** Append a NUL-terminated string <b>s</b> to the end of * <b>conn</b>-\>outbuf * <b>conn</b>-\>outbuf. */ static INLINE void connection_write_str_to_buf(const char *s, control_connection_t *conn) Loading Loading @@ -448,7 +447,7 @@ connection_printf_to_buf(control_connection_t *conn, const char *format, ...) connection_write_to_buf(buf, len, TO_CONN(conn)); } /** Send a "DONE" message down the control connection <b>conn</b> */ /** Send a "DONE" message down the control connection <b>conn</b>. */ static void send_control_done(control_connection_t *conn) { Loading Loading @@ -2039,53 +2038,36 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len, return 0; } /** Called when we get a SETCIRCUITPURPOSE (if <b>for_circuits</b> * is 1) or SETROUTERPURPOSE message. If we can find * the circuit/router and it's a valid purpose, change it. */ /** Called when we get a SETCIRCUITPURPOSE message. If we can find the * circuit and it's a valid purpose, change it. */ static int handle_control_setpurpose(control_connection_t *conn, int for_circuits, handle_control_setcircuitpurpose(control_connection_t *conn, uint32_t len, const char *body) { /* XXXX020 this should maybe be two functions; almost no code is acutally shared. */ origin_circuit_t *circ = NULL; routerinfo_t *ri = NULL; uint8_t new_purpose; smartlist_t *args; const char *command = for_circuits ? "SETCIRCUITPURPOSE" : "SETROUTERPURPOSE"; (void) len; /* body is nul-terminated, so it's safe to ignore the length. */ args = getargs_helper(command, conn, body, 2, -1); args = getargs_helper("SETCIRCUITPURPOSE", conn, body, 2, -1); if (!args) goto done; if (for_circuits) { if (!(circ = get_circ(smartlist_get(args,0)))) { connection_printf_to_buf(conn, "552 Unknown circuit \"%s\"\r\n", (char*)smartlist_get(args, 0)); goto done; } } else { if (!(ri = router_get_by_nickname(smartlist_get(args,0), 0))) { connection_printf_to_buf(conn, "552 Unknown router \"%s\"\r\n", (char*)smartlist_get(args, 0)); goto done; } } { char *purp = smartlist_get(args,1); if (get_purpose(&purp, for_circuits, &new_purpose) < 0) { if (get_purpose(&purp, 1, &new_purpose) < 0) { connection_printf_to_buf(conn, "552 Unknown purpose \"%s\"\r\n", purp); goto done; } } if (for_circuits) circ->_base.purpose = new_purpose; else ri->purpose = new_purpose; connection_write_str_to_buf("250 OK\r\n", conn); done: Loading Loading @@ -2695,11 +2677,10 @@ connection_control_process_inbuf(control_connection_t *conn) if (handle_control_extendcircuit(conn, data_len, args)) return -1; } else if (!strcasecmp(conn->incoming_cmd, "SETCIRCUITPURPOSE")) { if (handle_control_setpurpose(conn, 1, data_len, args)) if (handle_control_setcircuitpurpose(conn, data_len, args)) return -1; } else if (!strcasecmp(conn->incoming_cmd, "SETROUTERPURPOSE")) { if (handle_control_setpurpose(conn, 0, data_len, args)) return -1; connection_write_str_to_buf("511 SETROUTERPURPOSE is obsolete.\r\n", conn); } else if (!strcasecmp(conn->incoming_cmd, "ATTACHSTREAM")) { if (handle_control_attachstream(conn, data_len, args)) return -1; Loading Loading
ChangeLog +3 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ Changes in version 0.2.0.8-alpha - 2007-10-12 - Use annotations to record the time we received each descriptor. - Use annotations to record the source for each descriptor. - Use annotations to record the purpose of each descriptor. - Disable the SETROUTERPURPOSE controller command: it is now obsolete. - Bridge authorities now write bridge descriptors to disk, meaning we can export them to other programs and begin distributing them to blocked users. Loading Loading @@ -113,7 +115,7 @@ Changes in version 0.2.0.8-alpha - 2007-10-12 Bugfix in 0.2.0.7-alpha. - Fix a minor memory leak whenever we parse guards from our state file. Bugfix on 0.2.0.7-alpha. - Fix a minor memory leak whenever we wrote out a file. Bugfix on - Fix a minor memory leak whenever we write out a file. Bugfix on 0.2.0.7-alpha. - Fix a minor memory leak whenever a controller sends the PROTOCOLINFO command. Bugfix on 0.2.0.5-alpha. Loading
doc/TODO +1 −1 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ N . Cache for bridge descriptors o Set annotations based on purpose o Preserve routers with unrecognized purpose. R - Stop setting the do-not-cache flag based on purpose. - Disable and mark as obsolete the setrouterpurpose controller o Disable and mark as obsolete the setrouterpurpose controller command. - Bridges operators (rudimentary version) - Ability to act as dir cache without a dir port. Loading
doc/spec/control-spec.txt +4 −0 Original line number Diff line number Diff line Loading @@ -590,6 +590,10 @@ $Id$ This changes the descriptor's purpose. See +POSTDESCRIPTOR below for details. NOTE: This command was disabled and made obsolete as of Tor 0.2.0.8-alpha. It doesn't exist anymore, and is listed here only for historical interest. 3.13. ATTACHSTREAM Sent from the client to the server. The syntax is: Loading
src/or/control.c +17 −36 Original line number Diff line number Diff line Loading @@ -116,8 +116,7 @@ static int handle_control_getinfo(control_connection_t *conn, uint32_t len, static int handle_control_extendcircuit(control_connection_t *conn, uint32_t len, const char *body); static int handle_control_setpurpose(control_connection_t *conn, int for_circuits, static int handle_control_setcircuitpurpose(control_connection_t *conn, uint32_t len, const char *body); static int handle_control_attachstream(control_connection_t *conn, uint32_t len, Loading Loading @@ -262,7 +261,7 @@ control_event_is_interesting(int event) } /** Append a NUL-terminated string <b>s</b> to the end of * <b>conn</b>-\>outbuf * <b>conn</b>-\>outbuf. */ static INLINE void connection_write_str_to_buf(const char *s, control_connection_t *conn) Loading Loading @@ -448,7 +447,7 @@ connection_printf_to_buf(control_connection_t *conn, const char *format, ...) connection_write_to_buf(buf, len, TO_CONN(conn)); } /** Send a "DONE" message down the control connection <b>conn</b> */ /** Send a "DONE" message down the control connection <b>conn</b>. */ static void send_control_done(control_connection_t *conn) { Loading Loading @@ -2039,53 +2038,36 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len, return 0; } /** Called when we get a SETCIRCUITPURPOSE (if <b>for_circuits</b> * is 1) or SETROUTERPURPOSE message. If we can find * the circuit/router and it's a valid purpose, change it. */ /** Called when we get a SETCIRCUITPURPOSE message. If we can find the * circuit and it's a valid purpose, change it. */ static int handle_control_setpurpose(control_connection_t *conn, int for_circuits, handle_control_setcircuitpurpose(control_connection_t *conn, uint32_t len, const char *body) { /* XXXX020 this should maybe be two functions; almost no code is acutally shared. */ origin_circuit_t *circ = NULL; routerinfo_t *ri = NULL; uint8_t new_purpose; smartlist_t *args; const char *command = for_circuits ? "SETCIRCUITPURPOSE" : "SETROUTERPURPOSE"; (void) len; /* body is nul-terminated, so it's safe to ignore the length. */ args = getargs_helper(command, conn, body, 2, -1); args = getargs_helper("SETCIRCUITPURPOSE", conn, body, 2, -1); if (!args) goto done; if (for_circuits) { if (!(circ = get_circ(smartlist_get(args,0)))) { connection_printf_to_buf(conn, "552 Unknown circuit \"%s\"\r\n", (char*)smartlist_get(args, 0)); goto done; } } else { if (!(ri = router_get_by_nickname(smartlist_get(args,0), 0))) { connection_printf_to_buf(conn, "552 Unknown router \"%s\"\r\n", (char*)smartlist_get(args, 0)); goto done; } } { char *purp = smartlist_get(args,1); if (get_purpose(&purp, for_circuits, &new_purpose) < 0) { if (get_purpose(&purp, 1, &new_purpose) < 0) { connection_printf_to_buf(conn, "552 Unknown purpose \"%s\"\r\n", purp); goto done; } } if (for_circuits) circ->_base.purpose = new_purpose; else ri->purpose = new_purpose; connection_write_str_to_buf("250 OK\r\n", conn); done: Loading Loading @@ -2695,11 +2677,10 @@ connection_control_process_inbuf(control_connection_t *conn) if (handle_control_extendcircuit(conn, data_len, args)) return -1; } else if (!strcasecmp(conn->incoming_cmd, "SETCIRCUITPURPOSE")) { if (handle_control_setpurpose(conn, 1, data_len, args)) if (handle_control_setcircuitpurpose(conn, data_len, args)) return -1; } else if (!strcasecmp(conn->incoming_cmd, "SETROUTERPURPOSE")) { if (handle_control_setpurpose(conn, 0, data_len, args)) return -1; connection_write_str_to_buf("511 SETROUTERPURPOSE is obsolete.\r\n", conn); } else if (!strcasecmp(conn->incoming_cmd, "ATTACHSTREAM")) { if (handle_control_attachstream(conn, data_len, args)) return -1; Loading