Kaynağa Gözat

registrar: allow taking expires value from xavp_cfg expires field

Daniel-Constantin Mierla 4 yıl önce
ebeveyn
işleme
132c9d03a4
1 değiştirilmiş dosya ile 23 ekleme ve 14 silme
  1. 23 14
      src/modules/registrar/sip_msg.c

+ 23 - 14
src/modules/registrar/sip_msg.c

@@ -246,27 +246,36 @@ contact_t* get_next_contact(contact_t* _c)
 void calc_contact_expires(struct sip_msg* _m, param_t* _ep, int* _e, int novariation)
 {
 	int range = 0;
+	sr_xavp_t *vavp = NULL;
+	str xename = str_init("expires");
 
-	if (!_ep || !_ep->body.len) {
-		*_e = get_expires_hf(_m);
+	if (reg_xavp_cfg.s != NULL) {
+		vavp = xavp_get_child_with_ival(&reg_xavp_cfg, &xename);
+	}
 
-		if ( *_e < 0 ) {
-			*_e = cfg_get(registrar, registrar_cfg, default_expires);
-			range = cfg_get(registrar, registrar_cfg, default_expires_range);
-		} else {
-			range = cfg_get(registrar, registrar_cfg, expires_range);
-		}
+	if (vavp != NULL && vavp->val.v.i >= 0) {
+		*_e = vavp->val.v.i;
 	} else {
-		if (str2int(&_ep->body, (unsigned int*)_e) < 0) {
-			*_e = cfg_get(registrar, registrar_cfg, default_expires);
-			range = cfg_get(registrar, registrar_cfg, default_expires_range);
+		if (!_ep || !_ep->body.len) {
+			*_e = get_expires_hf(_m);
+
+			if ( *_e < 0 ) {
+				*_e = cfg_get(registrar, registrar_cfg, default_expires);
+				range = cfg_get(registrar, registrar_cfg, default_expires_range);
+			} else {
+				range = cfg_get(registrar, registrar_cfg, expires_range);
+			}
 		} else {
-			range = cfg_get(registrar, registrar_cfg, expires_range);
+			if (str2int(&_ep->body, (unsigned int*)_e) < 0) {
+				*_e = cfg_get(registrar, registrar_cfg, default_expires);
+				range = cfg_get(registrar, registrar_cfg, default_expires_range);
+			} else {
+				range = cfg_get(registrar, registrar_cfg, expires_range);
+			}
 		}
 	}
 
-	if ( *_e != 0 )
-	{
+	if ( *_e != 0 ) {
 		if (*_e < cfg_get(registrar, registrar_cfg, min_expires)) {
 			if(reg_min_expires_mode) {
 				rerrno = R_LOW_EXP;