Ignore:
Timestamp:
Sep 17, 2014 12:11:45 PM (10 years ago)
Author:
riza
Message:

Re #1788: Add support to allow INVITE/reINVITE with unknown body.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_call.c

    r4923 r4924  
    12001200 
    12011201        status = sdp_info->sdp_err; 
    1202         if (status==PJ_SUCCESS && sdp_info->sdp==NULL) 
    1203             status = PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_NOT_ACCEPTABLE); 
     1202        if (status==PJ_SUCCESS && sdp_info->sdp==NULL &&  
     1203            !PJSIP_INV_ACCEPT_UNKNOWN_BODY) 
     1204        { 
     1205            if (sdp_info->body.ptr == NULL) { 
     1206                status = PJSIP_ERRNO_FROM_SIP_STATUS( 
     1207                                               PJSIP_SC_UNSUPPORTED_MEDIA_TYPE); 
     1208            } else { 
     1209                status = PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_NOT_ACCEPTABLE); 
     1210            } 
     1211        } 
    12041212 
    12051213        if (status != PJ_SUCCESS) { 
    1206             const pj_str_t reason = pj_str("Bad SDP"); 
    12071214            pjsip_hdr hdr_list; 
    1208             pjsip_warning_hdr *w; 
    1209  
    1210             pjsua_perror(THIS_FILE, "Bad SDP in incoming INVITE", 
    1211                          status); 
    1212  
    1213             w = pjsip_warning_hdr_create_from_status(rdata->tp_info.pool, 
    1214                                              pjsip_endpt_name(pjsua_var.endpt), 
    1215                                              status); 
    1216             pj_list_init(&hdr_list); 
    1217             pj_list_push_back(&hdr_list, w); 
    1218  
    1219             pjsip_endpt_respond(pjsua_var.endpt, NULL, rdata, 400, 
    1220                                 &reason, &hdr_list, NULL, NULL); 
     1215 
     1216            /* Check if body really contains SDP. */ 
     1217            if (sdp_info->body.ptr == NULL) { 
     1218                /* Couldn't find "application/sdp" */ 
     1219                pjsip_accept_hdr *acc;           
     1220 
     1221                pjsua_perror(THIS_FILE, "Unknown Content-Type in incoming "\ 
     1222                             "INVITE", status); 
     1223 
     1224                /* Add Accept header to response */ 
     1225                acc = pjsip_accept_hdr_create(rdata->tp_info.pool); 
     1226                PJ_ASSERT_RETURN(acc, PJ_ENOMEM); 
     1227                acc->values[acc->count++] = pj_str("application/sdp"); 
     1228                pj_list_init(&hdr_list); 
     1229                pj_list_push_back(&hdr_list, acc); 
     1230 
     1231                pjsip_endpt_respond(pjsua_var.endpt, NULL, rdata,  
     1232                                    PJSIP_SC_UNSUPPORTED_MEDIA_TYPE, 
     1233                                    NULL, &hdr_list, NULL, NULL); 
     1234            } else { 
     1235                const pj_str_t reason = pj_str("Bad SDP"); 
     1236                pjsip_warning_hdr *w; 
     1237 
     1238                pjsua_perror(THIS_FILE, "Bad SDP in incoming INVITE", 
     1239                             status); 
     1240 
     1241                w = pjsip_warning_hdr_create_from_status(rdata->tp_info.pool, 
     1242                                              pjsip_endpt_name(pjsua_var.endpt), 
     1243                                              status); 
     1244                pj_list_init(&hdr_list); 
     1245                pj_list_push_back(&hdr_list, w); 
     1246 
     1247                pjsip_endpt_respond(pjsua_var.endpt, NULL, rdata, 400, 
     1248                                    &reason, &hdr_list, NULL, NULL); 
     1249            } 
    12211250            goto on_return; 
    12221251        } 
     
    12251254         * checks will be done in pjsip_inv_verify_request2() below. 
    12261255         */ 
    1227         if (offer->media_count==0) { 
     1256        if ((offer) && (offer->media_count==0)) { 
    12281257            const pj_str_t reason = pj_str("Missing media in SDP"); 
    12291258            pjsip_endpt_respond(pjsua_var.endpt, NULL, rdata, 400, &reason, 
Note: See TracChangeset for help on using the changeset viewer.