Ignore:
Timestamp:
Jun 19, 2012 2:35:18 PM (10 years ago)
Author:
nanang
Message:

Close #1540:

  • added pjsua_acc_config.mwi_expires, also compile-time macro PJSIP_MWI_DEFAULT_EXPIRES
  • updated pjsua_acc_modify() to update MWI subscription when mwi_expires & mwi_enabled of pjsua_acc_config is modified
File:
1 edited

Legend:

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

    r3841 r4172  
    20122012}; 
    20132013 
    2014 void pjsua_start_mwi(pjsua_acc *acc) 
    2015 { 
     2014pj_status_t pjsua_start_mwi(pjsua_acc_id acc_id, pj_bool_t force_renew) 
     2015{ 
     2016    pjsua_acc *acc; 
    20162017    pj_pool_t *tmp_pool = NULL; 
    20172018    pj_str_t contact; 
    20182019    pjsip_tx_data *tdata; 
    2019     pj_status_t status; 
     2020    pj_status_t status = PJ_SUCCESS; 
     2021 
     2022    PJ_ASSERT_RETURN(acc_id>=0 && acc_id<(int)PJ_ARRAY_SIZE(pjsua_var.acc) 
     2023                     && pjsua_var.acc[acc_id].valid, PJ_EINVAL); 
     2024 
     2025    acc = &pjsua_var.acc[acc_id]; 
    20202026 
    20212027    if (!acc->cfg.mwi_enabled) { 
    20222028        if (acc->mwi_sub) { 
    20232029            /* Terminate MWI subscription */ 
    2024             pjsip_tx_data *tdata; 
    20252030            pjsip_evsub *sub = acc->mwi_sub; 
    20262031 
     
    20362041            } 
    20372042        } 
    2038         return; 
    2039     } 
    2040  
     2043        return status; 
     2044    } 
     2045 
     2046    /* Subscription is already active */ 
    20412047    if (acc->mwi_sub) { 
    2042         /* Subscription is already active */ 
    2043         return; 
    2044  
     2048        if (!force_renew) 
     2049            return PJ_SUCCESS; 
     2050         
     2051        /* Update MWI subscription */ 
     2052        pj_assert(acc->mwi_dlg); 
     2053        pjsip_dlg_inc_lock(acc->mwi_dlg); 
     2054         
     2055        status = pjsip_mwi_initiate(acc->mwi_sub, acc->cfg.mwi_expires, &tdata); 
     2056        if (status == PJ_SUCCESS) { 
     2057            pjsua_process_msg_data(tdata, NULL); 
     2058            status = pjsip_pres_send_request(acc->mwi_sub, tdata); 
     2059        } 
     2060 
     2061        pjsip_dlg_dec_lock(acc->mwi_dlg); 
     2062        return status; 
    20452063    } 
    20462064 
     
    20602078            pjsua_perror(THIS_FILE, "Unable to generate Contact header",  
    20612079                         status); 
    2062             pj_pool_release(tmp_pool); 
    2063             pj_log_pop_indent(); 
    2064             return; 
     2080            goto on_return; 
    20652081        } 
    20662082    } 
     
    20742090    if (status != PJ_SUCCESS) { 
    20752091        pjsua_perror(THIS_FILE, "Unable to create dialog", status); 
    2076         if (tmp_pool) pj_pool_release(tmp_pool); 
    2077         pj_log_pop_indent(); 
    2078         return; 
     2092        goto on_return; 
    20792093    } 
    20802094 
     
    20892103    if (status != PJ_SUCCESS) { 
    20902104        pjsua_perror(THIS_FILE, "Error creating MWI subscription", status); 
    2091         if (tmp_pool) pj_pool_release(tmp_pool); 
    20922105        if (acc->mwi_dlg) pjsip_dlg_dec_lock(acc->mwi_dlg); 
    2093         pj_log_pop_indent(); 
    2094         return; 
     2106        goto on_return; 
    20952107    } 
    20962108 
     
    21212133    pjsip_evsub_set_mod_data(acc->mwi_sub, pjsua_var.mod.id, acc); 
    21222134 
    2123     status = pjsip_mwi_initiate(acc->mwi_sub, -1, &tdata); 
     2135    status = pjsip_mwi_initiate(acc->mwi_sub, acc->cfg.mwi_expires, &tdata); 
    21242136    if (status != PJ_SUCCESS) { 
    21252137        if (acc->mwi_dlg) pjsip_dlg_dec_lock(acc->mwi_dlg); 
     
    21312143        pjsua_perror(THIS_FILE, "Unable to create initial MWI SUBSCRIBE",  
    21322144                     status); 
    2133         if (tmp_pool) pj_pool_release(tmp_pool); 
    2134         pj_log_pop_indent(); 
    2135         return; 
     2145        goto on_return; 
    21362146    } 
    21372147 
     
    21482158        pjsua_perror(THIS_FILE, "Unable to send initial MWI SUBSCRIBE",  
    21492159                     status); 
    2150         if (tmp_pool) pj_pool_release(tmp_pool); 
    2151         pj_log_pop_indent(); 
    2152         return; 
     2160        goto on_return; 
    21532161    } 
    21542162 
    21552163    pjsip_dlg_dec_lock(acc->mwi_dlg); 
     2164 
     2165on_return: 
    21562166    if (tmp_pool) pj_pool_release(tmp_pool); 
    21572167 
    21582168    pj_log_pop_indent(); 
     2169    return status; 
    21592170} 
    21602171 
     
    22702281        /* Re-subscribe MWI subscription if it's terminated prematurely */ 
    22712282        if (acc->cfg.mwi_enabled && !acc->mwi_sub) 
    2272             pjsua_start_mwi(acc); 
     2283            pjsua_start_mwi(acc->index, PJ_FALSE); 
    22732284    } 
    22742285 
Note: See TracChangeset for help on using the changeset viewer.