[sr-dev] git:kamailio_3.0: pua_dialoginfo: patch from FS#18

Daniel-Constantin Mierla miconda at gmail.com
Sat Dec 19 23:28:19 CET 2009


Module: sip-router
Branch: kamailio_3.0
Commit: 09d1bdc38b51619c65c6a9ec8f293cf9c395c6c1
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=09d1bdc38b51619c65c6a9ec8f293cf9c395c6c1

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Sat Dec 19 22:58:26 2009 +0100

pua_dialoginfo: patch from FS#18

- applied patch from Francisco Javier Lizaran Vilches
- use r-uri in published document

---

 modules_k/pua_dialoginfo/pua_dialoginfo.c |   42 ++++++++++++++++++++--------
 modules_k/pua_dialoginfo/pua_dialoginfo.h |    1 +
 2 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/modules_k/pua_dialoginfo/pua_dialoginfo.c b/modules_k/pua_dialoginfo/pua_dialoginfo.c
index eab17d1..f95e0c6 100644
--- a/modules_k/pua_dialoginfo/pua_dialoginfo.c
+++ b/modules_k/pua_dialoginfo/pua_dialoginfo.c
@@ -57,6 +57,7 @@ MODULE_VERSION
 #define DEF_INCLUDE_TAGS 1
 #define DEF_OVERRIDE_LIFETIME 0
 #define DEF_CALLER_ALWAYS_CONFIRMED 0
+#define DEF_INCLUDE_REQ_URI 0
 
 /* define PUA_DIALOGINFO_DEBUG to activate more verbose 
  * logging and dialog info callback debugging
@@ -73,6 +74,7 @@ int include_localremote = DEF_INCLUDE_LOCALREMOTE;
 int include_tags        = DEF_INCLUDE_TAGS;
 int override_lifetime   = DEF_OVERRIDE_LIFETIME;
 int caller_confirmed    = DEF_CALLER_ALWAYS_CONFIRMED;
+int include_req_uri     = DEF_INCLUDE_REQ_URI;
 
 
 send_publish_t pua_send_publish;
@@ -92,6 +94,7 @@ static param_export_t params[]={
 	{"include_tags",        INT_PARAM, &include_tags },
 	{"override_lifetime",   INT_PARAM, &override_lifetime },
 	{"caller_confirmed",    INT_PARAM, &caller_confirmed },
+	{"include_req_uri",     INT_PARAM, &include_req_uri },
 	{0, 0, 0 }
 };
 
@@ -195,21 +198,28 @@ static void
 __dialog_sendpublish(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params)
 {
 	str tag = {0,0};
+	str uri = {0,0};
 	struct dlginfo_cell *dlginfo = (struct dlginfo_cell*)*_params->param;
 
+	if (include_req_uri) {
+		uri = dlginfo->req_uri;
+	} else {
+		uri = dlginfo->to_uri;
+	}
+
 	switch (type) {
 	case DLGCB_FAILED:
 	case DLGCB_TERMINATED:
 	case DLGCB_EXPIRED:
 		LM_DBG("dialog over, from=%.*s\n", dlginfo->from_uri.len, dlginfo->from_uri.s);
-		dialog_publish("terminated", &(dlginfo->from_uri), &(dlginfo->to_uri), &(dlginfo->callid), 1, dlginfo->lifetime, 0, 0);
-		dialog_publish("terminated", &(dlginfo->to_uri), &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, 0, 0);
+		dialog_publish("terminated", &(dlginfo->from_uri), &uri, &(dlginfo->callid), 1, dlginfo->lifetime, 0, 0);
+		dialog_publish("terminated", &uri, &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, 0, 0);
 		break;
 	case DLGCB_CONFIRMED:
 	case DLGCB_REQ_WITHIN:
 		LM_DBG("dialog confirmed, from=%.*s\n", dlginfo->from_uri.len, dlginfo->from_uri.s);
-		dialog_publish("confirmed", &(dlginfo->from_uri), &(dlginfo->to_uri), &(dlginfo->callid), 1, dlginfo->lifetime, 0, 0);
-		dialog_publish("confirmed", &(dlginfo->to_uri), &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, 0, 0);
+		dialog_publish("confirmed", &(dlginfo->from_uri), &uri, &(dlginfo->callid), 1, dlginfo->lifetime, 0, 0);
+		dialog_publish("confirmed", &uri, &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, 0, 0);
 		break;
 	case DLGCB_EARLY:
 		LM_DBG("dialog is early, from=%.*s\n", dlginfo->from_uri.len, dlginfo->from_uri.s);
@@ -228,24 +238,28 @@ __dialog_sendpublish(struct dlg_cell *dlg, int type, struct dlg_cb_params *_para
 				}
 			}
 			if (caller_confirmed) {
-				dialog_publish("confirmed", &(dlginfo->from_uri), &(dlginfo->to_uri), &(dlginfo->callid), 1, dlginfo->lifetime, &(dlginfo->from_tag), &tag);
+				dialog_publish("confirmed", &(dlginfo->from_uri), &uri, &(dlginfo->callid), 1, dlginfo->lifetime, &(dlginfo->from_tag), &tag);
 			} else {
-				dialog_publish("early", &(dlginfo->from_uri), &(dlginfo->to_uri), &(dlginfo->callid), 1, dlginfo->lifetime, &(dlginfo->from_tag), &tag);
+				dialog_publish("early", &(dlginfo->from_uri), &uri, &(dlginfo->callid), 1, dlginfo->lifetime, &(dlginfo->from_tag), &tag);
 			}
-			dialog_publish("early", &(dlginfo->to_uri), &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, &tag, &(dlginfo->from_tag));
+			dialog_publish("early", &uri, &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, &tag, &(dlginfo->from_tag));
+
 		} else {
 			if (caller_confirmed) {
-				dialog_publish("confirmed", &(dlginfo->from_uri), &(dlginfo->to_uri), &(dlginfo->callid), 1, dlginfo->lifetime, 0, 0);
+				dialog_publish("confirmed", &(dlginfo->from_uri), &uri, &(dlginfo->callid), 1, dlginfo->lifetime, 0, 0);
+
 			} else {
 				dialog_publish("early", &(dlginfo->from_uri), &(dlginfo->to_uri), &(dlginfo->callid), 1, dlginfo->lifetime, 0, 0);
 			}
-			dialog_publish("early", &(dlginfo->to_uri), &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, 0, 0);
+			dialog_publish("early", &uri, &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, 0, 0);
+
 		}
 		break;
 	default:
 		LM_ERR("unhandled dialog callback type %d received, from=%.*s\n", type, dlginfo->from_uri.len, dlginfo->from_uri.s);
-		dialog_publish("terminated", &(dlginfo->from_uri), &(dlginfo->to_uri), &(dlginfo->callid), 1, dlginfo->lifetime, 0, 0);
-		dialog_publish("terminated", &(dlginfo->to_uri), &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, 0, 0);
+		dialog_publish("terminated", &(dlginfo->from_uri), &uri, &(dlginfo->callid), 1, dlginfo->lifetime, 0, 0);
+		dialog_publish("terminated", &uri, &(dlginfo->from_uri), &(dlginfo->callid), 0, dlginfo->lifetime, 0, 0);
+
 	}
 }
 
@@ -266,7 +280,8 @@ __dialog_created(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params)
 			dlg->from_uri.len + 
 			dlg->to_uri.len + 
 			dlg->callid.len + 
-			dlg->tag[0].len;
+			dlg->tag[0].len +
+			dlg->req_uri.len;
 
     dlginfo = (struct dlginfo_cell*)shm_malloc( len );
     if (dlginfo==0) {
@@ -285,10 +300,13 @@ __dialog_created(struct dlg_cell *dlg, int type, struct dlg_cb_params *_params)
 	dlginfo->callid.len   = dlg->callid.len;
 	dlginfo->from_tag.s   = dlginfo->callid.s + dlg->callid.len;
 	dlginfo->from_tag.len = dlg->tag[0].len;
+	dlginfo->req_uri.s    = dlginfo->from_tag.s + dlginfo->from_tag.len;
+	dlginfo->req_uri.len  = dlg->req_uri.len;
 	memcpy(dlginfo->from_uri.s, dlg->from_uri.s, dlg->from_uri.len);
 	memcpy(dlginfo->to_uri.s, dlg->to_uri.s, dlg->to_uri.len);
 	memcpy(dlginfo->callid.s, dlg->callid.s, dlg->callid.len);
 	memcpy(dlginfo->from_tag.s, dlg->tag[0].s, dlg->tag[0].len);
+	memcpy(dlginfo->req_uri.s, dlg->req_uri.s, dlg->req_uri.len);
 	
 	/* register dialog callbacks which triggers sending PUBLISH */
 	if (dlg_api.register_dlgcb(dlg, 
diff --git a/modules_k/pua_dialoginfo/pua_dialoginfo.h b/modules_k/pua_dialoginfo/pua_dialoginfo.h
index 627fced..74cc6e0 100644
--- a/modules_k/pua_dialoginfo/pua_dialoginfo.h
+++ b/modules_k/pua_dialoginfo/pua_dialoginfo.h
@@ -41,6 +41,7 @@ struct dlginfo_cell {
 	str callid;
 	str from_tag;
 /*	str *to_tag; */
+	str req_uri;
 	unsigned int lifetime;	
 };
 




More information about the sr-dev mailing list