From b8350d459e3d56e65ee9a1ea7fe3338ad51af476 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Fri, 20 Nov 2009 07:48:41 +0000 Subject: Ticket #957: - Fixed compile error of incompatible param type (or bad type conversion) on Symbian 5th ed (and perhaps also on some GCC versions). - Fixed on_connect_complete() to reset SSL sock state before callback when connection fails (OpenSSL impl). - Fixed saving remote address before start connecting, so it won't miss remote address info when socket connection establishes immediately (OpenSSL impl). git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3020 74dad513-b988-da41-8d7b-12977e46ad98 --- pjlib/src/pj/ssl_sock_ossl.c | 16 +++++++++------- pjsip/src/pjsip/sip_transport_tls.c | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/pjlib/src/pj/ssl_sock_ossl.c b/pjlib/src/pj/ssl_sock_ossl.c index ae7549ab..3b0e86fe 100644 --- a/pjlib/src/pj/ssl_sock_ossl.c +++ b/pjlib/src/pj/ssl_sock_ossl.c @@ -767,16 +767,18 @@ static pj_bool_t on_handshake_complete(pj_ssl_sock_t *ssock, /* Connecting */ else { + /* On failure, reset SSL socket state first, as app may try to + * reconnect in the callback. + */ + if (status != PJ_SUCCESS) { + reset_ssl_sock_state(ssock); + } if (ssock->param.cb.on_connect_complete) { pj_bool_t ret; ret = (*ssock->param.cb.on_connect_complete)(ssock, status); if (ret == PJ_FALSE) return PJ_FALSE; } - if (status != PJ_SUCCESS) { - /* Reset SSL socket state */ - reset_ssl_sock_state(ssock); - } } return PJ_TRUE; @@ -2077,6 +2079,9 @@ PJ_DECL(pj_status_t) pj_ssl_sock_start_connect(pj_ssl_sock_t *ssock, if (status != PJ_SUCCESS) goto on_error; + /* Save remote address */ + pj_sockaddr_cp(&ssock->rem_addr, remaddr); + status = pj_activesock_start_connect(ssock->asock, pool, remaddr, addr_len); @@ -2097,9 +2102,6 @@ PJ_DECL(pj_status_t) pj_ssl_sock_start_connect(pj_ssl_sock_t *ssock, * once the socket is established. */ - /* Set remote address */ - pj_sockaddr_cp(&ssock->rem_addr, remaddr); - /* Update SSL state */ ssock->is_server = PJ_FALSE; diff --git a/pjsip/src/pjsip/sip_transport_tls.c b/pjsip/src/pjsip/sip_transport_tls.c index 0c9ae7ae..a61cee29 100644 --- a/pjsip/src/pjsip/sip_transport_tls.c +++ b/pjsip/src/pjsip/sip_transport_tls.c @@ -884,7 +884,7 @@ static pj_status_t lis_create_transport(pjsip_tpfactory *factory, (pj_sockaddr_t*)&tls->base.local_addr)) { /* Update port only */ - pj_sockaddr_set_port((pj_sockaddr_t*)&tls->base.local_addr, + pj_sockaddr_set_port(&tls->base.local_addr, new_port); } -- cgit v1.2.3