From 7237d05a6be9697d0d8cc380d932d838c669b52a Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Thu, 30 Mar 2006 16:46:36 +0000 Subject: Support for alternate pool backend git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@368 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsua-lib/pjsua_call.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) (limited to 'pjsip/src/pjsua-lib') diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c index b01b968d..d18a59da 100644 --- a/pjsip/src/pjsua-lib/pjsua_call.c +++ b/pjsip/src/pjsua-lib/pjsua_call.c @@ -98,28 +98,17 @@ static void schedule_call_timer( pjsua_call *call, pj_timer_entry *e, /* Close and reopen socket. */ -static pj_status_t reopen_sock( pj_sock_t *sock) +static pj_status_t reopen_sock( pj_sock_t *sock, pj_sockaddr_in *addr) { - pj_sockaddr_in addr; - int addrlen; pj_status_t status; - addrlen = sizeof(pj_sockaddr_in); - status = pj_sock_getsockname(*sock, &addr, &addrlen); - if (status != PJ_SUCCESS) { - pjsua_perror(THIS_FILE, "Error getting RTP/RTCP socket name", status); - return status; - } - - pj_sock_close(*sock); - status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, sock); if (status != PJ_SUCCESS) { pjsua_perror(THIS_FILE, "Unable to create socket", status); return status; } - status = pj_sock_bind(*sock, &addr, sizeof(pj_sockaddr_in)); + status = pj_sock_bind(*sock, addr, sizeof(pj_sockaddr_in)); if (status != PJ_SUCCESS) { pjsua_perror(THIS_FILE, "Unable to re-bind RTP/RTCP socket", status); return status; @@ -141,18 +130,27 @@ static pj_status_t call_destroy_media(int call_index) } if (call->session) { + pj_sockaddr_in rtp_addr, rtcp_addr; + int addrlen; + + addrlen = sizeof(rtp_addr); + pj_sock_getsockname(call->skinfo.rtp_sock, &rtp_addr, &addrlen); + + addrlen = sizeof(rtcp_addr); + pj_sock_getsockname(call->skinfo.rtcp_sock, &rtcp_addr, &addrlen); + + /* Destroy session (this will also close RTP/RTCP sockets). */ + pjmedia_session_destroy(call->session); /* Close and reopen RTP socket. * This is necessary to get the socket unregistered from ioqueue, * when IOCompletionPort is used. */ - reopen_sock(&call->skinfo.rtp_sock); + reopen_sock(&call->skinfo.rtp_sock, &rtp_addr); /* Close and reopen RTCP socket too. */ - reopen_sock(&call->skinfo.rtcp_sock); + reopen_sock(&call->skinfo.rtcp_sock, &rtcp_addr); - /* Must destroy session after socket is closed. */ - pjmedia_session_destroy(call->session); call->session = NULL; } -- cgit v1.2.3