From 36ff23209bcbb438234d8c4739f6fe769d9f4ba7 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Thu, 1 Apr 2004 02:41:41 +0000 Subject: let alice recognize a y.onion address and, uhm, do something svn:r1422 --- src/or/connection_edge.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/or/connection_edge.c') diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 7985edb03..08c009bd9 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -696,6 +696,7 @@ static void connection_edge_consider_sending_sendme(connection_t *conn) { } } +/* return -1 if an unexpected error with conn, else 0. */ static int connection_ap_handshake_process_socks(connection_t *conn) { socks_request_t *socks; int sockshere; @@ -724,9 +725,27 @@ static int connection_ap_handshake_process_socks(connection_t *conn) { return sockshere; } /* else socks handshake is done, continue processing */ - conn->state = AP_CONN_STATE_CIRCUIT_WAIT; - /* attaching to a dirty circuit is fine */ - return connection_ap_handshake_attach_circuit(conn,0); + /* this call _modifies_ socks->address iff it's a hidden-service request */ + if (rend_parse_rendezvous_address(socks->address) < 0) { + /* normal request */ + conn->state = AP_CONN_STATE_CIRCUIT_WAIT; + /* attaching to a dirty circuit is fine */ + return connection_ap_handshake_attach_circuit(conn,0); + } else { + /* it's a hidden-service request */ + const char *descp; + int desc_len; + + /* see if we already have it cached */ + if (rend_cache_lookup(socks->address, &descp, &desc_len) == 1) { + /* then pick and launch a rendezvous circuit */ + /* go into some other state */ + } else { + /* initiate a dir hidserv desc lookup */ + /* go into a state where you'll be notified of the answer */ + } + } + return 0; } static int connection_ap_handshake_attach_circuit(connection_t *conn, -- cgit v1.2.3