Ignore:
Timestamp:
Oct 24, 2011 9:28:13 AM (13 years ago)
Author:
ming
Message:

Re #1395: Backport of PJSIP 1.x branch into PJSIP 2.0 trunk

TODO: ticket #1268 (Option for automatic/manual sending of RTCP SDES/BYE for the stream) for video stream.

Location:
pjproject/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk

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

    r3753 r3841  
    13211321 
    13221322/* Unpublish presence publication */ 
    1323 void pjsua_pres_unpublish(pjsua_acc *acc) 
     1323void pjsua_pres_unpublish(pjsua_acc *acc, unsigned flags) 
    13241324{ 
    13251325    if (acc->publish_sess) { 
     
    13271327 
    13281328        acc->online_status = PJ_FALSE; 
    1329         send_publish(acc->index, PJ_FALSE); 
     1329 
     1330        if ((flags & PJSUA_DESTROY_NO_TX_MSG) == 0) { 
     1331            send_publish(acc->index, PJ_FALSE); 
     1332        } 
     1333 
    13301334        /* By ticket #364, don't destroy the session yet (let the callback 
    13311335           destroy it) 
     
    13401344 
    13411345/* Terminate server subscription for the account */ 
    1342 void pjsua_pres_delete_acc(int acc_id) 
     1346void pjsua_pres_delete_acc(int acc_id, unsigned flags) 
    13431347{ 
    13441348    pjsua_acc *acc = &pjsua_var.acc[acc_id]; 
     
    13621366        pjsip_pres_set_status(uapres->sub, &pres_status); 
    13631367 
    1364         if (pjsip_pres_notify(uapres->sub,  
    1365                               PJSIP_EVSUB_STATE_TERMINATED, NULL, 
    1366                               &reason, &tdata)==PJ_SUCCESS) 
    1367         { 
    1368             pjsip_pres_send_request(uapres->sub, tdata); 
     1368        if ((flags & PJSUA_DESTROY_NO_TX_MSG) == 0) { 
     1369            if (pjsip_pres_notify(uapres->sub, 
     1370                                  PJSIP_EVSUB_STATE_TERMINATED, NULL, 
     1371                                  &reason, &tdata)==PJ_SUCCESS) 
     1372            { 
     1373                pjsip_pres_send_request(uapres->sub, tdata); 
     1374            } 
     1375        } else { 
     1376            pjsip_pres_terminate(uapres->sub, PJ_FALSE); 
    13691377        } 
    13701378 
     
    13771385 
    13781386    /* Terminate presence publication, if any */ 
    1379     pjsua_pres_unpublish(acc); 
     1387    pjsua_pres_unpublish(acc, flags); 
    13801388} 
    13811389 
     
    22522260        pjsua_acc *acc = &pjsua_var.acc[i]; 
    22532261 
     2262        /* Acc may not be ready yet, otherwise assertion will happen */ 
     2263        if (!pjsua_acc_is_valid(i)) 
     2264            continue; 
     2265 
    22542266        /* Retry PUBLISH */ 
    22552267        if (acc->cfg.publish_enabled && acc->publish_sess==NULL) 
     
    23252337 * Shutdown presence. 
    23262338 */ 
    2327 void pjsua_pres_shutdown(void) 
     2339void pjsua_pres_shutdown(unsigned flags) 
    23282340{ 
    23292341    unsigned i; 
     
    23402352        if (!pjsua_var.acc[i].valid) 
    23412353            continue; 
    2342         pjsua_pres_delete_acc(i); 
     2354        pjsua_pres_delete_acc(i, flags); 
    23432355    } 
    23442356 
     
    23472359    } 
    23482360 
    2349     refresh_client_subscriptions(); 
    2350  
    2351     for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.acc); ++i) { 
    2352         if (pjsua_var.acc[i].valid) 
    2353             pjsua_pres_update_acc(i, PJ_FALSE); 
     2361    if ((flags & PJSUA_DESTROY_NO_TX_MSG) == 0) { 
     2362        refresh_client_subscriptions(); 
     2363 
     2364        for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.acc); ++i) { 
     2365            if (pjsua_var.acc[i].valid) 
     2366                pjsua_pres_update_acc(i, PJ_FALSE); 
     2367        } 
    23542368    } 
    23552369 
Note: See TracChangeset for help on using the changeset viewer.