From 38e36e524430f08869bc2364aa7bbbc630778e77 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Wed, 23 Jan 2008 20:29:30 +0000 Subject: 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 --- pjsip/src/pjsip-ua/sip_inv.c | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'pjsip/src/pjsip-ua') 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. */ -- cgit v1.2.3