diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-03-27 11:00:38 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-03-27 11:00:38 +0000 |
commit | d700d4a60001dd6a9c0c515e6cb359c9118d00ce (patch) | |
tree | 56d431bc74745df0fe73f41e6e1cf2c0f592d3a4 | |
parent | 63bbc72f8536347656ac59dea7fb9576c82ac55d (diff) |
ICE: added media index in pjmedia when handling SDP containing ICE candidates
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1108 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r-- | pjmedia/include/pjmedia/transport_ice.h | 3 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/transport_ice.c | 35 | ||||
-rw-r--r-- | pjnath/src/pjnath-test/ice_test.c | 11 | ||||
-rw-r--r-- | pjnath/src/pjnath-test/test.c | 2 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 2 |
5 files changed, 40 insertions, 13 deletions
diff --git a/pjmedia/include/pjmedia/transport_ice.h b/pjmedia/include/pjmedia/transport_ice.h index 0fcd5a4b..ab973c7b 100644 --- a/pjmedia/include/pjmedia/transport_ice.h +++ b/pjmedia/include/pjmedia/transport_ice.h @@ -66,7 +66,8 @@ PJ_DECL(pj_status_t) pjmedia_ice_modify_sdp(pjmedia_transport *tp, pjmedia_sdp_session *sdp); PJ_DECL(pj_status_t) pjmedia_ice_start_ice(pjmedia_transport *tp, pj_pool_t *pool, - pjmedia_sdp_session *rem_sdp); + pjmedia_sdp_session *rem_sdp, + unsigned media_index); PJ_DECL(pj_status_t) pjmedia_ice_stop_ice(pjmedia_transport *tp); diff --git a/pjmedia/src/pjmedia/transport_ice.c b/pjmedia/src/pjmedia/transport_ice.c index 3397e3e1..8ad0a4ed 100644 --- a/pjmedia/src/pjmedia/transport_ice.c +++ b/pjmedia/src/pjmedia/transport_ice.c @@ -400,39 +400,56 @@ static void set_no_ice(struct transport_ice *tp_ice) PJ_DEF(pj_status_t) pjmedia_ice_start_ice(pjmedia_transport *tp, pj_pool_t *pool, - pjmedia_sdp_session *rem_sdp) + pjmedia_sdp_session *rem_sdp, + unsigned media_index) { struct transport_ice *tp_ice = (struct transport_ice*)tp; pjmedia_sdp_attr *attr; unsigned i, cand_cnt; pj_ice_cand cand[PJ_ICE_MAX_CAND]; + pjmedia_sdp_media *sdp_med; pj_str_t uname, pass; pj_status_t status; - /* Find ice-ufrag attribute */ + PJ_ASSERT_RETURN(tp && pool && rem_sdp, PJ_EINVAL); + PJ_ASSERT_RETURN(media_index < rem_sdp->media_count, PJ_EINVAL); + + sdp_med = rem_sdp->media[media_index]; + + /* Find ice-ufrag attribute in session descriptor */ attr = pjmedia_sdp_attr_find2(rem_sdp->attr_count, rem_sdp->attr, "ice-ufrag", NULL); if (attr == NULL) { - set_no_ice(tp_ice); - return PJ_SUCCESS; + /* Find in media descriptor */ + attr = pjmedia_sdp_attr_find2(sdp_med->attr_count, sdp_med->attr, + "ice-ufrag", NULL); + if (attr == NULL) { + set_no_ice(tp_ice); + return PJ_SUCCESS; + } } uname = attr->value; - /* Find ice-pwd attribute */ + /* Find ice-pwd attribute in session descriptor */ attr = pjmedia_sdp_attr_find2(rem_sdp->attr_count, rem_sdp->attr, "ice-pwd", NULL); if (attr == NULL) { - set_no_ice(tp_ice); - return PJ_SUCCESS; + /* Not found, find in media descriptor */ + attr = pjmedia_sdp_attr_find2(sdp_med->attr_count, sdp_med->attr, + "ice-pwd", NULL); + if (attr == NULL) { + set_no_ice(tp_ice); + return PJ_SUCCESS; + } } pass = attr->value; /* Get all candidates */ cand_cnt = 0; - for (i=0; i<rem_sdp->media[0]->attr_count; ++i) { + for (i=0; i<sdp_med->attr_count; ++i) { pjmedia_sdp_attr *attr; - attr = rem_sdp->media[0]->attr[i]; + attr = sdp_med->attr[i]; if (pj_strcmp2(&attr->name, "candidate")!=0) continue; diff --git a/pjnath/src/pjnath-test/ice_test.c b/pjnath/src/pjnath-test/ice_test.c index f8673356..d9a97ee6 100644 --- a/pjnath/src/pjnath-test/ice_test.c +++ b/pjnath/src/pjnath-test/ice_test.c @@ -459,7 +459,11 @@ int ice_test(void) pj_stun_config_init(&stun_cfg, mem, 0, ioqueue, timer_heap); - //pj_log_set_level(4); +#if 1 + pj_log_set_level(5); +#endif + + goto test; /* Basic create/destroy */ rc = ice_basic_create_destroy_test(); @@ -487,10 +491,13 @@ int ice_test(void) goto on_return; /* Direct communication with two components */ +test: rc = perform_ice_test("With two components (RTP and RTCP)", PJ_TRUE, 2, PJ_TRUE, D1, D2, 0, NULL, 0, NULL); if (rc != 0) goto on_return; + goto on_return; + /* Direct communication with mismatch number of components */ /* Direct communication with 2 components and 2 invalid address */ @@ -501,7 +508,7 @@ int ice_test(void) on_return: - //pj_log_set_level(3); + pj_log_set_level(3); pj_ioqueue_destroy(stun_cfg.ioqueue); pj_pool_release(pool); return rc; diff --git a/pjnath/src/pjnath-test/test.c b/pjnath/src/pjnath-test/test.c index 6cc829d5..3dc2085d 100644 --- a/pjnath/src/pjnath-test/test.c +++ b/pjnath/src/pjnath-test/test.c @@ -49,9 +49,11 @@ static int test_inner(void) mem = &caching_pool.factory; +#if 0 pj_log_set_level(3); pj_log_set_decor(PJ_LOG_HAS_NEWLINE | PJ_LOG_HAS_TIME | PJ_LOG_HAS_MICRO_SEC); +#endif rc = pj_init(); if (rc != 0) { diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index c91a1ead..2e0af481 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -822,7 +822,7 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, /* Start ICE */ if (pjsua_var.media_cfg.enable_ice) { status = pjmedia_ice_start_ice(call->med_tp, call->inv->pool, - remote_sdp); + remote_sdp, 0); if (status != PJ_SUCCESS) return status; } |