[sr-dev] git:master: pua_mi: id parameter introduced in mi pua_publish

Daniel-Constantin Mierla miconda at gmail.com
Wed Mar 17 20:36:19 CET 2010


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

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Wed Mar 17 20:32:40 2010 +0100

pua_mi: id parameter introduced in mi pua_publish

- the parameter is before etag
- required to refer to same call for dialog-info
- patch by Alex Hermann (SF#2826542)

---

 modules_k/pua_mi/README               |  122 +++++++++++++++++++-------------
 modules_k/pua_mi/doc/pua_mi_admin.xml |   13 ++++
 modules_k/pua_mi/mi_func.c            |   21 ++++++-
 3 files changed, 105 insertions(+), 51 deletions(-)

diff --git a/modules_k/pua_mi/README b/modules_k/pua_mi/README
index 487b3d0..ecbc6ca 100644
--- a/modules_k/pua_mi/README
+++ b/modules_k/pua_mi/README
@@ -14,27 +14,26 @@ Juha Heinanen
 
    Copyright © 2006 voice-system.ro
    Revision History
-   Revision $Revision$ $Date: 2008-08-06 12:08:33 +0200
-                              (Mi, 06 Aug 2008) $
-     __________________________________________________________
+   Revision $Revision$ $Date$
+     __________________________________________________________________
 
    Table of Contents
 
    1. Admin Guide
 
-        1.1. Overview
-        1.2. Dependencies
+        1. Overview
+        2. Dependencies
 
-              1.2.1. Kamailio Modules
-              1.2.2. External Libraries or Applications
+              2.1. Kamailio Modules
+              2.2. External Libraries or Applications
 
-        1.3. Exported Parameters
-        1.4. Exported Functions
-        1.5. Exported MI functions
+        3. Exported Parameters
+        4. Exported Functions
+        5. Exported MI functions
 
-              1.5.1. pua_publish
+              5.1. pua_publish
 
-        1.6. pua_subscribe
+        6. pua_subscribe
 
    List of Examples
 
@@ -42,44 +41,63 @@ Juha Heinanen
 
 Chapter 1. Admin Guide
 
-1.1. Overview
+   Table of Contents
+
+   1. Overview
+   2. Dependencies
+
+        2.1. Kamailio Modules
+        2.2. External Libraries or Applications
+
+   3. Exported Parameters
+   4. Exported Functions
+   5. Exported MI functions
+
+        5.1. pua_publish
+
+   6. pua_subscribe
 
-   The pua_mi offers the possibility to publish presence
-   information and subscribe to presence information via MI
-   transports.
+1. Overview
 
-   Using this module you can create independent
-   applications/scripts to publish not sip-related information
-   (e.g., system resources like CPU-usage, memory, number of
-   active subscribers ...). Also, this module allows non-SIP
-   speaking applications to subscribe presence information kept in
-   a SIP presence server.
+   The pua_mi offers the possibility to publish presence information and
+   subscribe to presence information via MI transports.
 
-1.2. Dependencies
+   Using this module you can create independent applications/scripts to
+   publish not sip-related information (e.g., system resources like
+   CPU-usage, memory, number of active subscribers ...). Also, this module
+   allows non-SIP speaking applications to subscribe presence information
+   kept in a SIP presence server.
 
-1.2.1. Kamailio Modules
+2. Dependencies
+
+   2.1. Kamailio Modules
+   2.2. External Libraries or Applications
+
+2.1. Kamailio Modules
 
    The following modules must be loaded before this module:
      * pua
 
-1.2.2. External Libraries or Applications
+2.2. External Libraries or Applications
 
-   The following libraries or applications must be installed
-   before running Kamailio with this module loaded:
+   The following libraries or applications must be installed before
+   running Kamailio with this module loaded:
      * none
 
-1.3. Exported Parameters
+3. Exported Parameters
 
      * none
 
-1.4. Exported Functions
+4. Exported Functions
+
+   The module does not export functions to be used in configuration
+   script.
 
-   The module does not export functions to be used in
-   configuration script.
+5. Exported MI functions
 
-1.5. Exported MI functions
+   5.1. pua_publish
 
-1.5.1.  pua_publish
+5.1.  pua_publish
 
    Command parameters:
      * presentity_uri - e.g. sip:system at kamailio.org
@@ -88,13 +106,18 @@ Chapter 1. Admin Guide
        information (e.g. presence).
      * content type - Content type of published information (e.g.
        application/pidf+xml) or . if no information is enclosed.
-     * ETag - ETag that publish should match or . if no ETag is
-       given.
-     * extra_headers - Extra headers added to PUBLISH request or .
-       if no extra headers.
+     * id - id for a series of related PUBLISHes to the same
+       presentity-uri or . to always use the same series. For example
+       dialog-info must reuse the same id for the same call otherwise
+       status will be lost when multiple parallel calls to/from the same
+       user take place. The dialog-id from the dialog-info body qualifies
+       as a suitable id here.
+     * ETag - ETag that publish should match or . if no ETag is given.
+     * extra_headers - Extra headers added to PUBLISH request or . if no
+       extra headers.
      * body - The body of the publish request containing published
-       information or missing if no published information. It has
-       to be a single line for FIFO transport.
+       information or missing if no published information. It has to be a
+       single line for FIFO transport.
 
    Example 1.1. pua_publish FIFO example
 ...
@@ -106,20 +129,19 @@ presence
 application/pidf+xml
 .
 .
-<?xml version='1.0'?><presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns
-:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params
-:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='s
-ystem at kamailio.org'><tuple id='0x81475a0'><status><basic>open</basic></s
-tatus></tuple><dm:person id='pdd748945'><rpid:activities><rpid:away/>awa
-y</rpid:activities><dm:note>CPU:16 MEM:476</dm:note></dm:person></presen
-ce>
-
+.
+<?xml version='1.0'?><presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn
+:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpi
+d' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='system at kamailio.org'><tup
+le id='0x81475a0'><status><basic>open</basic></status></tuple><dm:person id='pdd
+748945'><rpid:activities><rpid:away/>away</rpid:activities><dm:note>CPU:16 MEM:4
+76</dm:note></dm:person></presence>
 
-1.6.  pua_subscribe
+6.  pua_subscribe
 
    Command parameters:
      * presentity_uri - e.g. sip:presentity at kamailio.org
      * watcher_uri - e.g. sip:watcher at kamailio.org
      * event package
-     * expires - Relative time in seconds for the desired validity
-       of the subscription.
+     * expires - Relative time in seconds for the desired validity of the
+       subscription.
diff --git a/modules_k/pua_mi/doc/pua_mi_admin.xml b/modules_k/pua_mi/doc/pua_mi_admin.xml
index 8602c49..5f332b8 100644
--- a/modules_k/pua_mi/doc/pua_mi_admin.xml
+++ b/modules_k/pua_mi/doc/pua_mi_admin.xml
@@ -120,6 +120,18 @@
 			</listitem>
 			<listitem>
 				<para>
+					<emphasis>id</emphasis>
+					- id for a series of related PUBLISHes to the same 
+		presentity-uri or . to always use the same series.
+		For example dialog-info must reuse the same id for the
+		same call otherwise status will be lost when multiple
+		parallel calls to/from the same user take place. The
+		dialog-id from the dialog-info body qualifies as a suitable
+		id here.
+		                </para> 
+			</listitem>
+			<listitem>
+				<para>
 					<emphasis>ETag</emphasis>
 					- ETag that publish should
 		match or . if no ETag is given.
@@ -154,6 +166,7 @@ presence
 application/pidf+xml
 .
 .
+.
 <?xml version='1.0'?><presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='system at kamailio.org'><tuple id='0x81475a0'><status><basic>open</basic></status></tuple><dm:person id='pdd748945'><rpid:activities><rpid:away/>away</rpid:activities><dm:note>CPU:16 MEM:476</dm:note></dm:person></presence>
 ]]>
 </programlisting>
diff --git a/modules_k/pua_mi/mi_func.c b/modules_k/pua_mi/mi_func.c
index b8089aa..fe3fa3a 100644
--- a/modules_k/pua_mi/mi_func.c
+++ b/modules_k/pua_mi/mi_func.c
@@ -58,6 +58,7 @@ struct mi_root* mi_pua_publish(struct mi_root* cmd, void* param)
 	publ_info_t publ;
 	str event;
 	str content_type;
+	str id;
 	str etag;
 	str extra_headers;
 	int result;
@@ -142,6 +143,19 @@ struct mi_root* mi_pua_publish(struct mi_root* cmd, void* param)
 	if(node == NULL)
 		return 0;
 
+	/* Get id */
+	id= node->value;
+	if(id.s== NULL || id.len== 0)
+	{
+		LM_ERR("empty id parameter\n");
+		return init_mi_tree(400, "Empty id parameter", 20);
+	}
+	LM_DBG("id '%.*s'\n", id.len, id.s);
+
+	node = node->next;
+	if(node == NULL)
+		return 0;
+
 	/* Get etag */
 	etag= node->value;
 	if(etag.s== NULL || etag.len== 0)
@@ -213,7 +227,12 @@ struct mi_root* mi_pua_publish(struct mi_root* cmd, void* param)
 	{
 		publ.content_type= content_type;
 	}	
-	
+
+	if(! (id.len== 1 && id.s[0]== '.'))
+	{
+		publ.id= id;
+	}
+
 	if(! (etag.len== 1 && etag.s[0]== '.'))
 	{
 		publ.etag= &etag;




More information about the sr-dev mailing list