|
@@ -2223,94 +2223,7 @@ done:
|
|
static int
|
|
static int
|
|
create_rcv_uri(str* uri, struct sip_msg* m)
|
|
create_rcv_uri(str* uri, struct sip_msg* m)
|
|
{
|
|
{
|
|
- static char buf[MAX_URI_SIZE];
|
|
|
|
- char* p;
|
|
|
|
- str ip, port;
|
|
|
|
- int len;
|
|
|
|
- str proto;
|
|
|
|
-
|
|
|
|
- if (!uri || !m) {
|
|
|
|
- LM_ERR("invalid parameter value\n");
|
|
|
|
- return -1;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ip.s = ip_addr2a(&m->rcv.src_ip);
|
|
|
|
- ip.len = strlen(ip.s);
|
|
|
|
-
|
|
|
|
- port.s = int2str(m->rcv.src_port, &port.len);
|
|
|
|
-
|
|
|
|
- switch(m->rcv.proto) {
|
|
|
|
- case PROTO_NONE:
|
|
|
|
- case PROTO_UDP:
|
|
|
|
- proto.s = 0; /* Do not add transport parameter, UDP is default */
|
|
|
|
- proto.len = 0;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case PROTO_TCP:
|
|
|
|
- proto.s = "TCP";
|
|
|
|
- proto.len = 3;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case PROTO_TLS:
|
|
|
|
- proto.s = "TLS";
|
|
|
|
- proto.len = 3;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case PROTO_SCTP:
|
|
|
|
- proto.s = "SCTP";
|
|
|
|
- proto.len = 4;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- case PROTO_WS:
|
|
|
|
- case PROTO_WSS:
|
|
|
|
- proto.s = "WS";
|
|
|
|
- proto.len = 2;
|
|
|
|
- break;
|
|
|
|
-
|
|
|
|
- default:
|
|
|
|
- LM_ERR("unknown transport protocol\n");
|
|
|
|
- return -1;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- len = 4 + ip.len + 2*(m->rcv.src_ip.af==AF_INET6)+ 1 + port.len;
|
|
|
|
- if (proto.s) {
|
|
|
|
- len += TRANSPORT_PARAM_LEN;
|
|
|
|
- len += proto.len;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (len > MAX_URI_SIZE) {
|
|
|
|
- LM_ERR("buffer too small\n");
|
|
|
|
- return -1;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- p = buf;
|
|
|
|
- memcpy(p, "sip:", 4);
|
|
|
|
- p += 4;
|
|
|
|
-
|
|
|
|
- if (m->rcv.src_ip.af==AF_INET6)
|
|
|
|
- *p++ = '[';
|
|
|
|
- memcpy(p, ip.s, ip.len);
|
|
|
|
- p += ip.len;
|
|
|
|
- if (m->rcv.src_ip.af==AF_INET6)
|
|
|
|
- *p++ = ']';
|
|
|
|
-
|
|
|
|
- *p++ = ':';
|
|
|
|
-
|
|
|
|
- memcpy(p, port.s, port.len);
|
|
|
|
- p += port.len;
|
|
|
|
-
|
|
|
|
- if (proto.s) {
|
|
|
|
- memcpy(p, TRANSPORT_PARAM, TRANSPORT_PARAM_LEN);
|
|
|
|
- p += TRANSPORT_PARAM_LEN;
|
|
|
|
-
|
|
|
|
- memcpy(p, proto.s, proto.len);
|
|
|
|
- p += proto.len;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- uri->s = buf;
|
|
|
|
- uri->len = len;
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return get_src_uri(m, 0, uri);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|