diff --git a/modules_k/path/path.c b/modules_k/path/path.c index f2860772e..3776c6c6d 100644 --- a/modules_k/path/path.c +++ b/modules_k/path/path.c @@ -122,23 +122,23 @@ static int prepend_path(struct sip_msg* _m, str *user, int recv) if (recv) { /* TODO: agranig: optimize this one! */ src_ip = ip_addr2a(&_m->rcv.src_ip); - rcv_addr.s = pkg_malloc(6 + IP_ADDR_MAX_STR_SIZE + 22); /* "sip::;transport=sctp"\0 */ + rcv_addr.s = pkg_malloc(6 + IP_ADDR_MAX_STR_SIZE + 22); /* 'sip::;transport=sctp'\0 */ if(!rcv_addr.s) { LM_ERR("no pkg memory left for receive-address\n"); goto out3; } switch (_m->rcv.proto) { case PROTO_UDP: - rcv_addr.len = snprintf(rcv_addr.s, 6 + IP_ADDR_MAX_STR_SIZE + 6, "\"sip:%s:%u\"", src_ip, _m->rcv.src_port); + rcv_addr.len = snprintf(rcv_addr.s, 6 + IP_ADDR_MAX_STR_SIZE + 6, "'sip:%s:%u'", src_ip, _m->rcv.src_port); break; case PROTO_TCP: - rcv_addr.len = snprintf(rcv_addr.s, 6 + IP_ADDR_MAX_STR_SIZE + 20, "\"sip:%s:%u;transport=tcp\"", src_ip, _m->rcv.src_port); + rcv_addr.len = snprintf(rcv_addr.s, 6 + IP_ADDR_MAX_STR_SIZE + 20, "'sip:%s:%u;transport=tcp'", src_ip, _m->rcv.src_port); break; case PROTO_TLS: - rcv_addr.len = snprintf(rcv_addr.s, 6 + IP_ADDR_MAX_STR_SIZE + 20, "\"sip:%s:%u;transport=tls\"", src_ip, _m->rcv.src_port); + rcv_addr.len = snprintf(rcv_addr.s, 6 + IP_ADDR_MAX_STR_SIZE + 20, "'sip:%s:%u;transport=tls'", src_ip, _m->rcv.src_port); break; case PROTO_SCTP: - rcv_addr.len = snprintf(rcv_addr.s, 6 + IP_ADDR_MAX_STR_SIZE + 21, "\"sip:%s:%u;transport=sctp\"", src_ip, _m->rcv.src_port); + rcv_addr.len = snprintf(rcv_addr.s, 6 + IP_ADDR_MAX_STR_SIZE + 21, "'sip:%s:%u;transport=sctp'", src_ip, _m->rcv.src_port); break; } diff --git a/parser/parse_param.c b/parser/parse_param.c index 90fe2414a..80cbcbd28 100644 --- a/parser/parse_param.c +++ b/parser/parse_param.c @@ -264,6 +264,7 @@ static inline void parse_uri_class(param_hooks_t* _h, param_t* _p) static inline int parse_quoted_param(str* _s, str* _r) { char* end_quote; + char quote; /* The string must have at least * surrounding quotes @@ -272,14 +273,20 @@ static inline int parse_quoted_param(str* _s, str* _r) return -1; } + /* Store the kind of quoting (single or double) + * which we're handling with + */ + quote = (_s->s)[0]; + + /* Skip opening quote */ _s->s++; _s->len--; /* Find closing quote */ - end_quote = q_memchr(_s->s, '\"', _s->len); - + end_quote = q_memchr(_s->s, quote, _s->len); + /* Not found, return error */ if (!end_quote) { return -2; @@ -413,7 +420,7 @@ static inline void parse_param_name(str* _s, pclass_t _c, param_hooks_t* _h, par */ static inline int parse_param_body(str* _s, param_t* _c) { - if (_s->s[0] == '\"') { + if (_s->s[0] == '\"' || _s->s[0] == '\'') { if (parse_quoted_param(_s, &(_c->body)) < 0) { LOG(L_ERR, "parse_param_body(): Error while parsing quoted string\n"); return -2; diff --git a/pkg/kamailio/deb/squeeze/changelog b/pkg/kamailio/deb/squeeze/changelog index 6bf5ca073..2b601459c 100644 --- a/pkg/kamailio/deb/squeeze/changelog +++ b/pkg/kamailio/deb/squeeze/changelog @@ -1,3 +1,11 @@ +kamailio (3.1.5+sipwise8) unstable; urgency=low + + [ agranig ] + * path.c: Use single-quotes instead of double-quotes in received-param. + * parse_param.c: Also parse single-quoted params correctly. + + -- Andrew Pogrebennyk Mon, 04 Jun 2012 18:16:56 +0200 + kamailio (3.1.5+sipwise7) unstable; urgency=low [rfuchs]