1 #ifndef __NF_CONNTRACK_SIP_H__
2 #define __NF_CONNTRACK_SIP_H__
6 #define SIP_TIMEOUT 3600
8 struct nf_ct_sip_master
{
9 unsigned int register_cseq
;
10 unsigned int invite_cseq
;
13 enum sip_expectation_classes
{
14 SIP_EXPECT_SIGNALLING
,
19 #define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
21 struct sdp_media_type
{
24 enum sip_expectation_classes
class;
27 #define SDP_MEDIA_TYPE(__name, __class) \
30 .len = sizeof(__name) - 1, \
37 int (*request
)(struct sk_buff
*skb
,
38 const char **dptr
, unsigned int *datalen
,
40 int (*response
)(struct sk_buff
*skb
,
41 const char **dptr
, unsigned int *datalen
,
42 unsigned int cseq
, unsigned int code
);
45 #define SIP_HANDLER(__method, __request, __response) \
47 .method = (__method), \
48 .len = sizeof(__method) - 1, \
49 .request = (__request), \
50 .response = (__response), \
60 int (*match_len
)(const struct nf_conn
*ct
,
61 const char *dptr
, const char *limit
,
65 #define __SIP_HDR(__name, __cname, __search, __match) \
68 .len = sizeof(__name) - 1, \
70 .clen = (__cname) ? sizeof(__cname) - 1 : 0, \
71 .search = (__search), \
72 .slen = (__search) ? sizeof(__search) - 1 : 0, \
73 .match_len = (__match), \
76 #define SIP_HDR(__name, __cname, __search, __match) \
77 __SIP_HDR(__name, __cname, __search, __match)
79 #define SDP_HDR(__name, __search, __match) \
80 __SIP_HDR(__name, NULL, __search, __match)
82 enum sip_header_types
{
89 SIP_HDR_CONTENT_LENGTH
,
92 enum sdp_header_types
{
96 SDP_HDR_CONNECTION_IP4
,
98 SDP_HDR_CONNECTION_IP6
,
102 extern unsigned int (*nf_nat_sip_hook
)(struct sk_buff
*skb
,
104 unsigned int *datalen
);
105 extern unsigned int (*nf_nat_sip_expect_hook
)(struct sk_buff
*skb
,
107 unsigned int *datalen
,
108 struct nf_conntrack_expect
*exp
,
109 unsigned int matchoff
,
110 unsigned int matchlen
);
111 extern unsigned int (*nf_nat_sdp_addr_hook
)(struct sk_buff
*skb
,
113 unsigned int dataoff
,
114 unsigned int *datalen
,
115 enum sdp_header_types type
,
116 enum sdp_header_types term
,
117 const union nf_inet_addr
*addr
);
118 extern unsigned int (*nf_nat_sdp_port_hook
)(struct sk_buff
*skb
,
120 unsigned int *datalen
,
121 unsigned int matchoff
,
122 unsigned int matchlen
,
124 extern unsigned int (*nf_nat_sdp_session_hook
)(struct sk_buff
*skb
,
126 unsigned int dataoff
,
127 unsigned int *datalen
,
128 const union nf_inet_addr
*addr
);
129 extern unsigned int (*nf_nat_sdp_media_hook
)(struct sk_buff
*skb
,
131 unsigned int *datalen
,
132 struct nf_conntrack_expect
*rtp_exp
,
133 struct nf_conntrack_expect
*rtcp_exp
,
134 unsigned int mediaoff
,
135 unsigned int medialen
,
136 union nf_inet_addr
*rtp_addr
);
138 extern int ct_sip_parse_request(const struct nf_conn
*ct
,
139 const char *dptr
, unsigned int datalen
,
140 unsigned int *matchoff
, unsigned int *matchlen
,
141 union nf_inet_addr
*addr
, __be16
*port
);
142 extern int ct_sip_get_header(const struct nf_conn
*ct
, const char *dptr
,
143 unsigned int dataoff
, unsigned int datalen
,
144 enum sip_header_types type
,
145 unsigned int *matchoff
, unsigned int *matchlen
);
146 extern int ct_sip_parse_header_uri(const struct nf_conn
*ct
, const char *dptr
,
147 unsigned int *dataoff
, unsigned int datalen
,
148 enum sip_header_types type
, int *in_header
,
149 unsigned int *matchoff
, unsigned int *matchlen
,
150 union nf_inet_addr
*addr
, __be16
*port
);
151 extern int ct_sip_parse_address_param(const struct nf_conn
*ct
, const char *dptr
,
152 unsigned int dataoff
, unsigned int datalen
,
154 unsigned int *matchoff
, unsigned int *matchlen
,
155 union nf_inet_addr
*addr
);
156 extern int ct_sip_parse_numerical_param(const struct nf_conn
*ct
, const char *dptr
,
157 unsigned int off
, unsigned int datalen
,
159 unsigned int *matchoff
, unsigned int *matchen
,
162 extern int ct_sip_get_sdp_header(const struct nf_conn
*ct
, const char *dptr
,
163 unsigned int dataoff
, unsigned int datalen
,
164 enum sdp_header_types type
,
165 enum sdp_header_types term
,
166 unsigned int *matchoff
, unsigned int *matchlen
);
168 #endif /* __KERNEL__ */
169 #endif /* __NF_CONNTRACK_SIP_H__ */