diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2011-12-07 10:43:28 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2011-12-07 10:43:28 +0000 |
commit | 2ba3536e2d318130242c35ed053aaae7f771b261 (patch) | |
tree | 564da2c0e0a5b2b2fef7a50342286727eb825662 /pjsip-apps/src/pjsua | |
parent | 3a0786774a23558b8da85fd261b2858995c2c999 (diff) |
Re #1234: Initial version of keyframe request/response via SIP INFO.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3901 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip-apps/src/pjsua')
-rw-r--r-- | pjsip-apps/src/pjsua/pjsua_app.c | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c index e459d95c..aa810ca5 100644 --- a/pjsip-apps/src/pjsua/pjsua_app.c +++ b/pjsip-apps/src/pjsua/pjsua_app.c @@ -2633,7 +2633,30 @@ static void on_call_tsx_state(pjsua_call_id call_id, /* * Handle INFO method. */ - if (tsx->role == PJSIP_ROLE_UAC && + const pj_str_t STR_APPLICATION = { "application", 11}; + const pj_str_t STR_DTMF_RELAY = { "dtmf-relay", 10 }; + pjsip_msg_body *body = NULL; + pj_bool_t dtmf_info = PJ_FALSE; + + if (tsx->role == PJSIP_ROLE_UAC) { + if (e->body.tsx_state.type == PJSIP_EVENT_TX_MSG) + body = e->body.tsx_state.src.tdata->msg->body; + else + body = e->body.tsx_state.tsx->last_tx->msg->body; + } else { + if (e->body.tsx_state.type == PJSIP_EVENT_RX_MSG) + body = e->body.tsx_state.src.rdata->msg_info.msg->body; + } + + /* Check DTMF content in the INFO message */ + if (body && body->len && + pj_stricmp(&body->content_type.type, &STR_APPLICATION)==0 && + pj_stricmp(&body->content_type.subtype, &STR_DTMF_RELAY)==0) + { + dtmf_info = PJ_TRUE; + } + + if (dtmf_info && tsx->role == PJSIP_ROLE_UAC && (tsx->state == PJSIP_TSX_STATE_COMPLETED || (tsx->state == PJSIP_TSX_STATE_TERMINATED && e->body.tsx_state.prev_state != PJSIP_TSX_STATE_COMPLETED))) @@ -2651,7 +2674,7 @@ static void on_call_tsx_state(pjsua_call_id call_id, (int)tsx->status_text.slen, tsx->status_text.ptr)); } - } else if (tsx->role == PJSIP_ROLE_UAS && + } else if (dtmf_info && tsx->role == PJSIP_ROLE_UAS && tsx->state == PJSIP_TSX_STATE_TRYING) { /* Answer incoming INFO with 200/OK */ @@ -2882,9 +2905,9 @@ static void on_call_media_state(pjsua_call_id call_id) vid_idx = pjsua_call_get_vid_stream_idx(call_id); if (vid_idx == -1 || call_info.media[vid_idx].dir == PJMEDIA_DIR_NONE) { PJ_LOG(3,(THIS_FILE, - "Just rejected incoming video offer on call %d" - "use \"vid call add\" to enable video!", - call_id)); + "Just rejected incoming video offer on call %d, " + "use \"vid call enable %d\" or \"vid call add\" to enable video!", + call_id, vid_idx)); } } #endif |