r9561@Kushana: nickm | 2006-11-16 22:32:54 -0500

Tweaks to test-connection patch:  use ".noconnect" instead of ".test" (since there are lots of ways to test things).  Use a regular sequence of STREAM events (NEW followed by CLOSED) instead of a new event type.  Make the function that checks the address be static and use const and strcasecmpend properly.
 


svn:r8959
This commit is contained in:
Nick Mathewson 2006-11-17 03:34:58 +00:00
parent d125c61e02
commit e2abc727e5
5 changed files with 25 additions and 32 deletions

View File

@ -7,6 +7,12 @@ Changes in version 0.1.2.4-alpha - 2006-11-??
o Minor features o Minor features
- Add breakdown of public key operations to dumped statistics. - Add breakdown of public key operations to dumped statistics.
o Minor features, controller
- Make all connections to addresses of the form .noconnect immediately
get closed. This is more useful than you'd think, since it lets
application/controller combos successfully tell when they're talking to
the same Tor by watching for STREAM events.
o Major bugfixes o Major bugfixes
- Handle TransPort connections even when the server sends data before - Handle TransPort connections even when the server sends data before
the client sends data. Previously, the connection would just hang the client sends data. Previously, the connection would just hang

View File

@ -57,6 +57,8 @@ N . Have (and document) a BEGIN_DIR relay cell that means "Connect to your
- Use for something, so we can be sure it works. - Use for something, so we can be sure it works.
- Test and debug - Test and debug
N - Document .noconnect addresses... but where?
o Send back RELAY_END cells on malformed RELAY_BEGIN. o Send back RELAY_END cells on malformed RELAY_BEGIN.
o Change the circuit end reason display a little for reasons from o Change the circuit end reason display a little for reasons from

View File

@ -30,6 +30,7 @@ static smartlist_t *redirect_exit_list = NULL;
static int connection_ap_handshake_process_socks(edge_connection_t *conn); static int connection_ap_handshake_process_socks(edge_connection_t *conn);
static int connection_ap_process_natd(edge_connection_t *conn); static int connection_ap_process_natd(edge_connection_t *conn);
static int connection_exit_connect_dir(edge_connection_t *exit_conn); static int connection_exit_connect_dir(edge_connection_t *exit_conn);
static int hostname_is_noconnect_address(const char *address);
/** An AP stream has failed/finished. If it hasn't already sent back /** An AP stream has failed/finished. If it hasn't already sent back
* a socks reply, send one now (based on endreason). Also set * a socks reply, send one now (based on endreason). Also set
@ -1395,8 +1396,8 @@ connection_ap_get_original_destination(edge_connection_t *conn,
* If the handshake is complete, send it to * If the handshake is complete, send it to
* connection_ap_handshake_rewrite_and_attach(). * connection_ap_handshake_rewrite_and_attach().
* *
* Return -1 if an unexpected error with conn (and it should be marked * Return -1 if an unexpected error with conn ocurrs (and mark it for close),
* for close), else return 0. * else return 0.
*/ */
static int static int
connection_ap_handshake_process_socks(edge_connection_t *conn) connection_ap_handshake_process_socks(edge_connection_t *conn)
@ -1440,10 +1441,11 @@ connection_ap_handshake_process_socks(edge_connection_t *conn)
return -1; return -1;
} /* else socks handshake is done, continue processing */ } /* else socks handshake is done, continue processing */
if (hostname_is_a_test_address(socks->address)) if (hostname_is_noconnect_address(socks->address))
{ {
control_event_teststream(conn); control_event_stream_status(conn, STREAM_EVENT_NEW, 0);
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); control_event_stream_status(conn, STREAM_EVENT_CLOSED, 0);
connection_mark_unattached_ap(conn, END_STREAM_REASON_DONE);
return -1; return -1;
} }
@ -2457,16 +2459,11 @@ failed:
return BAD_HOSTNAME; return BAD_HOSTNAME;
} }
/** Check if the address is of the form "y.test" /** Check if the address is of the form "y.noconnect"
*/ */
int static int
hostname_is_a_test_address(char *address) hostname_is_noconnect_address(const char *address)
{ {
char *s; return ! strcasecmpend(address, ".noconnect");
s = strrchr(address,'.');
if (!s)
return 0;
if (!strcmp(s+1,"test"))
return 1;
return 0;
} }

View File

@ -86,8 +86,7 @@ const char control_c_id[] =
#define EVENT_STATUS_CLIENT 0x0010 #define EVENT_STATUS_CLIENT 0x0010
#define EVENT_STATUS_SERVER 0x0011 #define EVENT_STATUS_SERVER 0x0011
#define EVENT_STATUS_GENERAL 0x0012 #define EVENT_STATUS_GENERAL 0x0012
#define EVENT_TESTSTREAM 0x0013 #define _EVENT_MAX 0x0012
#define _EVENT_MAX 0x0013
/* If _EVENT_MAX ever hits 0x0020, we need to make the mask wider. */ /* If _EVENT_MAX ever hits 0x0020, we need to make the mask wider. */
/** Array mapping from message type codes to human-readable message /** Array mapping from message type codes to human-readable message
@ -1064,8 +1063,6 @@ handle_control_setevents(control_connection_t *conn, uint32_t len,
event_code = EVENT_STATUS_CLIENT; event_code = EVENT_STATUS_CLIENT;
else if (!strcasecmp(ev, "STATUS_SERVER")) else if (!strcasecmp(ev, "STATUS_SERVER"))
event_code = EVENT_STATUS_SERVER; event_code = EVENT_STATUS_SERVER;
else if (!strcasecmp(ev, "TESTSTREAM"))
event_code = EVENT_TESTSTREAM;
else { else {
connection_printf_to_buf(conn, "552 Unrecognized event \"%s\"\r\n", connection_printf_to_buf(conn, "552 Unrecognized event \"%s\"\r\n",
ev); ev);
@ -3547,17 +3544,6 @@ control_event_server_status(int severity, const char *format, ...)
return r; return r;
} }
/** Called when a request is made for a hostname ending in .test
*/
int
control_event_teststream(edge_connection_t *conn)
{
send_control1_event(EVENT_TESTSTREAM, ALL_NAMES|ALL_FORMATS,
"650 TESTSTREAM %s\r\n",
conn->socks_request->address);
return 0;
}
/** Choose a random authentication cookie and write it to disk. /** Choose a random authentication cookie and write it to disk.
* Anybody who can read the cookie from disk will be considered * Anybody who can read the cookie from disk will be considered
* authorized to use the control connection. */ * authorized to use the control connection. */

View File

@ -473,6 +473,8 @@ typedef enum {
* everywhere. */ * everywhere. */
#define END_STREAM_REASON_FIXME_XXXX 0 #define END_STREAM_REASON_FIXME_XXXX 0
/* Reasons why we (or a remote OR) might close a stream. See tor-spec.txt for
* documentation of these. */
#define END_STREAM_REASON_MISC 1 #define END_STREAM_REASON_MISC 1
#define END_STREAM_REASON_RESOLVEFAILED 2 #define END_STREAM_REASON_RESOLVEFAILED 2
#define END_STREAM_REASON_CONNECTREFUSED 3 #define END_STREAM_REASON_CONNECTREFUSED 3
@ -514,6 +516,8 @@ typedef enum {
#define END_CIRC_REASON_NOPATH -2 #define END_CIRC_REASON_NOPATH -2
#define END_CIRC_AT_ORIGIN -1 #define END_CIRC_AT_ORIGIN -1
/* Reasons why we (or a remote OR) might close a circuit. See tor-spec.txt for
* documentation of these. */
#define _END_CIRC_REASON_MIN 0 #define _END_CIRC_REASON_MIN 0
#define END_CIRC_REASON_NONE 0 #define END_CIRC_REASON_NONE 0
#define END_CIRC_REASON_TORPROTOCOL 1 #define END_CIRC_REASON_TORPROTOCOL 1
@ -2034,7 +2038,6 @@ typedef enum hostname_type_t {
NORMAL_HOSTNAME, ONION_HOSTNAME, EXIT_HOSTNAME, BAD_HOSTNAME NORMAL_HOSTNAME, ONION_HOSTNAME, EXIT_HOSTNAME, BAD_HOSTNAME
} hostname_type_t; } hostname_type_t;
hostname_type_t parse_extended_hostname(char *address); hostname_type_t parse_extended_hostname(char *address);
int hostname_is_a_test_address(char *address);
/********************************* connection_or.c ***************************/ /********************************* connection_or.c ***************************/
@ -2142,7 +2145,6 @@ int control_event_client_status(int severity, const char *format, ...)
CHECK_PRINTF(2,3); CHECK_PRINTF(2,3);
int control_event_server_status(int severity, const char *format, ...) int control_event_server_status(int severity, const char *format, ...)
CHECK_PRINTF(2,3); CHECK_PRINTF(2,3);
int control_event_teststream(edge_connection_t *conn);
int init_cookie_authentication(int enabled); int init_cookie_authentication(int enabled);
int decode_hashed_password(char *buf, const char *hashed); int decode_hashed_password(char *buf, const char *hashed);