Skip to content

Commit

Permalink
fix proto selections issues
Browse files Browse the repository at this point in the history
* proto was set to PROTO_UDP in siptrace;now set it depending
on the protocol used
* proto_hep function pack_hep will receive the proto id in
netinet form(IPPROTO_*)
* siptrace transforms from netinet id (IPPROTO_*) to
opensips-like id (PROTO_*)
  • Loading branch information
ionutrazvanionita committed Dec 8, 2015
1 parent 6dd210a commit e9f6e97
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 54 deletions.
53 changes: 2 additions & 51 deletions modules/proto_hep/hep.c
Expand Up @@ -132,31 +132,7 @@ static int pack_hepv3(union sockaddr_union* from_su, union sockaddr_union* to_su
/* Proto ID */
hg.ip_proto.chunk.vendor_id = htons(OSIP_VENDOR_ID);
hg.ip_proto.chunk.type_id = htons(0x0002);
switch (proto) {
case PROTO_UDP:
hg.ip_proto.data = IPPROTO_UDP;
break;

case PROTO_TCP:
hg.ip_proto.data = IPPROTO_TCP;
break;

case PROTO_TLS:
hg.ip_proto.data = IPPROTO_IDP;
break;

case PROTO_SCTP:
hg.ip_proto.data = IPPROTO_SCTP;
break;

case PROTO_WS:
hg.ip_proto.data = IPPROTO_ESP;
break;

default:
LM_ERR("Unknown protocol [%d]\n", proto);
return -1;
}
hg.ip_proto.data = proto;
hg.ip_proto.chunk.length = htons(sizeof(hg.ip_proto));


Expand Down Expand Up @@ -332,32 +308,7 @@ static int pack_hepv2(union sockaddr_union* from_su, union sockaddr_union* to_su
/* Version && proto */
hdr.hp_v = hep_version;
hdr.hp_f = from_su->s.sa_family;
switch (proto) {
case PROTO_UDP:
hdr.hp_p = IPPROTO_UDP;
break;

case PROTO_TCP:
hdr.hp_p = IPPROTO_TCP;
break;

case PROTO_TLS:
hdr.hp_p = IPPROTO_IDP;
break;

case PROTO_SCTP:
hdr.hp_p = IPPROTO_SCTP;
break;

case PROTO_WS:
hdr.hp_p = IPPROTO_ESP;
break;

default:
LM_ERR("Unknown protocol [%d]\n", proto);
return -1;
}

hdr.hp_p = proto;

/* IP version */
switch (hdr.hp_f) {
Expand Down
32 changes: 29 additions & 3 deletions modules/siptrace/siptrace.c
Expand Up @@ -1797,7 +1797,7 @@ static int trace_send_hep_duplicate(str *body, str *fromproto, str *fromip,
int ret;
union sockaddr_union from_su;
union sockaddr_union to_su;
unsigned int proto;
unsigned int proto, osip_proto;
struct socket_info* send_sock;
union sockaddr_union* to = NULL;

Expand All @@ -1811,6 +1811,7 @@ static int trace_send_hep_duplicate(str *body, str *fromproto, str *fromip,
return 0;

/* Convert proto:ip:port to sockaddress union SRC IP */
/* proto is going to be converted to netinet proto */
if (pipport2su(fromproto, fromip, fromport, &from_su, &proto)==-1 ||
(pipport2su(toproto, toip, toport, &to_su, &proto)==-1))
goto error;
Expand All @@ -1823,7 +1824,6 @@ static int trace_send_hep_duplicate(str *body, str *fromproto, str *fromip,


/* create a temporary proxy*/
proto = PROTO_UDP;
p=mk_proxy(&dup_uri->host, (dup_uri->port_no)?dup_uri->port_no:SIP_PORT,proto, 0);
if (p==0){
LM_ERR("bad host name in uri\n");
Expand All @@ -1844,10 +1844,36 @@ static int trace_send_hep_duplicate(str *body, str *fromproto, str *fromip,
return -1;
}

switch (proto) {
case IPPROTO_UDP:
osip_proto = PROTO_UDP;
break;

case IPPROTO_TCP:
osip_proto = PROTO_TCP;
break;

case IPPROTO_IDP:
osip_proto = PROTO_TLS;
break;

case IPPROTO_SCTP:
osip_proto = PROTO_SCTP;
break;

case IPPROTO_ESP:
osip_proto = PROTO_WS;
break;

default:
LM_ERR("Unknown protocol [%d]\n", proto);
return -1;
}

ret = -1;

do {
send_sock=get_send_socket(0, to, proto);
send_sock=get_send_socket(0, to, osip_proto);
if (send_sock==0){
LM_ERR("can't forward to af %d, proto %d no corresponding listening socket\n",
to->s.sa_family,proto);
Expand Down

0 comments on commit e9f6e97

Please sign in to comment.