Changeset 1311 for pjproject/trunk


Ignore:
Timestamp:
May 29, 2007 12:33:09 AM (18 years ago)
Author:
bennylp
Message:

Fixed ticket #91: timer to re-subscribe buddy's presence when subscription failed

Location:
pjproject/trunk/pjsip
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua_internal.h

    r1134 r1311  
    207207    pjsua_buddy          buddy[PJSUA_MAX_BUDDIES];  /**< Buddy array.   */ 
    208208 
     209    /* Presence: */ 
     210    pj_timer_entry       pres_timer;/**< Presence refresh timer.        */ 
     211 
    209212    /* Media: */ 
    210213    pjsua_media_config   media_cfg; /**< Media config.                  */ 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_pres.c

    r1281 r1311  
    2323#define THIS_FILE   "pjsua_pres.c" 
    2424 
     25#ifndef PJSUA_PRES_TIMER 
     26#   define PJSUA_PRES_TIMER     120 
     27#endif 
     28 
    2529 
    2630/* 
     
    11341138} 
    11351139 
     1140/* Timer callback to re-create client subscription */ 
     1141static void pres_timer_cb(pj_timer_heap_t *th, 
     1142                          pj_timer_entry *entry) 
     1143{ 
     1144    pj_time_val delay = { PJSUA_PRES_TIMER, 0 }; 
     1145 
     1146    PJ_UNUSED_ARG(th); 
     1147 
     1148    PJSUA_LOCK(); 
     1149 
     1150    entry->id = PJ_FALSE; 
     1151    refresh_client_subscriptions(); 
     1152 
     1153    pjsip_endpt_schedule_timer(pjsua_var.endpt, entry, &delay); 
     1154    entry->id = PJ_TRUE; 
     1155 
     1156    PJSUA_UNLOCK(); 
     1157} 
     1158 
    11361159 
    11371160/* 
     
    11621185pj_status_t pjsua_pres_start(void) 
    11631186{ 
    1164     /* Nothing to do (is it?) */ 
     1187    /* Start presence timer to re-subscribe to buddy's presence when 
     1188     * subscription has failed. 
     1189     */ 
     1190    if (pjsua_var.pres_timer.id == PJ_FALSE) { 
     1191        pj_time_val pres_interval = {PJSUA_PRES_TIMER, 0}; 
     1192 
     1193        pjsua_var.pres_timer.cb = &pres_timer_cb; 
     1194        pjsip_endpt_schedule_timer(pjsua_var.endpt, &pjsua_var.pres_timer, 
     1195                                   &pres_interval); 
     1196    } 
     1197 
    11651198    return PJ_SUCCESS; 
    11661199} 
     
    11891222{ 
    11901223    unsigned i; 
     1224 
     1225    if (pjsua_var.pres_timer.id != 0) { 
     1226        pjsip_endpt_cancel_timer(pjsua_var.endpt, &pjsua_var.pres_timer); 
     1227        pjsua_var.pres_timer.id = PJ_FALSE; 
     1228    } 
    11911229 
    11921230    for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.acc); ++i) { 
Note: See TracChangeset for help on using the changeset viewer.