Example #1
0
/*! \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();
}
Example #2
0
/*! \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();
}
Example #3
0
/*! \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;
	}
}