From 0fad3d64d2fe2fe4e187ef752ec4dc888aea2617 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Wed, 2 Jan 2008 08:27:03 +0000 Subject: Related to ticket #437: optimize the stack usage of pjsua-lib git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1655 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsua-lib/pjsua_acc.c | 8 +++++--- pjsip/src/pjsua-lib/pjsua_call.c | 2 +- pjsip/src/pjsua-lib/pjsua_media.c | 43 ++++++++++++++++++++++----------------- 3 files changed, 30 insertions(+), 23 deletions(-) (limited to 'pjsip') diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c index 76dca8e0..cd1b5931 100644 --- a/pjsip/src/pjsua-lib/pjsua_acc.c +++ b/pjsip/src/pjsua-lib/pjsua_acc.c @@ -864,7 +864,6 @@ static pj_status_t pjsua_regc_init(int acc_id) { pjsua_acc *acc; pj_str_t contact; - char contact_buf[1024]; pj_pool_t *pool; pj_status_t status; @@ -893,7 +892,7 @@ static pj_status_t pjsua_regc_init(int acc_id) return status; } - pool = pj_pool_create_on_buf(NULL, contact_buf, sizeof(contact_buf)); + pool = pjsua_pool_create("tmpregc", 512, 512); status = pjsua_acc_create_uac_contact( pool, &contact, acc_id, &acc->cfg.reg_uri); if (status != PJ_SUCCESS) { @@ -901,6 +900,7 @@ static pj_status_t pjsua_regc_init(int acc_id) " for registration", status); pjsip_regc_destroy(acc->regc); + pj_pool_release(pool); acc->regc = NULL; return status; } @@ -916,6 +916,7 @@ static pj_status_t pjsua_regc_init(int acc_id) "Client registration initialization error", status); pjsip_regc_destroy(acc->regc); + pj_pool_release(pool); acc->regc = NULL; return status; } @@ -952,7 +953,6 @@ static pj_status_t pjsua_regc_init(int acc_id) const pj_str_t STR_USER_AGENT = { "User-Agent", 10 }; pjsip_generic_string_hdr *h; - pool = pj_pool_create_on_buf(NULL, contact_buf, sizeof(contact_buf)); pj_list_init(&hdr_list); h = pjsip_generic_string_hdr_create(pool, &STR_USER_AGENT, @@ -962,6 +962,8 @@ static pj_status_t pjsua_regc_init(int acc_id) pjsip_regc_add_headers(acc->regc, &hdr_list); } + pj_pool_release(pool); + return PJ_SUCCESS; } diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c index 7359faa3..eaa1f41c 100644 --- a/pjsip/src/pjsua-lib/pjsua_call.c +++ b/pjsip/src/pjsua-lib/pjsua_call.c @@ -1500,7 +1500,7 @@ PJ_DEF(pj_status_t) pjsua_call_xfer_replaces( pjsua_call_id call_id, { pjsua_call *dest_call; pjsip_dialog *dest_dlg; - char str_dest_buf[512]; + char str_dest_buf[PJSIP_MAX_URL_SIZE*2]; pj_str_t str_dest; int len; pjsip_uri *uri; diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 1d1e727f..4a4292d4 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -220,7 +220,7 @@ static pj_status_t create_rtp_rtcp_sock(const pjsua_transport_config *cfg, pj_sockaddr_in bound_addr; pj_sockaddr_in mapped_addr[2]; pj_status_t status = PJ_SUCCESS; - char addr_buf[80]; + char addr_buf[PJ_INET6_ADDRSTRLEN+2]; pj_sock_t sock[2]; /* Make sure STUN server resolution has completed */ @@ -624,6 +624,7 @@ static pj_status_t create_ice_media_transports(pjsua_transport_config *cfg) pj_ice_strans_comp comp; pjmedia_ice_cb ice_cb; int next_port; + char name[32]; #if PJMEDIA_ADVERTISE_RTCP enum { COMP_CNT=2 }; #else @@ -633,7 +634,9 @@ static pj_status_t create_ice_media_transports(pjsua_transport_config *cfg) pj_bzero(&ice_cb, sizeof(pjmedia_ice_cb)); ice_cb.on_ice_complete = &on_ice_complete; - status = pjmedia_ice_create(pjsua_var.med_endpt, NULL, COMP_CNT, + pj_ansi_snprintf(name, sizeof(name), "icetp%02d", i); + + status = pjmedia_ice_create(pjsua_var.med_endpt, name, COMP_CNT, &pjsua_var.stun_cfg, &ice_cb, &pjsua_var.calls[i].med_tp); if (status != PJ_SUCCESS) { @@ -890,8 +893,6 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, pjmedia_session_info sess_info; pjmedia_stream_info *si = NULL; pjmedia_port *media_port; - pj_str_t port_name; - char tmp[PJSIP_MAX_URL_SIZE]; pj_status_t status; /* Destroy existing media session, if any. */ @@ -952,7 +953,6 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, /* No need because we need keepalive? */ } else { - /* Start ICE */ if (pjsua_var.media_cfg.enable_ice) { status = pjmedia_ice_start_ice(call->med_tp, call->inv->pool, @@ -1012,19 +1012,24 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, /* * Add the call to conference bridge. */ - port_name.ptr = tmp; - port_name.slen = pjsip_uri_print(PJSIP_URI_IN_REQ_URI, - call->inv->dlg->remote.info->uri, - tmp, sizeof(tmp)); - if (port_name.slen < 1) { - port_name = pj_str("call"); - } - status = pjmedia_conf_add_port( pjsua_var.mconf, call->inv->pool, - media_port, - &port_name, - (unsigned*)&call->conf_slot); - if (status != PJ_SUCCESS) { - return status; + { + char tmp[PJSIP_MAX_URL_SIZE]; + pj_str_t port_name; + + port_name.ptr = tmp; + port_name.slen = pjsip_uri_print(PJSIP_URI_IN_REQ_URI, + call->inv->dlg->remote.info->uri, + tmp, sizeof(tmp)); + if (port_name.slen < 1) { + port_name = pj_str("call"); + } + status = pjmedia_conf_add_port( pjsua_var.mconf, call->inv->pool, + media_port, + &port_name, + (unsigned*)&call->conf_slot); + if (status != PJ_SUCCESS) { + return status; + } } /* Call's media state is active */ @@ -1089,7 +1094,7 @@ PJ_DEF(unsigned) pjsua_conf_get_max_ports(void) */ PJ_DEF(unsigned) pjsua_conf_get_active_ports(void) { - unsigned ports[256]; + unsigned ports[PJSUA_MAX_CONF_PORTS]; unsigned count = PJ_ARRAY_SIZE(ports); pj_status_t status; -- cgit v1.2.3