Changeset 5356


Ignore:
Timestamp:
Jun 24, 2016 1:03:25 PM (8 years ago)
Author:
nanang
Message:

Fix #1938: Wrong registration renewal flag info in PJSUA registration callback when unregistration fails.

Location:
pjproject/trunk/pjsip
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/include/pjsip-ua/sip_regc.h

    r4586 r5356  
    7878    int                  contact_cnt;/**<Number of contacts in response.    */ 
    7979    pjsip_contact_hdr   *contact[PJSIP_REGC_MAX_CONTACT]; /**< Contacts.    */ 
     80    pj_bool_t            is_unreg;  /**< Expire header, if any, set to zero?*/ 
    8081}; 
    8182 
  • pjproject/trunk/pjsip/src/pjsip-ua/sip_reg.c

    r5353 r5356  
    747747                          const pj_str_t *reason, 
    748748                          pjsip_rx_data *rdata, pj_int32_t expiration, 
    749                           int contact_cnt, pjsip_contact_hdr *contact[]) 
     749                          int contact_cnt, pjsip_contact_hdr *contact[], 
     750                          pj_bool_t is_unreg) 
    750751{ 
    751752    cbparam->regc = regc; 
     
    758759    cbparam->expiration = (expiration >= 0? expiration: 
    759760                           regc->expires_requested); 
     761    cbparam->is_unreg = is_unreg; 
    760762    if (contact_cnt) { 
    761763        pj_memcpy( cbparam->contact, contact,  
     
    767769                          const pj_str_t *reason, 
    768770                          pjsip_rx_data *rdata, pj_int32_t expiration, 
    769                           int contact_cnt, pjsip_contact_hdr *contact[]) 
     771                          int contact_cnt, pjsip_contact_hdr *contact[], 
     772                          pj_bool_t is_unreg) 
    770773{ 
    771774    struct pjsip_regc_cbparam cbparam; 
     
    775778 
    776779    cbparam_init(&cbparam, regc, status, st_code, reason, rdata, expiration, 
    777                  contact_cnt, contact); 
     780                 contact_cnt, contact, is_unreg); 
    778781    (*regc->cb)(&cbparam); 
    779782} 
     
    802805        char errmsg[PJ_ERR_MSG_SIZE]; 
    803806        pj_str_t reason = pj_strerror(status, errmsg, sizeof(errmsg)); 
    804         call_callback(regc, status, 400, &reason, NULL, -1, 0, NULL); 
     807        call_callback(regc, status, 400, &reason, NULL, -1, 0, NULL, 
     808                      PJ_FALSE); 
    805809    } 
    806810 
     
    11001104                     (event->body.tsx_state.type==PJSIP_EVENT_RX_MSG) ?  
    11011105                      event->body.tsx_state.src.rdata : NULL, 
    1102                      -1, 0, NULL); 
     1106                     -1, 0, NULL, PJ_FALSE); 
    11031107 
    11041108        /* Call regc tsx callback before handling any response */ 
     
    11391143        pjsip_rx_data *rdata = event->body.tsx_state.src.rdata; 
    11401144        pjsip_tx_data *tdata; 
     1145        pj_bool_t is_unreg; 
    11411146 
    11421147        /* reset current op */ 
     1148        is_unreg = (regc->current_op == REGC_UNREGISTERING); 
    11431149        regc->current_op = REGC_IDLE; 
    11441150 
     
    12061212                call_callback(regc, status, tsx->status_code,  
    12071213                              &rdata->msg_info.msg->line.status.reason, 
    1208                               rdata, -1, 0, NULL); 
     1214                              rdata, -1, 0, NULL, is_unreg); 
    12091215                pj_lock_acquire(regc->lock); 
    12101216            } 
     
    12951301                call_callback(regc, status, tsx->status_code, 
    12961302                              &rdata->msg_info.msg->line.status.reason, 
    1297                               rdata, -1, 0, NULL); 
     1303                              rdata, -1, 0, NULL, PJ_FALSE); 
    12981304                pj_lock_acquire(regc->lock); 
    12991305            } 
     
    13101316        unsigned contact_cnt = 0; 
    13111317        pjsip_contact_hdr *contact[PJSIP_REGC_MAX_CONTACT]; 
     1318        pj_bool_t is_unreg; 
    13121319 
    13131320        if (tsx->status_code/100 == 2) { 
     
    13341341 
    13351342        /* Mark operation as complete */ 
     1343        is_unreg = (regc->current_op == REGC_UNREGISTERING); 
    13361344        regc->current_op = REGC_IDLE; 
    13371345 
     
    13451353                        : &tsx->status_text), 
    13461354                      rdata, expiration,  
    1347                       contact_cnt, contact); 
     1355                      contact_cnt, contact, is_unreg); 
    13481356        pj_lock_acquire(regc->lock); 
    13491357    } 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c

    r5337 r5356  
    23052305        reg_info.cbparam = param; 
    23062306        reg_info.regc = param->regc; 
    2307         reg_info.renew = (rinfo.interval != 0); 
     2307        reg_info.renew = !param->is_unreg; 
    23082308        (*pjsua_var.ua_cfg.cb.on_reg_state2)(acc->index, &reg_info); 
    23092309    } 
Note: See TracChangeset for help on using the changeset viewer.