X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=lib%2Fconn.c;h=09a1ac07d37b3efde289bf54c38ecf36a9c48c57;hb=683e3e1bbbdfe2f08dc12f1e840e71ed6088a0e3;hp=9f114a52323eb96565c101d0b7d719068e52e647;hpb=c739469b9208ff8eb8bf9833ba4f0440cd7fcc16;p=libradsec.git diff --git a/lib/conn.c b/lib/conn.c index 9f114a5..09a1ac0 100644 --- a/lib/conn.c +++ b/lib/conn.c @@ -1,11 +1,13 @@ /* Copyright 2010, 2011 NORDUnet A/S. All rights reserved. - See the file COPYING for licensing information. */ + See LICENSE for licensing information. */ #if defined HAVE_CONFIG_H #include #endif #include +#include +#include #include #include #include @@ -126,6 +128,14 @@ rs_conn_destroy (struct rs_connection *conn) if (conn->is_connected) err = rs_conn_disconnect (conn); + +#if defined (RS_ENABLE_TLS) + if (conn->tls_ssl) /* FIXME: Free SSL strucxt in rs_conn_disconnect? */ + SSL_free (conn->tls_ssl); + if (conn->tls_ctx) + SSL_CTX_free (conn->tls_ctx); +#endif + if (conn->tev) event_free (conn->tev); if (conn->bev) @@ -137,9 +147,6 @@ rs_conn_destroy (struct rs_connection *conn) if (conn->evb) event_base_free (conn->evb); - /* TODO: free tls_ctx */ - /* TODO: free tls_ssl */ - rs_free (conn->ctx, conn); return err; @@ -200,7 +207,7 @@ _rcb (struct rs_packet *packet, void *user_data) assert (pkt); assert (pkt->conn); - pkt->flags |= rs_packet_received_flag; + pkt->flags |= RS_PACKET_RECEIVED; if (pkt->conn->bev) bufferevent_disable (pkt->conn->bev, EV_WRITE|EV_READ); else @@ -217,7 +224,7 @@ rs_conn_receive_packet (struct rs_connection *conn, assert (conn); assert (conn->realm); - assert (!conn_user_dispatch_p (conn)); /* Dispatching mode only. */ + assert (!conn_user_dispatch_p (conn)); /* Blocking mode only. */ if (rs_packet_create (conn, &pkt)) return -1; @@ -227,7 +234,7 @@ rs_conn_receive_packet (struct rs_connection *conn, conn->callbacks.received_cb = _rcb; conn->user_data = pkt; - pkt->flags &= ~rs_packet_received_flag; + pkt->flags &= ~RS_PACKET_RECEIVED; if (conn->bev) /* TCP. */ { @@ -247,7 +254,7 @@ rs_conn_receive_packet (struct rs_connection *conn, "event_add: %s", evutil_gai_strerror (err)); - /* Activae retransmission timer. */ + /* Activate retransmission timer. */ conn_activate_timeout (pkt->conn); } @@ -260,11 +267,14 @@ rs_conn_receive_packet (struct rs_connection *conn, evutil_gai_strerror (err)); rs_debug (("%s: event loop done\n", __func__)); - if ((pkt->flags & rs_packet_received_flag) == 0 + if ((pkt->flags & RS_PACKET_RECEIVED) == 0 || (req_msg && packet_verify_response (pkt->conn, pkt, req_msg) != RSE_OK)) { - assert (rs_err_conn_peek_code (pkt->conn)); + if (rs_err_conn_peek_code (pkt->conn) == RSE_OK) + /* No packet and no error on the stack _should_ mean that the + server hung up on us. */ + rs_err_conn_push (pkt->conn, RSE_DISCO, "no response"); return rs_err_conn_peek_code (conn); }