summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-01-23 20:29:30 +0000
committerBenny Prijono <bennylp@teluu.com>2008-01-23 20:29:30 +0000
commit38e36e524430f08869bc2364aa7bbbc630778e77 (patch)
tree733589e3a0ac773db4aebb47ff11f85eecbc1bd4 /pjsip/src/pjsip-ua
parent33a56290728f2ad3eee2c9ce5ee807fbe1a101d1 (diff)
Related to ticket #61: added new invite session API pjsip_inv_verify_request() which takes additional remote SDP, to avoid parsing SDP multiple times
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1733 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-ua')
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
index c4c6331d..ee5274fd 100644
--- a/pjsip/src/pjsip-ua/sip_inv.c
+++ b/pjsip/src/pjsip-ua/sip_inv.c
@@ -676,12 +676,13 @@ PJ_DEF(pj_status_t) pjsip_inv_create_uac( pjsip_dialog *dlg,
/*
* Verify incoming INVITE request.
*/
-PJ_DEF(pj_status_t) pjsip_inv_verify_request(pjsip_rx_data *rdata,
- unsigned *options,
- const pjmedia_sdp_session *l_sdp,
- pjsip_dialog *dlg,
- pjsip_endpoint *endpt,
- pjsip_tx_data **p_tdata)
+PJ_DEF(pj_status_t) pjsip_inv_verify_request2(pjsip_rx_data *rdata,
+ unsigned *options,
+ const pjmedia_sdp_session *r_sdp,
+ const pjmedia_sdp_session *l_sdp,
+ pjsip_dialog *dlg,
+ pjsip_endpoint *endpt,
+ pjsip_tx_data **p_tdata)
{
pjsip_msg *msg;
pjsip_allow_hdr *allow;
@@ -722,10 +723,10 @@ PJ_DEF(pj_status_t) pjsip_inv_verify_request(pjsip_rx_data *rdata,
/* Init response header list */
pj_list_init(&res_hdr_list);
- /* Check the request body, see if it'inv something that we support
- * (i.e. SDP).
+ /* Check the request body, see if it's something that we support,
+ * only when the body hasn't been parsed before.
*/
- if (msg->body) {
+ if (r_sdp==NULL && msg->body) {
pjsip_msg_body *body = msg->body;
pj_str_t str_application = {"application", 11};
pj_str_t str_sdp = { "sdp", 3 };
@@ -777,6 +778,10 @@ PJ_DEF(pj_status_t) pjsip_inv_verify_request(pjsip_rx_data *rdata,
goto on_return;
}
+ r_sdp = sdp;
+ }
+
+ if (r_sdp) {
/* Negotiate with local SDP */
if (l_sdp) {
pjmedia_sdp_neg *neg;
@@ -787,7 +792,7 @@ PJ_DEF(pj_status_t) pjsip_inv_verify_request(pjsip_rx_data *rdata,
/* Create SDP negotiator */
status = pjmedia_sdp_neg_create_w_remote_offer(
- rdata->tp_info.pool, l_sdp, sdp, &neg);
+ rdata->tp_info.pool, l_sdp, r_sdp, &neg);
PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
/* Negotiate SDP */
@@ -1027,6 +1032,21 @@ on_return:
return status;
}
+
+/*
+ * Verify incoming INVITE request.
+ */
+PJ_DEF(pj_status_t) pjsip_inv_verify_request( pjsip_rx_data *rdata,
+ unsigned *options,
+ const pjmedia_sdp_session *l_sdp,
+ pjsip_dialog *dlg,
+ pjsip_endpoint *endpt,
+ pjsip_tx_data **p_tdata)
+{
+ return pjsip_inv_verify_request2(rdata, options, NULL, l_sdp, dlg,
+ endpt, p_tdata);
+}
+
/*
* Create UAS invite session.
*/