Răsfoiți Sursa

pua_usrloc: added branch_flag parameter

- mark the contact for sending PUBLISH via setbflag(branch_flag)
Daniel-Constantin Mierla 13 ani în urmă
părinte
comite
bdbacf5591

+ 8 - 1
modules_k/pua_usrloc/pua_usrloc.c

@@ -59,7 +59,11 @@
 MODULE_VERSION
 
 str default_domain= {NULL, 0};
-int pua_ul_publish= 0;
+
+int pua_ul_publish = 0;
+int pua_ul_bflag = -1;
+int pua_ul_bmask = 0;
+
 pua_api_t pua;
 str pres_prefix= {0, 0};
 
@@ -85,6 +89,7 @@ static cmd_export_t cmds[]=
 static param_export_t params[]={
 	{"default_domain",	 STR_PARAM, &default_domain.s	 },
 	{"entity_prefix",	 STR_PARAM, &pres_prefix.s		 },
+	{"branch_flag",	     INT_PARAM, &pua_ul_bflag		 },
 	{0,							 0,			0            }
 };
 
@@ -200,6 +205,8 @@ static int mod_init(void)
 		return -1;
 	}
 
+	if(pua_ul_bflag!=-1)
+		pua_ul_bmask = 1 << pua_ul_bflag;
 
 	return 0;
 }

+ 3 - 0
modules_k/pua_usrloc/pua_usrloc.h

@@ -40,4 +40,7 @@ void ul_publish(ucontact_t* c, int type, void* param);
 int pua_unset_publish(struct sip_msg* msg, unsigned int flags, void* param);
 
 extern str pres_prefix;
+extern int pua_ul_bflag;
+extern int pua_ul_bmask;
+
 #endif

+ 12 - 2
modules_k/pua_usrloc/ul_publish.c

@@ -39,6 +39,7 @@
 #include "../../parser/parse_expires.h"
 #include "../../parser/msg_parser.h"
 #include "../../str.h"
+#include "../../dset.h"
 #include "../usrloc/usrloc.h"
 #include "../usrloc/ul_callback.h"
 #include "../../modules/tm/tm_load.h"
@@ -50,12 +51,16 @@ int pua_set_publish(struct sip_msg* msg , char* s1, char* s2)
 {
 	LM_DBG("set send publish\n");
 	pua_ul_publish= 1;
+	if(pua_ul_bmask!=0)
+		setbflag(0, pua_ul_bflag);
 	return 1;
 }
 
 int pua_unset_publish(struct sip_msg* msg, unsigned int flags, void* param)
 {
 	pua_ul_publish= 0;
+	if(pua_ul_bmask!=0)
+		resetbflag(0, pua_ul_bflag);
 	return 1;
 }
 
@@ -206,11 +211,16 @@ void ul_publish(ucontact_t* c, int type, void* param)
 	content_type.s= "application/pidf+xml";
 	content_type.len= 20;
 
-	if(pua_ul_publish== 0)
+	if(pua_ul_publish==0 && pua_ul_bmask==0)
 	{
 		LM_INFO("should not send ul publish\n");
 		return;
-	}	
+	}
+	if(pua_ul_bmask!=0 && (c->cflags & pua_ul_bmask)==0)
+	{
+		LM_INFO("not marked for publish\n");
+		return;
+	}
 
 	if(type & UL_CONTACT_DELETE) {
 		LM_DBG("\nDELETE type\n");