forked from OpenSIPS/opensips
-
Notifications
You must be signed in to change notification settings - Fork 1
/
msg_translator.h
132 lines (106 loc) · 3.68 KB
/
msg_translator.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* $Id$
*
* Copyright (C) 2001-2003 FhG Fokus
*
* This file is part of opensips, a free SIP server.
*
* opensips is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version
*
* opensips is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* History:
* --------
* 2003-03-06 totags in outgoing replies bookmarked to enable
* ACK/200 tag matching
* 2003-10-08 receive_test function-alized (jiri)
*/
/*!
* \file
* \brief Create and translate SIP messages/ message contents
* - \ref ViaSpecialParams
*/
#ifndef _MSG_TRANSLATOR_H
#define _MSG_TRANSLATOR_H
#define MY_HF_SEP ": "
#define MY_HF_SEP_LEN 2
#define BRANCH_SEPARATOR '.'
#define WARNING "Warning: 392 "
#define WARNING_LEN (sizeof(WARNING)-1)
#define WARNING_PHRASE " \"Noisy feedback tells: "
#define WARNING_PHRASE_LEN (sizeof(WARNING_PHRASE)-1)
#define MSG_TRANS_SHM_FLAG (1<<0)
#define MSG_TRANS_NOVIA_FLAG (1<<1)
//#define MAX_CONTENT_LEN_BUF INT2STR_MAX_LEN /* see ut.h/int2str() */
#include "parser/msg_parser.h"
#include "ip_addr.h"
/*! \brief point to some remarkable positions in a SIP message */
struct bookmark {
str to_tag_val;
};
/*! \brief used by via_builder() */
struct hostport {
str* host;
str* port;
};
#define set_hostport(hp, msg) \
do { \
if (!(msg)) \
(hp)->host = NULL; \
else { \
if (((struct sip_msg *)(msg))->set_global_address.s) \
(hp)->host = &(((struct sip_msg *)(msg))->set_global_address); \
else \
(hp)->host = &default_global_address; \
} \
if (!(msg)) \
(hp)->port = NULL; \
else { \
if (((struct sip_msg *)(msg))->set_global_port.s) \
(hp)->port = &(((struct sip_msg *)(msg))->set_global_port); \
else \
(hp)->port = &default_global_port; \
} \
} while (0)
char * build_req_buf_from_sip_req ( struct sip_msg* msg,
unsigned int *returned_len, struct socket_info* send_sock,
int proto, unsigned int flags);
char * build_res_buf_from_sip_res( struct sip_msg* msg,
unsigned int *returned_len, struct socket_info *sock);
char * build_res_buf_from_sip_req( unsigned int code,
str *text,
str *new_tag,
struct sip_msg* msg,
unsigned int *returned_len,
struct bookmark *bmark);
char* via_builder( unsigned int *len,
struct socket_info* send_sock,
str *branch, str* extra_params, int proto, struct hostport *hp );
int branch_builder( unsigned int hash_index,
/* only either parameter useful */
unsigned int label, char * char_v,
int branch,
/* output value: string and actual length */
char *branch_str, int *len );
/* check if IP address in Via != source IP address of signaling */
int received_test( struct sip_msg *msg );
char *construct_uri(str *protocol,str *username,str *domain,str *port,
str *params,int *len);
int lumps_len(struct sip_msg* msg, struct lump* lumps,
struct socket_info* send_sock);
void process_lumps( struct sip_msg* msg, struct lump* lumps, char* new_buf,
unsigned int* new_buf_offs, unsigned int* orig_offs, struct socket_info* send_sock);
int is_del_via1_lump(struct sip_msg* msg);
char* received_builder(struct sip_msg *msg, unsigned int *received_len);
char* rport_builder(struct sip_msg *msg, unsigned int *rport_len);
#endif