]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
let alice recognize a y.onion address and, uhm, do something
authorRoger Dingledine <arma@torproject.org>
Thu, 1 Apr 2004 02:41:41 +0000 (02:41 +0000)
committerRoger Dingledine <arma@torproject.org>
Thu, 1 Apr 2004 02:41:41 +0000 (02:41 +0000)
svn:r1422

src/or/connection_edge.c
src/or/or.h
src/or/rendcommon.c

index 7985edb03eb61fb9146c14e824f8033d3ab323e8..08c009bd9c215d46245b796a4cc76206efd93cc4 100644 (file)
@@ -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,
index d6f7f4d51f63b97583d03157dd3f9818c3f78d95..a54a8287ca9cc7246ee03aacece011a162e69dad 100644 (file)
@@ -1012,6 +1012,8 @@ void rend_cache_clean(void);
 int rend_cache_lookup(char *query, const char **desc, int *desc_len);
 int rend_cache_store(char *desc, int desc_len);
 
+int rend_parse_rendezvous_address(char *address);
+
 /********************************* rendservice.c ***************************/
 
 int rend_config_services(or_options_t *options);
index 399e5db1fabf36cd4990d07bd568e171246d4d3a..220ed31a2af8c4018f045467d6d3db11de76889a 100644 (file)
@@ -244,4 +244,15 @@ int rend_cache_store(char *desc, int desc_len)
   return 0;
 }
 
+/* ==== General utility functions for rendezvous. */
+
+/* If address is of the form "y.onion" with a well-formed handle y,
+ * then put a '\0' after y and return 0.
+ * Else return -1 and change nothing.
+ */
+int rend_parse_rendezvous_address(char *address) {
+
+
+  return -1;
+}