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
