From 1c9c813866d3ee5b71577694824fbe7ed1ab4f3b Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Sun, 5 Dec 2004 12:47:46 +0000 Subject: check if we have a cached resolve for a tor-resolve address *after* we remove the .foo.exit part of the address. svn:r3082 --- src/or/connection_edge.c | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) (limited to 'src/or') diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index f25719a98..5367f03b7 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -363,25 +363,6 @@ static int connection_ap_handshake_process_socks(connection_t *conn) { return sockshere; } /* else socks handshake is done, continue processing */ - if (socks->command == SOCKS_COMMAND_RESOLVE) { - uint32_t answer; - /* Reply to resolves immediately if we can. */ - if (strlen(socks->address) > RELAY_PAYLOAD_SIZE) { - log_fn(LOG_WARN,"Address to be resolved is too large. Failing."); - connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_ERROR,0,NULL); - return -1; - } - answer = htonl(client_dns_lookup_entry(socks->address)); - if (answer) { - connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV4,4, - (char*)&answer); - conn->has_sent_end = 1; - connection_mark_for_close(conn); - conn->hold_open_until_flushed = 1; - return 0; - } - } - /* Parse the address provided by SOCKS. Modify it in-place if it * specifies a hidden-service (.onion) or particular exit node (.exit). */ @@ -400,6 +381,26 @@ static int connection_ap_handshake_process_socks(connection_t *conn) { if (addresstype != ONION_HOSTNAME) { /* not a hidden-service request (i.e. normal or .exit) */ + + if (socks->command == SOCKS_COMMAND_RESOLVE) { + uint32_t answer; + /* Reply to resolves immediately if we can. */ + if (strlen(socks->address) > RELAY_PAYLOAD_SIZE) { + log_fn(LOG_WARN,"Address to be resolved is too large. Failing."); + connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_ERROR,0,NULL); + return -1; + } + answer = htonl(client_dns_lookup_entry(socks->address)); + if (answer) { + connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV4,4, + (char*)&answer); + conn->has_sent_end = 1; + connection_mark_for_close(conn); + conn->hold_open_until_flushed = 1; + return 0; + } + } + if (socks->command == SOCKS_COMMAND_CONNECT && socks->port == 0) { log_fn(LOG_WARN,"Application asked to connect to port 0. Refusing."); return -1; -- cgit v1.2.3