summaryrefslogtreecommitdiff
path: root/src/or/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/or/connection.c')
-rw-r--r--src/or/connection.c103
1 files changed, 0 insertions, 103 deletions
diff --git a/src/or/connection.c b/src/or/connection.c
index 35dcc8110c..bac327b604 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -68,8 +68,6 @@ char *conn_state_to_string[][_CONN_TYPE_MAX+1] = {
/********* END VARIABLES ************/
static int connection_init_accepted_conn(connection_t *conn);
-static int connection_tls_continue_handshake(connection_t *conn);
-static int connection_tls_finish_handshake(connection_t *conn);
/**************************************************************/
@@ -230,107 +228,6 @@ static int connection_init_accepted_conn(connection_t *conn) {
return 0;
}
-int connection_tls_start_handshake(connection_t *conn, int receiving) {
- conn->state = OR_CONN_STATE_HANDSHAKING;
- conn->tls = tor_tls_new(conn->s, receiving);
- if(!conn->tls) {
- log_fn(LOG_WARNING,"tor_tls_new failed. Closing.");
- return -1;
- }
- connection_start_reading(conn);
- log_fn(LOG_DEBUG,"starting the handshake");
- if(connection_tls_continue_handshake(conn) < 0)
- return -1;
- return 0;
-}
-
-static int connection_tls_continue_handshake(connection_t *conn) {
- switch(tor_tls_handshake(conn->tls)) {
- case TOR_TLS_ERROR:
- case TOR_TLS_CLOSE:
- log_fn(LOG_INFO,"tls error. breaking.");
- return -1;
- case TOR_TLS_DONE:
- return connection_tls_finish_handshake(conn);
- case TOR_TLS_WANTWRITE:
- connection_start_writing(conn);
- log_fn(LOG_DEBUG,"wanted write");
- return 0;
- case TOR_TLS_WANTREAD: /* handshaking conns are *always* reading */
- log_fn(LOG_DEBUG,"wanted read");
- return 0;
- }
- return 0;
-}
-
-static int connection_tls_finish_handshake(connection_t *conn) {
- crypto_pk_env_t *pk;
- routerinfo_t *router;
-
- conn->state = OR_CONN_STATE_OPEN;
- directory_set_dirty();
- connection_watch_events(conn, POLLIN);
- log_fn(LOG_DEBUG,"tls handshake done. verifying.");
- if(options.OnionRouter) { /* I'm an OR */
- if(tor_tls_peer_has_cert(conn->tls)) { /* it's another OR */
- pk = tor_tls_verify(conn->tls);
- if(!pk) {
- log_fn(LOG_WARNING,"Other side has a cert but it's invalid. Closing.");
- return -1;
- }
- router = router_get_by_link_pk(pk);
- if (!router) {
- log_fn(LOG_WARNING,"Unrecognized public key from peer. Closing.");
- crypto_free_pk_env(pk);
- return -1;
- }
- if(conn->link_pkey) { /* I initiated this connection. */
- if(crypto_pk_cmp_keys(conn->link_pkey, pk)) {
- log_fn(LOG_WARNING,"We connected to '%s' but he gave us a different key. Closing.", router->nickname);
- crypto_free_pk_env(pk);
- return -1;
- }
- log_fn(LOG_DEBUG,"The router's pk matches the one we meant to connect to. Good.");
- } else {
- if(connection_exact_get_by_addr_port(router->addr,router->or_port)) {
- log_fn(LOG_INFO,"Router %s is already connected. Dropping.", router->nickname);
- return -1;
- }
- connection_or_init_conn_from_router(conn, router);
- }
- crypto_free_pk_env(pk);
- } else { /* it's an OP */
- conn->receiver_bucket = conn->bandwidth = DEFAULT_BANDWIDTH_OP;
- }
- } else { /* I'm a client */
- if(!tor_tls_peer_has_cert(conn->tls)) { /* it's a client too?! */
- log_fn(LOG_WARNING,"Neither peer sent a cert! Closing.");
- return -1;
- }
- pk = tor_tls_verify(conn->tls);
- if(!pk) {
- log_fn(LOG_WARNING,"Other side has a cert but it's invalid. Closing.");
- return -1;
- }
- router = router_get_by_link_pk(pk);
- if (!router) {
- log_fn(LOG_WARNING,"Unrecognized public key from peer. Closing.");
- crypto_free_pk_env(pk);
- return -1;
- }
- if(crypto_pk_cmp_keys(conn->link_pkey, pk)) {
- log_fn(LOG_WARNING,"We connected to '%s' but he gave us a different key. Closing.", router->nickname);
- crypto_free_pk_env(pk);
- return -1;
- }
- log_fn(LOG_DEBUG,"The router's pk matches the one we meant to connect to. Good.");
- crypto_free_pk_env(pk);
- conn->receiver_bucket = conn->bandwidth = DEFAULT_BANDWIDTH_OP;
- circuit_n_conn_open(conn); /* send the pending create */
- }
- return 0;
-}
-
/* take conn, make a nonblocking socket; try to connect to
* addr:port (they arrive in *host order*). If fail, return -1. Else
* assign s to conn->s: if connected return 1, if eagain return 0.