summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-03-27 11:00:38 +0000
committerBenny Prijono <bennylp@teluu.com>2007-03-27 11:00:38 +0000
commitd700d4a60001dd6a9c0c515e6cb359c9118d00ce (patch)
tree56d431bc74745df0fe73f41e6e1cf2c0f592d3a4 /pjmedia
parent63bbc72f8536347656ac59dea7fb9576c82ac55d (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
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/include/pjmedia/transport_ice.h3
-rw-r--r--pjmedia/src/pjmedia/transport_ice.c35
2 files changed, 28 insertions, 10 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;