Re #1186: rejecting media did not put c= line, causing PJMEDIA_SDP_EMISSINGCONN error

git-svn-id: https://svn.pjsip.org/repos/pjproject/branches/projects/2.0-dev@3503 74dad513-b988-da41-8d7b-12977e46ad98
This commit is contained in:
Benny Prijono 2011-04-07 05:14:26 +00:00
parent 284b80f521
commit 067a382a50
1 changed files with 30 additions and 4 deletions

View File

@ -261,6 +261,31 @@ PJ_DEF(pj_status_t) pjmedia_sdp_neg_get_neg_local( pjmedia_sdp_neg *neg,
return PJ_SUCCESS;
}
static pjmedia_sdp_media *sdp_media_clone_deactivate(
pj_pool_t *pool,
const pjmedia_sdp_media *rem_med,
const pjmedia_sdp_media *local_med,
const pjmedia_sdp_session *local_sess)
{
pjmedia_sdp_media *res;
res = pjmedia_sdp_media_clone_deactivate(pool, rem_med);
if (!res)
return NULL;
if (!res->conn && (!local_sess || !local_sess->conn)) {
if (local_med && local_med->conn)
res->conn = pjmedia_sdp_conn_clone(pool, local_med->conn);
else {
res->conn = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_conn);
res->conn->net_type = pj_str("IN");
res->conn->addr_type = pj_str("IP4");
res->conn->addr = pj_str("127.0.0.1");
}
}
return res;
}
/*
* Modify local SDP and wait for remote answer.
@ -341,7 +366,7 @@ PJ_DEF(pj_status_t) pjmedia_sdp_neg_modify_local_offer( pj_pool_t *pool,
if (!found) {
pjmedia_sdp_media *m;
m = pjmedia_sdp_media_clone_deactivate(pool, om);
m = sdp_media_clone_deactivate(pool, om, om, local);
pj_array_insert(new_offer->media, sizeof(new_offer->media[0]),
new_offer->media_count++, oi, &m);
@ -1054,7 +1079,8 @@ static pj_status_t process_answer(pj_pool_t *pool,
pjmedia_sdp_media *am;
/* Generate matching-but-disabled-media for the answer */
am = pjmedia_sdp_media_clone_deactivate(pool, offer->media[omi]);
am = sdp_media_clone_deactivate(pool, offer->media[omi],
offer->media[omi], offer);
answer->media[answer->media_count++] = am;
++ami;
@ -1116,7 +1142,7 @@ static pj_status_t match_offer(pj_pool_t *pool,
/* If offer has zero port, just clone the offer */
if (offer->desc.port == 0) {
answer = pjmedia_sdp_media_clone_deactivate(pool, offer);
answer = sdp_media_clone_deactivate(pool, offer, preanswer, NULL);
*p_answer = answer;
return PJ_SUCCESS;
}
@ -1429,7 +1455,7 @@ static pj_status_t create_answer( pj_pool_t *pool,
* ignore anything in the media once it sees that the port
* number is zero.
*/
am = pjmedia_sdp_media_clone_deactivate(pool, om);
am = sdp_media_clone_deactivate(pool, om, om, answer);
} else {
/* The answer is in am */
pj_assert(am != NULL);