9 #include "msg_parser.h"
13 #define MAX_VIA_LINE_SIZE 240
14 #define MAX_RECEIVED_SIZE 57
16 #define our_address "dorian.fokus.gmd.de"
20 int forward_request(char * orig, char* buf,
23 struct route_elem* re)
25 unsigned int new_len, via_len, received_len;
26 char line_buf[MAX_VIA_LINE_SIZE];
27 char received_buf[MAX_RECEIVED_SIZE];
29 int offset, s_offset, size;
34 via_len=snprintf(line_buf, MAX_VIA_LINE_SIZE, "Via: SIP/2.0/UDP %s:%d\r\n",
35 our_address, our_port);
36 /* check if received needs to be added */
37 /* if check_address(source_ip, msg->via1.host) */
38 received_len=snprintf(received_buf, MAX_RECEIVED_SIZE, ";received=%s",
41 new_len=len+via_len+received_len;
42 new_buf=(char*)malloc(new_len+1);
44 DPrint("ERROR: forward_request: out of memory\n");
48 /* copy msg till first via */
50 size=msg->via1.hdr-buf;
51 memcpy(new_buf, orig, size);
56 memcpy(new_buf+offset, line_buf, via_len);
59 /* modify original via if neccesarry (received=...)*/
61 if (msg->via1.params){
62 size= msg->via1.params-msg->via1.hdr-1; /*compensate for ';' */
64 size= msg->via1.host-msg->via1.hdr+strlen(msg->via1.host);
65 if (msg->via1.port!=0){
66 size+=strlen(msg->via1.hdr+size+1);
69 memcpy(new_buf+offset, orig+s_offset,
74 memcpy(new_buf+offset, received_buf, received_len);
78 /* copy the rest of the msg */
79 memcpy(new_buf+offset, orig+s_offset, len-s_offset);
84 printf("Sending:\n%s.\n", new_buf);
94 /* removes first via & sends msg to the second */
95 int forward_reply(char * orig, char* buf,
101 unsigned int new_len, via_len;
103 int offset, s_offset, size;
106 /* we must remove first via */
107 via_len=msg->via1.size;
108 size=msg->via1.hdr-buf;
110 via_len-=strlen(msg->via1.hdr)+1; /* +1 from ':' */
111 size+=strlen(msg->via1.hdr)+1;
115 new_buf=(char*)malloc(new_len);
117 DPrint("ERROR: forward_reply: out of memory\n");
121 memcpy(new_buf, orig, size);
123 s_offset=size+via_len;
125 memcpy(new_buf+offset,orig+s_offset, len-s_offset);
128 printf("Sending: to %s:%d, \n%s.\n",
130 (unsigned short)msg->via2.port,