summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua
diff options
context:
space:
mode:
authorRiza Sulistyo <riza@teluu.com>2014-09-17 12:11:45 +0000
committerRiza Sulistyo <riza@teluu.com>2014-09-17 12:11:45 +0000
commit7e466f2b480ba0120aa15e9ca63edd18f7364af6 (patch)
tree3c70c363f66c7db8db2851e522ac44565a055440 /pjsip/src/pjsip-ua
parentfb3948795ad372ceaad306d2ea18c70ee3a846e4 (diff)
Re #1788: Add support to allow INVITE/reINVITE with unknown body.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4924 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-ua')
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c61
1 files changed, 39 insertions, 22 deletions
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
index d098cd6b..0c08f076 100644
--- a/pjsip/src/pjsip-ua/sip_inv.c
+++ b/pjsip/src/pjsip-ua/sip_inv.c
@@ -4737,36 +4737,53 @@ static void inv_on_state_confirmed( pjsip_inv_session *inv, pjsip_event *e)
}
if (status != PJ_SUCCESS) {
+ pj_bool_t reject_message = PJ_TRUE;
- /* Not Acceptable */
- const pjsip_hdr *accept;
-
- /* The incoming SDP is unacceptable. If the SDP negotiator
- * state has just been changed, i.e: DONE -> REMOTE_OFFER,
- * revert it back.
- */
- if (pjmedia_sdp_neg_get_state(inv->neg) ==
- PJMEDIA_SDP_NEG_STATE_REMOTE_OFFER)
+ if (status == PJMEDIA_SDP_EINSDP)
{
- pjmedia_sdp_neg_cancel_offer(inv->neg);
+ sdp_info = pjsip_rdata_get_sdp_info(rdata);
+ if (sdp_info->body.ptr == NULL &&
+ PJSIP_INV_ACCEPT_UNKNOWN_BODY)
+ {
+ /* Message body is not "application/sdp" */
+ reject_message = PJ_FALSE;
+ }
}
- status = pjsip_dlg_create_response(inv->dlg, rdata,
- 488, NULL, &tdata);
- if (status != PJ_SUCCESS)
- return;
+ if (reject_message) {
+ /* Not Acceptable */
+ const pjsip_hdr *accept;
+ /* The incoming SDP is unacceptable. If the SDP negotiator
+ * state has just been changed, i.e: DONE -> REMOTE_OFFER,
+ * revert it back.
+ */
+ if (pjmedia_sdp_neg_get_state(inv->neg) ==
+ PJMEDIA_SDP_NEG_STATE_REMOTE_OFFER)
+ {
+ pjmedia_sdp_neg_cancel_offer(inv->neg);
+ }
- accept = pjsip_endpt_get_capability(dlg->endpt, PJSIP_H_ACCEPT,
- NULL);
- if (accept) {
- pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)
- pjsip_hdr_clone(tdata->pool, accept));
- }
+ status = pjsip_dlg_create_response(inv->dlg, rdata,
+ (status == PJMEDIA_SDP_EINSDP)?415:488,
+ NULL, &tdata);
- status = pjsip_dlg_send_response(dlg, tsx, tdata);
+ if (status != PJ_SUCCESS)
+ return;
- return;
+
+ accept = pjsip_endpt_get_capability(dlg->endpt,
+ PJSIP_H_ACCEPT,
+ NULL);
+ if (accept) {
+ pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)
+ pjsip_hdr_clone(tdata->pool, accept));
+ }
+
+ status = pjsip_dlg_send_response(dlg, tsx, tdata);
+
+ return;
+ }
}
/* Create 2xx ANSWER */