summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2009-11-20 07:48:41 +0000
committerNanang Izzuddin <nanang@teluu.com>2009-11-20 07:48:41 +0000
commitb8350d459e3d56e65ee9a1ea7fe3338ad51af476 (patch)
tree68138f6a00c120e4c55d951618efb9086d06485b
parent573b4160ee033f8dee2c481c9dbe9b23fee9cae7 (diff)
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
-rw-r--r--pjlib/src/pj/ssl_sock_ossl.c16
-rw-r--r--pjsip/src/pjsip/sip_transport_tls.c2
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);
}