diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2009-06-22 14:06:40 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2009-06-22 14:06:40 +0000 |
commit | 5949095a757f1ee521cd158d917b51f5d758e94e (patch) | |
tree | 41f93b034c4dc60d4dc9331ded932a268cd3ebd9 | |
parent | a274aa80702d4523cc5d60fbcaa85b9b96439e68 (diff) |
Ticket #758:
- fixed transport TCP to call on_connect_complete when connect() returns PJ_SUCCESS.
- added option to enable transport TCP in symbian_ua.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2781 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r-- | pjsip-apps/src/symbian_ua/ua.cpp | 18 | ||||
-rw-r--r-- | pjsip/src/pjsip/sip_transport_tcp.c | 40 |
2 files changed, 37 insertions, 21 deletions
diff --git a/pjsip-apps/src/symbian_ua/ua.cpp b/pjsip-apps/src/symbian_ua/ua.cpp index 033a2f2a..2b36b709 100644 --- a/pjsip-apps/src/symbian_ua/ua.cpp +++ b/pjsip-apps/src/symbian_ua/ua.cpp @@ -51,6 +51,10 @@ #define SIP_PROXY NULL //#define SIP_PROXY "<sip:192.168.0.8;lr>" +// +// Set to 1 if TCP is desired (experimental) +// +#define ENABLE_SIP_TCP 0 // // Configure nameserver if DNS SRV is to be used with both SIP @@ -378,11 +382,23 @@ static pj_status_t app_startup() tcfg.port = SIP_PORT; status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &tcfg, &tid); if (status != PJ_SUCCESS) { - pjsua_perror(THIS_FILE, "Error creating transport", status); + pjsua_perror(THIS_FILE, "Error creating UDP transport", status); pjsua_destroy(); return status; } + /* Add TCP transport */ +#if ENABLE_SIP_TCP + pjsua_transport_config_default(&tcfg); + tcfg.port = SIP_PORT; + status = pjsua_transport_create(PJSIP_TRANSPORT_TCP, &tcfg, &tid); + if (status != PJ_SUCCESS) { + pjsua_perror(THIS_FILE, "Error creating TCP transport", status); + pjsua_destroy(); + return status; + } +#endif + /* Add account for the transport */ pjsua_acc_add_local(tid, PJ_TRUE, &g_acc_id); diff --git a/pjsip/src/pjsip/sip_transport_tcp.c b/pjsip/src/pjsip/sip_transport_tcp.c index a9b3bd27..1692459a 100644 --- a/pjsip/src/pjsip/sip_transport_tcp.c +++ b/pjsip/src/pjsip/sip_transport_tcp.c @@ -805,33 +805,33 @@ static pj_status_t lis_create_transport(pjsip_tpfactory *factory, status = pj_activesock_start_connect(tcp->asock, tcp->base.pool, rem_addr, sizeof(pj_sockaddr_in)); if (status == PJ_SUCCESS) { - tcp->has_pending_connect = PJ_FALSE; + on_connect_complete(tcp->asock, PJ_SUCCESS); } else if (status != PJ_EPENDING) { tcp_destroy(&tcp->base, status); return status; } - /* Update (again) local address, just in case local address currently - * set is different now that asynchronous connect() is started. - */ - addr_len = sizeof(pj_sockaddr_in); - if (pj_sock_getsockname(sock, &local_addr, &addr_len)==PJ_SUCCESS) { - pj_sockaddr_in *tp_addr = (pj_sockaddr_in*)&tcp->base.local_addr; - - /* Some systems (like old Win32 perhaps) may not set local address - * properly before socket is fully connected. + if (tcp->has_pending_connect) { + /* Update (again) local address, just in case local address currently + * set is different now that asynchronous connect() is started. */ - if (tp_addr->sin_addr.s_addr != local_addr.sin_addr.s_addr && - local_addr.sin_addr.s_addr != 0) - { - tp_addr->sin_addr.s_addr = local_addr.sin_addr.s_addr; - tp_addr->sin_port = local_addr.sin_port; - sockaddr_to_host_port(tcp->base.pool, &tcp->base.local_name, - &local_addr); - } - } + addr_len = sizeof(pj_sockaddr_in); + if (pj_sock_getsockname(sock, &local_addr, &addr_len)==PJ_SUCCESS) { + pj_sockaddr_in *tp_addr = (pj_sockaddr_in*)&tcp->base.local_addr; - if (tcp->has_pending_connect) { + /* Some systems (like old Win32 perhaps) may not set local address + * properly before socket is fully connected. + */ + if (tp_addr->sin_addr.s_addr != local_addr.sin_addr.s_addr && + local_addr.sin_addr.s_addr != 0) + { + tp_addr->sin_addr.s_addr = local_addr.sin_addr.s_addr; + tp_addr->sin_port = local_addr.sin_port; + sockaddr_to_host_port(tcp->base.pool, &tcp->base.local_name, + &local_addr); + } + } + PJ_LOG(4,(tcp->base.obj_name, "TCP transport %.*s:%d is connecting to %.*s:%d...", (int)tcp->base.local_name.host.slen, |