summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-01-02 08:28:33 +0000
committerBenny Prijono <bennylp@teluu.com>2008-01-02 08:28:33 +0000
commit46a6ba1778fd458bcb91de4881717aaa710130d9 (patch)
treef64dad68c711b61ee53f3de936956e3ed30ba693 /pjmedia
parent0fad3d64d2fe2fe4e187ef752ec4dc888aea2617 (diff)
Related to ticket #437: reduce the stack usage of ICE media transport
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1656 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia/transport_ice.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/pjmedia/src/pjmedia/transport_ice.c b/pjmedia/src/pjmedia/transport_ice.c
index 5b3e9e0d..649aeac7 100644
--- a/pjmedia/src/pjmedia/transport_ice.c
+++ b/pjmedia/src/pjmedia/transport_ice.c
@@ -94,6 +94,10 @@ static pjmedia_transport_op tp_ice_op =
&pjmedia_ice_destroy
};
+static const pj_str_t STR_CANDIDATE = {"candidate", 9};
+static const pj_str_t STR_ICE_LITE = {"ice-lite", 8};
+static const pj_str_t STR_ICE_MISMATCH = {"ice-mismatch", 12};
+
/*
* Create ICE media transport.
@@ -467,16 +471,13 @@ PJ_DEF(pj_status_t) pjmedia_ice_start_ice(pjmedia_transport *tp,
struct transport_ice *tp_ice = (struct transport_ice*)tp;
const pjmedia_sdp_attr *attr;
unsigned i, cand_cnt;
- pj_ice_sess_cand cand[PJ_ICE_MAX_CAND];
+ pj_ice_sess_cand *cand;
const pjmedia_sdp_media *sdp_med;
pj_bool_t remote_is_lite = PJ_FALSE;
pj_bool_t ice_mismatch = PJ_FALSE;
pjmedia_sdp_conn *conn = NULL;
pj_sockaddr conn_addr;
pj_bool_t conn_found_in_candidate = PJ_FALSE;
- const pj_str_t STR_CANDIDATE = {"candidate", 9};
- const pj_str_t STR_ICE_LITE = {"ice-lite", 8};
- const pj_str_t STR_ICE_MISMATCH = {"ice-mismatch", 12};
pj_str_t uname, pass;
pj_status_t status;
@@ -529,9 +530,13 @@ PJ_DEF(pj_status_t) pjmedia_ice_start_ice(pjmedia_transport *tp,
}
pass = attr->value;
+ /* Allocate candidate array */
+ cand = (pj_ice_sess_cand*)
+ pj_pool_calloc(pool, PJ_ICE_MAX_CAND, sizeof(pj_ice_sess_cand));
+
/* Get all candidates in the media */
cand_cnt = 0;
- for (i=0; i<sdp_med->attr_count; ++i) {
+ for (i=0; i<sdp_med->attr_count && cand_cnt < PJ_ICE_MAX_CAND; ++i) {
pjmedia_sdp_attr *attr;
attr = sdp_med->attr[i];