diff options
author | Roger Dingledine <arma@torproject.org> | 2003-04-08 22:31:48 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2003-04-08 22:31:48 +0000 |
commit | 833f165d6898355f402697f591cb6960d5dfba5a (patch) | |
tree | 712a47ecca8a9acb9638712850fd32c14dac985f /src | |
parent | c2fa6f5c7d50f467cf2b37a7e95e52e2ce354a6c (diff) | |
download | tor-833f165d6898355f402697f591cb6960d5dfba5a.tar tor-833f165d6898355f402697f591cb6960d5dfba5a.tar.gz |
bugfix: make onion proxies actually obey their requested bandwidth
svn:r229
Diffstat (limited to 'src')
-rw-r--r-- | src/or/connection.c | 4 | ||||
-rw-r--r-- | src/or/connection_op.c | 1 | ||||
-rw-r--r-- | src/or/connection_or.c | 6 |
3 files changed, 7 insertions, 4 deletions
diff --git a/src/or/connection.c b/src/or/connection.c index e2fc511b0..3a074bce5 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -349,6 +349,7 @@ int connection_read_to_buf(connection_t *conn) { &conn->inbuf_datalen, &conn->inbuf_reached_eof); // log(LOG_DEBUG,"connection_read_to_buf(): read_to_buf returned %d.",read_result); if(read_result >= 0 && connection_speaks_cells(conn)) { +// log(LOG_DEBUG,"connection_read_to_buf(): Read %d, bucket now %d.",read_result,conn->receiver_bucket); conn->receiver_bucket -= read_result; if(conn->receiver_bucket <= 0) { @@ -477,12 +478,13 @@ int connection_receiver_bucket_should_increase(connection_t *conn) { return 1; } -void connection_increment_receiver_bucket (connection_t *conn) { +void connection_increment_receiver_bucket(connection_t *conn) { assert(conn); if(connection_receiver_bucket_should_increase(conn)) { /* yes, the receiver_bucket can become overfull here. But not by much. */ conn->receiver_bucket += conn->bandwidth*1.1; +// log(LOG_DEBUG,"connection_increment_receiver_bucket(): Bucket now %d.",conn->receiver_bucket); if(connection_state_is_open(conn)) { /* if we're in state 'open', then start reading again */ connection_start_reading(conn); diff --git a/src/or/connection_op.c b/src/or/connection_op.c index 5a32c9ef3..3f39e430d 100644 --- a/src/or/connection_op.c +++ b/src/or/connection_op.c @@ -64,6 +64,7 @@ int op_handshake_process_keys(connection_t *conn) { log(LOG_DEBUG,"Successfully decrypted keys from new OP."); conn->bandwidth = ntohl(*((uint32_t *)auth_plain)); + log(LOG_DEBUG,"op_handshake_process_keys(): Bandwidth %d requested.",conn->bandwidth); crypto_cipher_set_key(conn->b_crypto, auth_plain+4); crypto_cipher_set_key(conn->f_crypto, auth_plain+20); diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 8a7fd9a90..9cac2c9ca 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -266,14 +266,14 @@ connection_t *connection_or_connect_as_op(routerinfo_t *router) { } int or_handshake_op_send_keys(connection_t *conn) { - //int x; - uint32_t bandwidth = DEFAULT_BANDWIDTH_OP; unsigned char message[36]; /* bandwidth(32bits), forward key(128bits), backward key(128bits) */ unsigned char cipher[128]; int retval; assert(conn && conn->type == CONN_TYPE_OR); + conn->bandwidth = DEFAULT_BANDWIDTH_OP; + /* generate random keys */ if(crypto_cipher_generate_key(conn->f_crypto) || crypto_cipher_generate_key(conn->b_crypto)) { @@ -282,7 +282,7 @@ int or_handshake_op_send_keys(connection_t *conn) { } log(LOG_DEBUG,"or_handshake_op_send_keys() : Generated 3DES keys."); /* compose the message */ - *(uint32_t *)message = htonl(bandwidth); + *(uint32_t *)message = htonl(conn->bandwidth); memcpy((void *)(message + 4), (void *)conn->f_crypto->key, 16); memcpy((void *)(message + 20), (void *)conn->b_crypto->key, 16); |