X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=lib%2Fconn.c;h=c6692a263b03978fdd407f204925d019970cd819;hb=937144b230752ac640e611cabb57387f613997bc;hp=c60ecf92320e9f1defd902cc405e1f746a49c04f;hpb=9027580886c3a1d66d83fbfbbeda0b2a144a02da;p=radsecproxy.git diff --git a/lib/conn.c b/lib/conn.c index c60ecf9..c6692a2 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 @@ -20,11 +22,12 @@ int conn_close (struct rs_connection **connp) { - int r; + int r = 0; assert (connp); assert (*connp); - r = rs_conn_destroy (*connp); - if (!r) + if ((*connp)->is_connected) + r = rs_conn_disconnect (*connp); + if (r == RSE_OK) *connp = NULL; return r; } @@ -125,16 +128,25 @@ 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) bufferevent_free (conn->bev); + if (conn->rev) + event_free (conn->rev); + if (conn->wev) + event_free (conn->wev); if (conn->evb) event_base_free (conn->evb); - /* TODO: free tls_ctx */ - /* TODO: free tls_ssl */ - rs_free (conn->ctx, conn); return err; @@ -212,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; @@ -242,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); } @@ -259,7 +271,10 @@ rs_conn_receive_packet (struct rs_connection *conn, || (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); }