BTW not sure if your patch does it but I strongly suggest removing the useless and wrong single quotes around the received value (once such a value is properly hex-escaped it becomes a valid URI param value). Please remember that single quote is NOT a valid delimitator AT ALL for a SIP URI parameter value.
Regards. 2013/4/10 Iñaki Baz Castillo <i...@aliax.net>: > Juha, could you please paste here how the Path above looks with your change? > > Thanks a lot. > > 2013/4/10 Juha Heinanen <j...@tutpro.com>: >> below is patch that fixes receiced param value. i have not tested if >> kamalio that gets such a value is able to unescape the escaped chars. >> if not, that is a bug too. >> >> -- juha >> >> *** path.c Fri Mar 29 19:14:46 2013 >> --- /usr/src/sip-router/modules/path/path.c Wed Apr 10 08:09:43 2013 >> *************** >> *** 145,171 **** >> if (param == PATH_PARAM_RECEIVED) { >> /* 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:<ip>:<port>;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); >> 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); >> 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); >> 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); >> break; >> case PROTO_WS: >> case PROTO_WSS: >> ! rcv_addr.len = snprintf(rcv_addr.s, 6 + >> IP_ADDR_MAX_STR_SIZE + 19, "'sip:%s:%u;transport=ws'", src_ip, >> _m->rcv.src_port); >> break; >> } >> >> --- 145,171 ---- >> if (param == PATH_PARAM_RECEIVED) { >> /* TODO: agranig: optimize this one! */ >> src_ip = ip_addr2a(&_m->rcv.src_ip); >> ! rcv_addr.s = pkg_malloc(6 + IP_ADDR_MAX_STR_SIZE + 24); /* >> sip:<ip>:<port>%3Btransport%3Dsctp\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 + 4, "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 + 22, "sip:%s:%u%%3Btransport%%3Dtcp", src_ip, >> _m->rcv.src_port); >> break; >> case PROTO_TLS: >> ! rcv_addr.len = snprintf(rcv_addr.s, 6 + >> IP_ADDR_MAX_STR_SIZE + 22, "sip:%s:%u%%3Btransport%%3Dtls", src_ip, >> _m->rcv.src_port); >> break; >> case PROTO_SCTP: >> ! rcv_addr.len = snprintf(rcv_addr.s, 6 + >> IP_ADDR_MAX_STR_SIZE + 23, "sip:%s:%u%%3Btransport%%3Dsctp", src_ip, >> _m->rcv.src_port); >> break; >> case PROTO_WS: >> case PROTO_WSS: >> ! rcv_addr.len = snprintf(rcv_addr.s, 6 + >> IP_ADDR_MAX_STR_SIZE + 21, "sip:%s:%u%%3Btransport%%3Dws", src_ip, >> _m->rcv.src_port); >> break; >> } >> >> >> _______________________________________________ >> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list >> sr-users@lists.sip-router.org >> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users > > > > -- > Iñaki Baz Castillo > <i...@aliax.net> -- Iñaki Baz Castillo <i...@aliax.net> _______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users