MT#11753 backport patches for dialoginfo and remove ours

Introduce the force_dummy_dialog parameter for presence_dialoginfo

modparam("presence_dialoginfo", "force_dummy_dialog", 1)

Change-Id: If2981db948c421cc626bfac93d113cd217c839cd
changes/11/1111/2
Victor Seva 10 years ago
parent 852eacea8a
commit 4a9f398c41

@ -1,6 +1,8 @@
# backports from master
upstream/acc-allow-pseudo-variables-as-first-parameter-for-fu.patch
upstream/acc-add-documentation-note-indicating-the-use-of-pse.patch
upstream/presence_dialoginfo-optionally-send-dummy-dialog.patch
upstream/presence_dialoginfo-rfc4235-in-dummy-dialog.patch
upstream/debug/0001-modules-debugger-trace-msg-out.patch
## multipart bodies
upstream/0001-parser-add-internal-flag-FL_BODY_MULTIPART.patch
@ -40,7 +42,6 @@ sipwise/lcr_rate_module.patch
sipwise/nathelper.contact_only.patch
sipwise/parallel_build.patch
sipwise/url-safe_base64.patch
sipwise/dialoginfo_notify_body.patch
sipwise/tcap.patch
sipwise/rtpengine.patch
sipwise/rtpengine-compatibility.patch

@ -1,55 +0,0 @@
--- a/modules/presence_dialoginfo/notify_body.c
+++ b/modules/presence_dialoginfo/notify_body.c
@@ -74,8 +74,10 @@
LM_DBG("[pres_user]=%.*s [pres_domain]= %.*s, [n]=%d\n",
pres_user->len, pres_user->s, pres_domain->len, pres_domain->s, n);
- if(body_array== NULL)
- return NULL;
+ if(body_array== NULL) {
+ n = 0; /* just to be safe */
+ /* return NULL; */
+ }
n_body= agregate_xmls(pres_user, pres_domain, body_array, n);
LM_DBG("[n_body]=%p\n", n_body);
@@ -126,13 +128,17 @@
LM_DBG("[pres_user]=%.*s [pres_domain]= %.*s, [n]=%d\n",
pres_user->len, pres_user->s, pres_domain->len, pres_domain->s, n);
- xml_array = (xmlDocPtr*)pkg_malloc( n*sizeof(xmlDocPtr));
- if(xml_array== NULL)
+ if (n > 0)
{
- LM_ERR("while allocating memory");
- return NULL;
+ xml_array = (xmlDocPtr*)pkg_malloc( n*sizeof(xmlDocPtr));
+ if(xml_array== NULL)
+ {
+ LM_ERR("while allocating memory");
+ return NULL;
+ }
+ memset(xml_array, 0, n*sizeof(xmlDocPtr)) ;
}
- memset(xml_array, 0, n*sizeof(xmlDocPtr)) ;
+ else xml_array = NULL;
/* parse all the XML documents */
for(i=0; i<n; i++)
@@ -153,14 +159,14 @@
j++;
}
-
+#if 0
if(j== 0) /* no body */
{
if(xml_array)
pkg_free(xml_array);
return NULL;
}
-
+#endif
/* n: number of bodies in total */
/* j: number of useful bodies; created XML structures */
/* i: loop counter */

@ -0,0 +1,144 @@
From 5c9b3afca092dfda33c96dbf5195b8f7bbc2d4cf Mon Sep 17 00:00:00 2001
From: lazedo <luis.azedo@factorlusitano.com>
Date: Wed, 28 Jan 2015 17:31:06 +0000
Subject: [PATCH 1/2] presence_dialoginfo : optionally send dummy dialog
---
.../doc/presence_dialoginfo_admin.xml | 25 ++++++++++++
modules/presence_dialoginfo/notify_body.c | 47 +++++++++++++++++++++-
modules/presence_dialoginfo/presence_dialoginfo.c | 2 +
3 files changed, 73 insertions(+), 1 deletion(-)
diff --git a/modules/presence_dialoginfo/doc/presence_dialoginfo_admin.xml b/modules/presence_dialoginfo/doc/presence_dialoginfo_admin.xml
index b06df96..09901c4 100644
--- a/modules/presence_dialoginfo/doc/presence_dialoginfo_admin.xml
+++ b/modules/presence_dialoginfo/doc/presence_dialoginfo_admin.xml
@@ -223,6 +223,31 @@ modparam("presence_dialoginfo", "force_single_dialog", 1)
</example>
</section>
+ <section>
+ <title><varname>force_dummy_dialog</varname> (int)</title>
+ <para>
+ By default the module returns null body
+ if there are no bodies to aggregate.
+ some sip clients like Bria expect at least one dialog.
+ you can activate this parameter to send a dummy dialog.
+ </para>
+ <para>
+ If this parameter is set and there are no dialog bodies to aggregate,
+ it will return a dummy dialog.
+ </para>
+ <para>
+ <emphasis>Default value is <quote>0</quote>.</emphasis>
+ </para>
+ <example>
+ <title>Set <varname></varname> parameter</title>
+ <programlisting format="linespecific">
+...
+modparam("presence_dialoginfo", "force_dummy_dialog", 1)
+...
+</programlisting>
+ </example>
+ </section>
+
</section>
<section>
diff --git a/modules/presence_dialoginfo/notify_body.c b/modules/presence_dialoginfo/notify_body.c
index 97b9421..bd2097b 100644
--- a/modules/presence_dialoginfo/notify_body.c
+++ b/modules/presence_dialoginfo/notify_body.c
@@ -56,6 +56,7 @@ str* agregate_xmls(str* pres_user, str* pres_domain, str** body_array, int n);
int check_relevant_state (xmlChar * dialog_id, xmlDocPtr * xml_array, int total_nodes);
extern int force_single_dialog;
+extern int force_dummy_dialog;
void free_xml_body(char* body)
{
@@ -66,6 +67,47 @@ void free_xml_body(char* body)
body= NULL;
}
+#define DIALOGINFO_EMPTY_BODY "<dialog-info>\
+<dialog direction=\"recipient\">\
+<state>terminated</state>\
+</dialog>\
+</dialog-info>"
+
+#define DIALOGINFO_EMPTY_BODY_SIZE 512
+
+str* dlginfo_agg_nbody_empty(str* pres_user, str* pres_domain)
+{
+ str* n_body= NULL;
+
+ LM_DBG("creating empty dialog for [pres_user]=%.*s [pres_domain]= %.*s\n",
+ pres_user->len, pres_user->s, pres_domain->len, pres_domain->s);
+
+ str* body_array = (str*)pkg_malloc(sizeof(str));
+ char* body = (char*)pkg_malloc(DIALOGINFO_EMPTY_BODY_SIZE);
+ sprintf(body, DIALOGINFO_EMPTY_BODY);//, pres_user->len, pres_user->s, pres_domain->len, pres_domain->s);
+ body_array->s = body;
+ body_array->len = strlen(body);
+
+
+ n_body= agregate_xmls(pres_user, pres_domain, &body_array, 1);
+ LM_DBG("[n_body]=%p\n", n_body);
+ if(n_body) {
+ LM_DBG("[*n_body]=%.*s\n",n_body->len, n_body->s);
+ }
+ if(n_body== NULL)
+ {
+ LM_ERR("while aggregating body\n");
+ }
+
+ pkg_free(body);
+ pkg_free(body_array);
+
+
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return n_body;
+}
str* dlginfo_agg_nbody(str* pres_user, str* pres_domain, str** body_array, int n, int off_index)
{
@@ -74,9 +116,12 @@ str* dlginfo_agg_nbody(str* pres_user, str* pres_domain, str** body_array, int n
LM_DBG("[pres_user]=%.*s [pres_domain]= %.*s, [n]=%d\n",
pres_user->len, pres_user->s, pres_domain->len, pres_domain->s, n);
- if(body_array== NULL)
+ if(body_array== NULL && (!force_dummy_dialog))
return NULL;
+ if(body_array== NULL)
+ return dlginfo_agg_nbody_empty(pres_user, pres_domain);
+
n_body= agregate_xmls(pres_user, pres_domain, body_array, n);
LM_DBG("[n_body]=%p\n", n_body);
if(n_body) {
diff --git a/modules/presence_dialoginfo/presence_dialoginfo.c b/modules/presence_dialoginfo/presence_dialoginfo.c
index d519dba..7395a78 100644
--- a/modules/presence_dialoginfo/presence_dialoginfo.c
+++ b/modules/presence_dialoginfo/presence_dialoginfo.c
@@ -51,6 +51,7 @@ add_event_t pres_add_event;
/* module parameters */
int force_single_dialog = 0;
+int force_dummy_dialog = 0;
/* module exported commands */
static cmd_export_t cmds[] =
@@ -61,6 +62,7 @@ static cmd_export_t cmds[] =
/* module exported paramaters */
static param_export_t params[] = {
{ "force_single_dialog", INT_PARAM, &force_single_dialog },
+ { "force_dummy_dialog", INT_PARAM, &force_dummy_dialog },
{0, 0, 0}
};
--
2.1.4

@ -0,0 +1,27 @@
From f12f243e39c840b1306bf376c49ef4dab9e7564f Mon Sep 17 00:00:00 2001
From: lazedo <luis.azedo@factorlusitano.com>
Date: Tue, 24 Feb 2015 17:19:15 +0000
Subject: [PATCH 2/2] presence_dialoginfo: rfc4235 in dummy dialog
according to rfc4235 the id element is mandatory.
granstream phones are affected by this.
---
modules/presence_dialoginfo/notify_body.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/presence_dialoginfo/notify_body.c b/modules/presence_dialoginfo/notify_body.c
index bd2097b..508b9f8 100644
--- a/modules/presence_dialoginfo/notify_body.c
+++ b/modules/presence_dialoginfo/notify_body.c
@@ -68,7 +68,7 @@ void free_xml_body(char* body)
}
#define DIALOGINFO_EMPTY_BODY "<dialog-info>\
-<dialog direction=\"recipient\">\
+<dialog id=\"615293b33c62dec073e05d9421e9f48b\" direction=\"recipient\">\
<state>terminated</state>\
</dialog>\
</dialog-info>"
--
2.1.4
Loading…
Cancel
Save