diff options
-rw-r--r-- | pjlib/src/pj/ssl_sock_ossl.c | 16 | ||||
-rw-r--r-- | 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); } |