diff options
Diffstat (limited to 'src/or/connection_op.c')
-rw-r--r-- | src/or/connection_op.c | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/src/or/connection_op.c b/src/or/connection_op.c deleted file mode 100644 index 38f334d6d..000000000 --- a/src/or/connection_op.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Copyright 2001,2002 Roger Dingledine, Matej Pfajfar. */ -/* See LICENSE for licensing information */ -/* $Id$ */ - -#include "or.h" - -int connection_op_process_inbuf(connection_t *conn) { - - assert(conn && conn->type == CONN_TYPE_OP); - - if(conn->inbuf_reached_eof) { - /* eof reached, kill it. */ - log(LOG_DEBUG,"connection_op_process_inbuf(): conn reached eof. Closing."); - return -1; - } - - log(LOG_DEBUG,"connection_op_process_inbuf(): state %d.",conn->state); - - switch(conn->state) { - case OP_CONN_STATE_AWAITING_KEYS: - return op_handshake_process_keys(conn); - case OP_CONN_STATE_OPEN: - return connection_process_cell_from_inbuf(conn); - default: - log(LOG_DEBUG,"connection_op_process_inbuf() called in state where I'm writing. Ignoring buf for now.") -; - } - - return 0; -} - -int op_handshake_process_keys(connection_t *conn) { - int retval; - //int x; - unsigned char iv[16]; - - /* key exchange message */ - unsigned char auth_cipher[128]; - unsigned char auth_plain[128]; - - assert(conn); - - log(LOG_DEBUG,"op_handshake_process_keys() entered."); - - if(conn->inbuf_datalen < 128) /* entire response available? */ - return 0; /* not yet */ - - if(connection_fetch_from_buf(auth_cipher,128,conn) < 0) { - return -1; - } - log(LOG_DEBUG,"op_handshake_process_keys() : Received auth."); - - /* decrypt response */ - retval = crypto_pk_private_decrypt(get_privatekey(), auth_cipher, 128, auth_plain,RSA_PKCS1_PADDING); - if (retval == -1) - { - log(LOG_ERR,"Decrypting keys from new OP failed."); - log(LOG_DEBUG,"op_handshake_process_keys() : Reason : %s.", - crypto_perror()); - return -1; - } - /* XXXX Check length */ - - 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); -#if 0 - printf("f_session_key: "); - for(x=0;x<8;x++) { - printf("%d ",conn->f_crypto->key[x]); - } - printf("\nb_session_key: "); - for(x=0;x<8;x++) { - printf("%d ",conn->b_crypto->key[x]); - } - printf("\n"); -#endif - - memset(iv, 0, 16); - crypto_cipher_set_iv(conn->b_crypto, iv); - crypto_cipher_set_iv(conn->f_crypto, iv); - - crypto_cipher_encrypt_init_cipher(conn->b_crypto); - crypto_cipher_decrypt_init_cipher(conn->f_crypto); - - conn->state = OP_CONN_STATE_OPEN; - connection_init_timeval(conn); - connection_watch_events(conn, POLLIN); - - return connection_process_inbuf(conn); /* in case they sent some cells along with the keys */ -} - -int connection_op_finished_flushing(connection_t *conn) { - - assert(conn && conn->type == CONN_TYPE_OP); - - switch(conn->state) { - case OP_CONN_STATE_OPEN: - /* FIXME down the road, we'll clear out circuits that are pending to close */ - connection_stop_writing(conn); - return 0; - default: - log(LOG_DEBUG,"Bug: connection_op_finished_flushing() called in unexpected state."); - return 0; - } - - return 0; - -} - -int connection_op_create_listener(struct sockaddr_in *bindaddr) { - log(LOG_DEBUG,"connection_create_op_listener starting"); - return connection_create_listener(bindaddr, CONN_TYPE_OP_LISTENER); -} - -int connection_op_handle_listener_read(connection_t *conn) { - log(LOG_NOTICE,"OP: Received a connection request. Waiting for keys."); - return connection_handle_listener_read(conn, CONN_TYPE_OP, OP_CONN_STATE_AWAITING_KEYS); -} - -/* - Local Variables: - mode:c - indent-tabs-mode:nil - c-basic-offset:2 - End: -*/ |