/*! \brief * Return value of Expires header field * if the HF exists converted to absolute * time, if the HF doesn't exist, returns * default value; */ static inline int get_expires_hf(struct sip_msg* _m) { exp_body_t* p; if (_m->expires) { p = (exp_body_t*) _m->expires->parsed; if (p->valid) { if (p->val != 0) { return p->val + act_time; } else return 0; } else { return act_time + get_expire_val(); } } else return act_time + get_expire_val(); }
/*! \brief * Return value of Expires header field * if the HF exists converted to absolute * time, if the HF doesn't exist, returns * default value; */ static inline int get_expires_hf(struct sip_msg* _m) { exp_body_t* p; int range; if (_m->expires) { p = (exp_body_t*)_m->expires->parsed; if (p->valid) { if (p->val != 0) { range = cfg_get(registrar, registrar_cfg, default_expires_range); if(likely(range==0)) return p->val + act_time; return p->val + act_time - (float)range/100 * p->val + ((float)(rand()%100)/100) * ((float)range/100 * p->val); } else return 0; } else { return act_time + get_expire_val(); } } else return act_time + get_expire_val(); }
/*! \brief * Calculate absolute expires value per contact as follows: * 1) If the contact has expires value, use the value. If it * is not zero, add actual time to it * 2) If the contact has no expires parameter, use expires * header field in the same way * 3) If the message contained no expires header field, use * the default value */ void calc_contact_expires(struct sip_msg* _m, param_t* _ep, int* _e) { if (!_ep || !_ep->body.len) { *_e = get_expires_hf(_m); } else { if (str2int(&_ep->body, (unsigned int*)_e) < 0) { *_e = get_expire_val(); } /* Convert to absolute value */ if (*_e != 0) *_e += act_time; } if ((*_e != 0) && ((*_e - act_time) < cfg_get(registrar, registrar_cfg, min_expires))) { *_e = cfg_get(registrar, registrar_cfg, min_expires) + act_time; } if ((*_e != 0) && cfg_get(registrar, registrar_cfg, max_expires) && ((*_e - act_time) > cfg_get(registrar, registrar_cfg, max_expires))) { *_e = cfg_get(registrar, registrar_cfg, max_expires) + act_time; } }