#include "forward.h"
-int receive_msg(char* buf, unsigned int len)
+int receive_msg(char* buf, unsigned int len, unsigned long src_ip)
{
struct sip_msg msg;
struct route_elem *re;
orig=(char*) malloc(len);
if (orig==0){
DPrint("ERROR: memory allocation failure\n");
- goto error;
+ goto error1;
}
memcpy(orig, buf, len);
}
re->tx++;
/* send msg */
- forward_request(orig, buf, len, &msg, re);
DPrint(" found route to: %s\n", re->host.h_name);
+ forward_request(orig, buf, len, &msg, re, src_ip);
}else if (msg.first_line.type==SIP_REPLY){
/* sanity checks */
if (msg.via1.error!=VIA_PARSE_OK){
/* check if via1 == us */
/* send the msg */
- forward_reply(orig, buf, len, &msg);
- DPrint(" reply forwarded to %s:%d\n",
- msg.via2.host,
- (unsigned short) msg.via2.port
- );
+ if (forward_reply(orig, buf, len, &msg)==0){
+ DPrint(" reply forwarded to %s:%d\n",
+ msg.via2.host,
+ (unsigned short) msg.via2.port);
+ }
}
skip:
free(orig);
return 0;
error:
+ free(orig);
+error1:
return -1;
-
}