[Serusers] New save_noreply() function for the registrar module

Maxim Sobolev sobomax at portaone.com
Fri Mar 21 17:33:20 CET 2003


Folks,

We found that in some cases it is necessary to have a function which
will save contact without sending reply to the UA. For example, it is
useful when there is a need to do stateless forwarding of the REGISTER
request, but at the same time save it in the local registration
database (sending reply in this case will disable any retransmissions
that might be necessary to ensure that the request actually reached the
destination). Attached patch provides necessary functionality, it would
be nice to have it included into the next release.

Thanks!

-Maxim
-------------- next part --------------
--- modules/registrar/reg_mod.c	2003/03/21 13:37:50	1.1
+++ modules/registrar/reg_mod.c	2003/03/21 13:39:05
@@ -64,18 +64,21 @@
 	"registrar", 
 	(char*[]) {
 		"save",
+		"save_noreply",
 		"lookup"
 	},
 	(cmd_function[]) {
 		save, 
+		save_noreply,
 		lookup
 	},
-	(int[]){1, 1},
+	(int[]){1, 1, 1},
 	(fixup_function[]) {
 		domain_fixup, 
+		domain_fixup, 
 		domain_fixup
 	},
-	2,
+	3,
 	
 	(char*[]) { /* Module parameter names */
 		"default_expires",
--- modules/registrar/save.c	2003/03/21 13:34:00	1.1
+++ modules/registrar/save.c	2003/03/21 13:37:00
@@ -309,11 +309,20 @@
 	return 0;
 }
 
+int save(struct sip_msg* _m, char* _t, char* _s)
+{
+	return save_real(_m, _t, _s, 1);
+}
+
+int save_noreply(struct sip_msg* _m, char* _t, char* _s)
+{
+	return save_real(_m, _t, _s, 0);
+}
 
 /*
  * Process REGISTER request and save it's contacts
  */
-int save(struct sip_msg* _m, char* _t, char* _s)
+int save_real(struct sip_msg* _m, char* _t, char* _s, int doreply)
 {
 	contact_t* c;
 	int st;
@@ -349,10 +358,10 @@
 		if (contacts(_m, c, (udomain_t*)_t, &user) < 0) goto error;
 	}
 
-	if (send_reply(_m) < 0) return -1;
+	if (doreply && send_reply(_m) < 0) return -1;
 	else return 1;
 	
  error:
-	send_reply(_m);
+	if (doreply) send_reply(_m);
 	return 0;
 }
--- modules/registrar/save.h	2003/03/21 13:37:14	1.1
+++ modules/registrar/save.h	2003/03/21 13:37:40
@@ -39,7 +39,9 @@
 /*
  * Process REGISTER request and save it's contacts
  */
+int save_real(struct sip_msg* _m, char* _t, char* _s, int);
 int save(struct sip_msg* _m, char* _t, char* _s);
+int save_noreply(struct sip_msg* _m, char* _t, char* _s);
 
 
 #endif /* SAVE_H */


More information about the sr-users mailing list