void r_third_party_reg_response(struct cell *t,int type,struct tmcb_params *ps) { str req_uri; int expires; LOG(L_DBG,"DBG:"M_NAME":r_third_party_reg_response: code %d\n",ps->code); if (!ps->rpl) { LOG(L_ERR,"INF:"M_NAME":r_third_party_reg_response: No reply\n"); return; } #ifdef WITH_IMS_PM if (ps->code>=200 && ps->code<300) IMS_PM_LOG01(UR_Succ3rdPartyReg,ps->code); else if (ps->code>=300) IMS_PM_LOG01(UR_Fail3rdPartyReg,ps->code); #endif if (ps->code>=200 && ps->code<300){ if (ps->rpl) expires = cscf_get_expires_hdr(ps->rpl); else return; req_uri = *((str*) *(ps->param)); }else if (ps->code==404){ }else{ LOG(L_INFO,"INF:"M_NAME":r_third_party_reg_response: code %d\n",ps->code); } }
/** * The Subscription timer looks for almost expired subscriptions and subscribes again. * @param ticks - the current time * @param param - the generic parameter */ void subscription_timer(unsigned int ticks, void* param) { r_subscription *s,*ns; int i; #ifdef WITH_IMS_PM int subs_cnt=0; #endif for(i=0;i<subscriptions_hash_size;i++){ subs_lock(i); s = subscriptions[i].head; r_act_time(); while(s){ ns = s->next; if (s->attempts_left > 0 ){ /* attempt to send a subscribe */ if (!r_send_subscribe(s,s->duration)){ LOG(L_ERR,"ERR:"M_NAME":subscription_timer: Error on SUBSCRIBE (%d times)... droping\n", pcscf_subscribe_retries); del_r_subscription_nolock(s); }else{ s->attempts_left--; #ifdef WITH_IMS_PM subs_cnt++; #endif } }else if (s->attempts_left==0) { /* we failed to many times, drop the subscription */ LOG(L_ERR,"ERR:"M_NAME":subscription_timer: Error on SUBSCRIBE for %d times... aborting\n",pcscf_subscribe_retries); del_r_subscription_nolock(s); }else{ /* we are subscribed already */ /* if expired, drop it */ if (s->expires<time_now) del_r_subscription_nolock(s); #ifdef WITH_IMS_PM else subs_cnt++; #endif /* if not expired, check for renewal */ // Commented as the S-CSCF should adjust the subscription time accordingly // if ((s->duration<1200 && s->expires-time_now<s->duration/2)|| // (s->duration>=1200 && s->expires-time_now<600)) // { // /* if we need a resubscribe, we mark it as such and try to subscribe again */ // s->attempts_left = pcscf_subscribe_retries; // ns = s; // } } s = ns; } subs_unlock(i); } print_subs(L_INFO); #ifdef WITH_IMS_PM IMS_PM_LOG01(RD_NbrSubs,subs_cnt); #endif }