diff --git a/src/or/connection.c b/src/or/connection.c index 41d07293fe..3cae0d42d8 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -123,9 +123,6 @@ connection_t *connection_new(int type) { return NULL; } } - if(type == CONN_TYPE_OR) { - directory_set_dirty(); - } #ifdef USE_ZLIB if (type == CONN_TYPE_AP || type == CONN_TYPE_EXIT) { if (buf_new(&conn->z_outbuf, &conn->z_outbuflen, &conn->z_outbuf_datalen) < 0) diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 7443f042fa..ed3bd8be9d 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -86,9 +86,8 @@ int connection_or_finished_flushing(connection_t *conn) { case OR_CONN_STATE_CLIENT_SENDING_NONCE: log(LOG_DEBUG,"connection_or_finished_flushing(): client finished sending nonce."); conn_or_init_crypto(conn); - conn->state = OR_CONN_STATE_OPEN; - connection_init_timeval(conn); - connection_watch_events(conn, POLLIN); + connection_or_set_open(conn); + return connection_process_inbuf(conn); /* in case there's anything waiting on it */ case OR_CONN_STATE_SERVER_SENDING_AUTH: log(LOG_DEBUG,"connection_or_finished_flushing(): server finished sending auth."); @@ -110,6 +109,13 @@ int connection_or_finished_flushing(connection_t *conn) { /*********************/ +void connection_or_set_open(connection_t *conn) { + conn->state = OR_CONN_STATE_OPEN; + directory_set_dirty(); + connection_init_timeval(conn); + connection_watch_events(conn, POLLIN); +} + void conn_or_init_crypto(connection_t *conn) { //int x; unsigned char iv[16]; @@ -327,9 +333,7 @@ int or_handshake_op_finished_sending_keys(connection_t *conn) { /* do crypto initialization, etc */ conn_or_init_crypto(conn); - conn->state = OR_CONN_STATE_OPEN; - connection_init_timeval(conn); - connection_watch_events(conn, POLLIN); /* give it a default, tho the ap_handshake call may change it */ + connection_or_set_open(conn); ap_handshake_n_conn_open(conn); /* send the pending onions */ return 0; } @@ -532,9 +536,7 @@ int or_handshake_client_process_auth(connection_t *conn) { /* it finished sending */ log(LOG_DEBUG,"or_handshake_client_process_auth(): Finished sending nonce."); conn_or_init_crypto(conn); - conn->state = OR_CONN_STATE_OPEN; - connection_init_timeval(conn); - connection_watch_events(conn, POLLIN); + connection_or_set_open(conn); return connection_process_inbuf(conn); /* process the rest of the inbuf */ } @@ -719,9 +721,7 @@ int or_handshake_server_process_nonce(connection_t *conn) { log(LOG_DEBUG,"or_handshake_server_process_nonce() : Response valid. Authentication complete."); conn_or_init_crypto(conn); - conn->state = OR_CONN_STATE_OPEN; - connection_init_timeval(conn); - connection_watch_events(conn, POLLIN); + connection_or_set_open(conn); return connection_process_inbuf(conn); /* process the rest of the inbuf */ } diff --git a/src/or/or.h b/src/or/or.h index 4871ee3b78..73ac995ad0 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -649,6 +649,7 @@ int connection_op_handle_listener_read(connection_t *conn); int connection_or_process_inbuf(connection_t *conn); int connection_or_finished_flushing(connection_t *conn); +void connection_or_set_open(connection_t *conn); void conn_or_init_crypto(connection_t *conn); int or_handshake_op_send_keys(connection_t *conn);