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

Author: Juha Heinanen <[email protected]>
Committer: Juha Heinanen <[email protected]>
Date:   Mon Sep 30 13:44:05 2013 +0300

apps/sbc: added $x.P(name) pattern that returns value of param 'name'
  from URI x

---

 apps/sbc/ParamReplacer.cpp |   29 ++++++++++++++++++++++-------
 doc/Readme.sbc.txt         |    1 +
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/apps/sbc/ParamReplacer.cpp b/apps/sbc/ParamReplacer.cpp
index 0975d2c..4a8cef7 100644
--- a/apps/sbc/ParamReplacer.cpp
+++ b/apps/sbc/ParamReplacer.cpp
@@ -35,7 +35,7 @@
 #include <stdlib.h>
 
 void replaceParsedParam(const string& s, size_t p,
-                       const AmUriParser& parsed, string& res) {
+                       const AmUriParser& parsed, string& res, size_t &skip) {
   switch (s[p+1]) {
   case 'u': { // URI
     res+=parsed.uri_user+"@"+parsed.uri_host;
@@ -51,7 +51,22 @@ void replaceParsedParam(const string& s, size_t p,
   case 'h': res+=parsed.uri_host; break; // host
   case 'p': res+=parsed.uri_port; break; // port
   case 'H': res+=parsed.uri_headers; break; // Headers
-  case 'P': res+=parsed.uri_param; break; // Params
+  case 'P': { // Params
+    if ((s.length() < p+4) || (s[p+2] != '(')) {
+      res+=parsed.uri_param;
+      break;
+    }
+    size_t skip_p = p+3;
+    for (;skip_p<s.length() && s[skip_p] != ')';skip_p++) { }
+    if (skip_p==s.length()) {
+      WARN("Error parsing P param replacement (unclosed brackets)\n");
+      break;
+    }
+    string param_name = s.substr(p+3, skip_p-p-3);
+    DBG("param_name = '%s' (skip_p - p = %d)\n", param_name.c_str(), 
(int)(skip_p-p));
+    res += get_header_keyvalue(parsed.uri_param, param_name);
+    skip = size_t(skip_p - p);
+  }; break;
   case 'n': res+=parsed.display_name; break; // Params
 
   // case 't': { // tag
@@ -134,7 +149,7 @@ string replaceParameters(const string& s,
            }
          }
 
-         replaceParsedParam(s, p, from_parser, res);
+         replaceParsedParam(s, p, from_parser, res, skip_chars);
 
        }; break;
 
@@ -161,7 +176,7 @@ string replaceParameters(const string& s,
            }
          }
 
-         replaceParsedParam(s, p, to_parser, res);
+         replaceParsedParam(s, p, to_parser, res, skip_chars);
 
        }; break;
 
@@ -182,7 +197,7 @@ string replaceParameters(const string& s,
              break;
            }
          }
-         replaceParsedParam(s, p, ruri_parser, res);
+         replaceParsedParam(s, p, ruri_parser, res, skip_chars);
        }; break;
 
        case 'c': { // call-id
@@ -358,7 +373,7 @@ string replaceParameters(const string& s,
              if (!uri_parser.uri_port.empty())                         \
                res+=":"+uri_parser.uri_port;                           \
            } else {                                                    \
-             replaceParsedParam(s, p, uri_parser, res);                \
+             replaceParsedParam(s, p, uri_parser, res, skip_chars);    \
            }                                                           \
          }; break;
 
@@ -486,7 +501,7 @@ string replaceParameters(const string& s,
                   hdr_name.c_str(), uri_parser.uri.c_str());
              break;
            }
-           replaceParsedParam(s, p, uri_parser, res);
+           replaceParsedParam(s, p, uri_parser, res, skip_chars);
          }
          skip_chars = skip_p-p;
        } break;
diff --git a/doc/Readme.sbc.txt b/doc/Readme.sbc.txt
index 49a2595..c3c623a 100644
--- a/doc/Readme.sbc.txt
+++ b/doc/Readme.sbc.txt
@@ -131,6 +131,7 @@ The patterns which can be used are the following:
   $fp  - From port
   $fH  - From headers
   $fP  - From Params
+  $fP(param) - From Param 'param'
   $ft  - From tag
   $fn  - From display name
 

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

Reply via email to