From: Nick Mathewson Date: Thu, 24 Mar 2005 01:08:25 +0000 (+0000) Subject: Debug EXTENDCIRCUIT X-Git-Tag: tor-0.1.0.1-rc~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0cfdeb01c87b9958f0f6eee5c318213b9f4f32ac;p=thirdparty%2Ftor.git Debug EXTENDCIRCUIT svn:r3849 --- diff --git a/contrib/tor-control.py b/contrib/tor-control.py index cdfdc05266..72333a4c3e 100755 --- a/contrib/tor-control.py +++ b/contrib/tor-control.py @@ -201,6 +201,12 @@ def map_address(s, kv): tp, body = receive_reply(s,[MSG_TYPE_DONE]) return _parseKV(body) +def extend_circuit(s, circid, hops): + msg = struct.pack("!L",circid) + ",".join(hops) + "\0" + send_message(s,MSG_TYPE_EXTENDCIRCUIT,msg) + tp, body = receive_reply(s,[MSG_TYPE_DONE]) + return body + def listen_for_events(s): while(1): _,type,body = receive_message(s) @@ -225,6 +231,7 @@ def do_main_loop(host,port): ("1.2.3.4", "foobaz.com"), ("frebnitz.com", "5.6.7.8"), (".", "abacinator.onion")])` + print `extend_circuit(s,0,["moria1"])` send_signal(s,1) #save_conf(s) diff --git a/src/or/control.c b/src/or/control.c index 0c1912ad54..28940e1d4d 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -636,6 +636,7 @@ handle_control_extendcircuit(connection_t *conn, uint32_t len, smartlist_t *router_nicknames, *routers; uint32_t circ_id; circuit_t *circ; + char reply[4]; if (len<5) { send_control_error(conn, ERR_SYNTAX, "extendcircuit message too short"); return 0; @@ -643,12 +644,12 @@ handle_control_extendcircuit(connection_t *conn, uint32_t len, router_nicknames = smartlist_create(); routers = smartlist_create(); - smartlist_split_string(router_nicknames, body, ",", 0, 0); + smartlist_split_string(router_nicknames, body+4, ",", 0, 0); SMARTLIST_FOREACH(router_nicknames, const char *, n, { routerinfo_t *r = router_get_by_nickname(n); if (!r) { - send_control_error(conn, ERR_NO_ROUTER, "Unrecognized router name"); + send_control_error(conn, ERR_NO_ROUTER, n); goto done; } smartlist_add(routers, r); @@ -682,6 +683,8 @@ handle_control_extendcircuit(connection_t *conn, uint32_t len, if (!circ_id) { if (circuit_handle_first_hop(circ) < 0) { circuit_mark_for_close(circ); + send_control_error(conn, ERR_INTERNAL, "couldn't start circuit"); + goto done; } } else { if (circ->state == CIRCUIT_STATE_OPEN) { @@ -689,11 +692,14 @@ handle_control_extendcircuit(connection_t *conn, uint32_t len, if (circuit_send_next_onion_skin(circ) < 0) { log_fn(LOG_INFO,"send_next_onion_skin failed; circuit marked for closing."); circuit_mark_for_close(circ); + send_control_error(conn, ERR_INTERNAL, "couldn't send onion skin"); + goto done; } } } - send_control_done(conn); + set_uint32(reply, htonl(circ->global_identifier)); + send_control_done2(conn, reply, sizeof(reply)); done: SMARTLIST_FOREACH(router_nicknames, char *, n, tor_free(n)); smartlist_free(router_nicknames);