[sr-dev] git:master: modules/registrar: unescape received value using kcore function
Juha Heinanen
jh at tutpro.com
Thu Apr 11 07:13:42 CEST 2013
Module: sip-router
Branch: master
Commit: 2003bc3b1cc73caa36e9b4892d8d25f810d6c458
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=2003bc3b1cc73caa36e9b4892d8d25f810d6c458
Author: Juha Heinanen <jh at tutpro.com>
Committer: Juha Heinanen <jh at tutpro.com>
Date: Thu Apr 11 08:11:35 2013 +0300
modules/registrar: unescape received value using kcore function
- Now that unescaped received value goes into separate buffer, it is
possible to use kcore unescape function.
---
modules/registrar/path.c | 111 ++--------------------------------------------
1 files changed, 4 insertions(+), 107 deletions(-)
diff --git a/modules/registrar/path.c b/modules/registrar/path.c
index ef976e0..cefd59a 100644
--- a/modules/registrar/path.c
+++ b/modules/registrar/path.c
@@ -32,114 +32,11 @@
#include "../../data_lump.h"
#include "../../parser/parse_rr.h"
#include "../../parser/parse_uri.h"
+#include "../../lib/kcore/strcommon.h"
#include "path.h"
#include "reg_mod.h"
-/*! \brief Unscape all printable ASCII characters */
-int unescape_string(str *sin, str *sout)
-{
- char *at, *p, c;
-
- if(sin==NULL || sout==NULL || sin->s==NULL || sout->s==NULL
- || sin->len<0 || sout->len < sin->len+1)
- return -1;
-
- at = sout->s;
- p = sin->s;
- while(p < sin->s+sin->len)
- {
- if (*p == '%')
- {
- p++;
- switch (*p)
- {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- c = (*p - '0') << 4;
- break;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- c = (*p - 'a' + 10) << 4;
- break;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- c = (*p - 'A' + 10) << 4;
- break;
- default:
- LM_ERR("invalid hex digit <%u>\n", (unsigned int)*p);
- return -1;
- }
- p++;
- switch (*p)
- {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- c = c + (*p - '0');
- break;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- c = c + (*p - 'a' + 10);
- break;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- c = c + (*p - 'A' + 10);
- break;
- default:
- LM_ERR("invalid hex digit <%u>\n", (unsigned int)*p);
- return -1;
- }
- if ((c < 32) || (c > 126))
- {
- LM_ERR("invalid escaped character <%u>\n", (unsigned int)c);
- return -1;
- }
- *at++ = c;
- } else {
- *at++ = *p;
- }
- p++;
- }
-
- *at = 0;
- sout->len = at - sout->s;
-
- LM_DBG("unescaped string is <%s>\n", sout->s);
- return 0;
-}
-
/*! \brief
* Combines all Path HF bodies into one string.
*/
@@ -203,9 +100,9 @@ int build_path_vector(struct sip_msg *_m, str *path, str *received)
if (hooks.contact.received) {
uri_str.s = uri_buf;
uri_str.len = MAX_URI_SIZE;
- if (unescape_string(&(hooks.contact.received->body), &uri_str) < 0) {
- LM_ERR("unescaping received failed\n");
- goto error;
+ if (unescape_user(&(hooks.contact.received->body), &uri_str) < 0) {
+ LM_ERR("unescaping received failed\n");
+ goto error;
}
*received = uri_str;
LM_DBG("received is <%.*s>\n", received->len, received->s);
More information about the sr-dev
mailing list