[sr-dev] git:master: usrloc: generate callid at startup and increase cseq for records added via mi

Daniel-Constantin Mierla miconda at gmail.com
Fri Jul 4 13:48:59 CEST 2014


Module: sip-router
Branch: master
Commit: 66c497fdf4ac1c3b889a7c3b50c3e5fed770cf0b
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=66c497fdf4ac1c3b889a7c3b50c3e5fed770cf0b

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Fri Jul  4 13:46:35 2014 +0200

usrloc: generate callid at startup and increase cseq for records added via mi

- should fix FS#448, reported by Savolainen Dmitri

---

 modules/usrloc/ul_mi.c |   27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/modules/usrloc/ul_mi.c b/modules/usrloc/ul_mi.c
index f36117c..6ec82a5 100644
--- a/modules/usrloc/ul_mi.c
+++ b/modules/usrloc/ul_mi.c
@@ -48,9 +48,9 @@
 #include "usrloc.h"
 
 /*! CSEQ nr used */
-#define MI_UL_CSEQ 1
+static int MI_UL_CSEQ = 0;
 /*! call-id used for ul_add and ul_rm_contact */
-static str mi_ul_cid = str_init("dfjrewr12386fd6-343 at kamailio.mi");
+static str mi_ul_cid = {0,0}; /* str_init("dfjrewr12386fd6-343 at kamailio.mi");*/
 /*! user agent used for ul_add */
 static str mi_ul_ua  = str_init("SIP Router MI Server");
 /*! path used for ul_add and ul_rm_contact */
@@ -58,8 +58,27 @@ static str mi_ul_path = str_init("dummypath");
 
 extern sruid_t _ul_sruid;
 
+static char mi_ul_cid_buf[32];
+
 /************************ helper functions ****************************/
 
+static void set_mi_ul_cid(void)
+{
+	int i;
+    char charset[] = "0123456789"
+                     "abcdefghijklmnopqrstuvwxyz"
+                     "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+	if(mi_ul_cid.s!=NULL) return;
+
+	for(i=0; i<19; i++) {
+        mi_ul_cid_buf[i] = charset[rand()%(sizeof(charset) - 1)];
+    }
+    memcpy(mi_ul_cid_buf+i, "@kamailio.mi", sizeof("@kamailio.mi"));
+    mi_ul_cid.s = mi_ul_cid_buf;
+	mi_ul_cid.len = strlen(mi_ul_cid.s);
+}
+
 /*!
  * \brief Search a domain in the global domain list
  * \param table domain (table) name
@@ -360,6 +379,7 @@ struct mi_root* mi_usrloc_rm_contact(struct mi_root *cmd, void *param)
 	}
 
 	contact = &node->next->next->value;
+	set_mi_ul_cid();
 	ret = get_ucontact( rec, contact, &mi_ul_cid, &mi_ul_path, MI_UL_CSEQ+1, &con);
 	if (ret < 0) {
 		unlock_udomain( dom, aor);
@@ -566,6 +586,7 @@ struct mi_root* mi_usrloc_add(struct mi_root *cmd, void *param)
 
 	lock_udomain( dom, aor);
 
+	set_mi_ul_cid();
 	n = get_urecord( dom, aor, &r);
 	if ( n==1) {
 		if (insert_urecord( dom, aor, &r) < 0)
@@ -580,7 +601,7 @@ struct mi_root* mi_usrloc_add(struct mi_root *cmd, void *param)
 
 	ci.callid = &mi_ul_cid;
 	ci.user_agent = &mi_ul_ua;
-	ci.cseq = MI_UL_CSEQ;
+	ci.cseq = ++MI_UL_CSEQ;
 	/* 0 expires means permanent contact */
 	if (ci.expires!=0)
 		ci.expires += act_time;




More information about the sr-dev mailing list