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

Author: Stefan Sayer <[email protected]>
Committer: Stefan Sayer <[email protected]>
Date:   Wed Sep  4 15:14:45 2013 +0200

DSM: mod_uri uri.parseNameaddr function

example: uri.parseNameaddr(@remote_party, rprty.);

---

 apps/dsm/mods/mod_uri/ModUri.cpp |   31 +++++++++++++++++++++++++++++++
 apps/dsm/mods/mod_uri/ModUri.h   |    1 +
 doc/dsm/mods/Readme.mod_uri.txt  |   18 ++++++++++++++++++
 3 files changed, 50 insertions(+), 0 deletions(-)

diff --git a/apps/dsm/mods/mod_uri/ModUri.cpp b/apps/dsm/mods/mod_uri/ModUri.cpp
index 2944928..1715222 100644
--- a/apps/dsm/mods/mod_uri/ModUri.cpp
+++ b/apps/dsm/mods/mod_uri/ModUri.cpp
@@ -41,6 +41,7 @@ SC_EXPORT(MOD_CLS_NAME);
 MOD_ACTIONEXPORT_BEGIN(MOD_CLS_NAME) {
 
   DEF_CMD("uri.parse", URIParseAction);
+  DEF_CMD("uri.parseNameaddr", URIParseNameaddrAction);
   DEF_CMD("uri.getHeader", URIGetHeaderAction);
 
 } MOD_ACTIONEXPORT_END;
@@ -67,11 +68,41 @@ EXEC_ACTION_START(URIParseAction) {
     return false;
   }
   
+  sc_sess->var[prefix+"user"]         = p.uri_user;
+  sc_sess->var[prefix+"host"]         = p.uri_host;
+  sc_sess->var[prefix+"port"]         = p.uri_port;
+  sc_sess->var[prefix+"headers"]      = p.uri_headers;
+  sc_sess->var[prefix+"param"]        = p.uri_param;
+
+  sc_sess->CLR_ERRNO;
+} EXEC_ACTION_END;
+
+CONST_ACTION_2P(URIParseNameaddrAction, ',', true);
+EXEC_ACTION_START(URIParseNameaddrAction) {
+
+  string uri = resolveVars(par1, sess, sc_sess, event_params);
+  string prefix = resolveVars(par2, sess, sc_sess, event_params);
+
+  AmUriParser p;
+  if (!p.parse_nameaddr(uri)) {
+    DBG("parsing nameaddr '%s' failed\n", uri.c_str());
+    sc_sess->SET_ERRNO(DSM_ERRNO_GENERAL);
+    sc_sess->SET_STRERROR("parsing nameaddr '"+uri+"%s' failed");
+    return false;
+  }
+  
   sc_sess->var[prefix+"display_name"] = p.display_name;
   sc_sess->var[prefix+"user"]         = p.uri_user;
   sc_sess->var[prefix+"host"]         = p.uri_host;
+  sc_sess->var[prefix+"port"]         = p.uri_port;
+  sc_sess->var[prefix+"headers"]      = p.uri_headers;
   sc_sess->var[prefix+"param"]        = p.uri_param;
 
+  for (map<string, string>::iterator it=p.params.begin(); it != 
p.params.end(); it++) {
+    sc_sess->var[prefix+"uri_param."+it->first] = it->second;
+  }
+
+
   sc_sess->CLR_ERRNO;
 } EXEC_ACTION_END;
 
diff --git a/apps/dsm/mods/mod_uri/ModUri.h b/apps/dsm/mods/mod_uri/ModUri.h
index a6f6d7e..3e65b2b 100644
--- a/apps/dsm/mods/mod_uri/ModUri.h
+++ b/apps/dsm/mods/mod_uri/ModUri.h
@@ -35,6 +35,7 @@ bool onInvite(const AmSipRequest& req, DSMSession* sess);
 DECLARE_MODULE_END;
 
 DEF_ACTION_2P(URIParseAction);
+DEF_ACTION_2P(URIParseNameaddrAction);
 DEF_ACTION_2P(URIGetHeaderAction);
 
 #endif
diff --git a/doc/dsm/mods/Readme.mod_uri.txt b/doc/dsm/mods/Readme.mod_uri.txt
index db22974..8f5923a 100644
--- a/doc/dsm/mods/Readme.mod_uri.txt
+++ b/doc/dsm/mods/Readme.mod_uri.txt
@@ -3,6 +3,8 @@ uri.parse(<uri>, <prefix>)
     <prefix>display_name
     <prefix>user
     <prefix>host
+    <prefix>port
+    <prefix>headers
     <prefix>param
 
    example: 
@@ -11,6 +13,22 @@ uri.parse(<uri>, <prefix>)
 
   * Sets $errno (general).
 
+uri.parseNameaddr(<nameaddr>, <prefix>)
+  splits <nameaddr> in 
+    <prefix>display_name
+    <prefix>user
+    <prefix>host
+    <prefix>port
+    <prefix>headers
+    <prefix>param
+
+    <prefix>uri_param.<name> [= value]
+
+   example: 
+    uri.parseNameaddr(@remote_party, remote_);
+
+  * Sets $errno (general).
+
 uri.getHeader(<header>, <dst>)
     get header from initial INVITE into variable <dst>
 

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to