Ignore:
Timestamp:
Jul 20, 2018 2:19:41 AM (6 years ago)
Author:
ming
Message:

Fixed #2128: Add feature to allow responding incoming INVITE/re-INVITE asynchronously and set the SDP answer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsua2/call.cpp

    r5645 r5828  
    161161: statusCode(pjsip_status_code(0)), reason(""), options(0) 
    162162{ 
     163    sdp.wholeSdp = ""; 
    163164    if (useDefaultCallSetting) 
    164165        opt = CallSetting(true); 
     
    329330    pj_str_t            reason; 
    330331    pj_str_t           *p_reason; 
     332    pjmedia_sdp_session *sdp; 
    331333 
    332334public: 
     
    336338    call_param(const SipTxOption &tx_option); 
    337339    call_param(const SipTxOption &tx_option, const CallSetting &setting, 
    338                const string &reason_str); 
     340               const string &reason_str, pj_pool_t *pool = NULL, 
     341               const string &sdp_str = ""); 
    339342}; 
    340343 
     
    350353    p_opt = NULL; 
    351354    p_reason = NULL; 
     355    sdp = NULL; 
    352356} 
    353357 
    354358call_param::call_param(const SipTxOption &tx_option, const CallSetting &setting, 
    355                        const string &reason_str) 
     359                       const string &reason_str, pj_pool_t *pool, 
     360                       const string &sdp_str) 
    356361{ 
    357362    if (tx_option.isEmpty()) { 
     
    371376    reason = str2Pj(reason_str); 
    372377    p_reason = (reason.slen == 0? NULL: &reason); 
     378 
     379    if (sdp_str == "") { 
     380        sdp = NULL; 
     381    } else { 
     382        pj_str_t dup_pj_sdp; 
     383        pj_str_t pj_sdp_str = {(char*)sdp_str.c_str(), 
     384                               (pj_ssize_t)sdp_str.size()}; 
     385 
     386        pj_strdup(pool, &dup_pj_sdp, &pj_sdp_str);         
     387        pjmedia_sdp_parse(pool, dup_pj_sdp.ptr, 
     388                          dup_pj_sdp.slen, &sdp); 
     389    } 
    373390} 
    374391 
     
    493510void Call::answer(const CallOpParam &prm) throw(Error) 
    494511{ 
    495     call_param param(prm.txOption, prm.opt, prm.reason); 
    496      
    497     PJSUA2_CHECK_EXPR( pjsua_call_answer2(id, param.p_opt, prm.statusCode, 
    498                                           param.p_reason, param.p_msg_data) ); 
     512    call_param param(prm.txOption, prm.opt, prm.reason, 
     513                     sdp_pool, prm.sdp.wholeSdp); 
     514     
     515    if (param.sdp) { 
     516        PJSUA2_CHECK_EXPR( pjsua_call_answer_with_sdp(id, param.sdp, param.p_opt, 
     517                                                      prm.statusCode, 
     518                                                      param.p_reason, 
     519                                                      param.p_msg_data) ); 
     520    } else { 
     521        PJSUA2_CHECK_EXPR( pjsua_call_answer2(id, param.p_opt, prm.statusCode, 
     522                                              param.p_reason, 
     523                                              param.p_msg_data) ); 
     524    } 
    499525} 
    500526 
Note: See TracChangeset for help on using the changeset viewer.