diff options
author | Nick Mathewson <nickm@torproject.org> | 2004-04-03 03:37:11 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2004-04-03 03:37:11 +0000 |
commit | d93ff0b82f9c4a983677cddf02d43b40f801d1a0 (patch) | |
tree | 36d29cd40d165c1af20ccd69cd055afb1d1e5c42 /src/or/rendcommon.c | |
parent | 7eaa655b6db66664b643b16b9d296b0858f31e42 (diff) | |
download | tor-d93ff0b82f9c4a983677cddf02d43b40f801d1a0.tar tor-d93ff0b82f9c4a983677cddf02d43b40f801d1a0.tar.gz |
Handle rendezvous relay cells
svn:r1464
Diffstat (limited to 'src/or/rendcommon.c')
-rw-r--r-- | src/or/rendcommon.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c index b318a212a..83b19672f 100644 --- a/src/or/rendcommon.c +++ b/src/or/rendcommon.c @@ -93,7 +93,11 @@ rend_service_descriptor_t *rend_parse_service_descriptor( cp = eos+1; } keylen = crypto_pk_keysize(result->pk); - if (end-cp != keylen) goto truncated; + if (end-cp < keylen) goto truncated; + if (end-cp > keylen) { + log_fn(LOG_WARN, "Signature too long on service descriptor"); + goto error; + } if (crypto_pk_public_checksig_digest(result->pk, (char*)str,cp-str, /* data */ (char*)cp,end-cp /* signature*/ @@ -248,6 +252,36 @@ int rend_cache_store(char *desc, int desc_len) return 0; } +/* Dispatch on rendezvous relay command. */ +void rend_process_relay_cell(circuit_t *circ, int command, int length, + const char *payload) +{ + int r; + switch(command) { + case RELAY_COMMAND_ESTABLISH_INTRO: + r = rend_mid_establish_intro(circ,payload,length); + break; + case RELAY_COMMAND_ESTABLISH_RENDEZVOUS: + r = rend_mid_establish_rendezvous(circ,payload,length); + break; + case RELAY_COMMAND_INTRODUCE1: + r = rend_mid_introduce(circ,payload,length); + break; + case RELAY_COMMAND_INTRODUCE2: + r = rend_service_introduce(circ,payload,length); + break; + case RELAY_COMMAND_RENDEZVOUS1: + r = rend_mid_rendezvous(circ,payload,length); + break; + case RELAY_COMMAND_RENDEZVOUS2: + /* r = rend_client_rendezvous(circ,payload,length); */ + log_fn(LOG_NOTICE, "Ignoring a rendezvous2 cell"); + break; + default: + assert(0); + } +} + /* Local Variables: mode:c |