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, unsigned int dataoff,
38 const char **dptr, unsigned int *datalen,
40 int (*response)(struct sk_buff *skb, unsigned int dataoff,
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 {
90 SIP_HDR_CONTENT_LENGTH,
93 enum sdp_header_types {
97 SDP_HDR_CONNECTION_IP4,
99 SDP_HDR_CONNECTION_IP6,
103 extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
104 unsigned int dataoff,
106 unsigned int *datalen);
107 extern void (*nf_nat_sip_seq_adjust_hook)(struct sk_buff *skb, s16 off);
108 extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
109 unsigned int dataoff,
111 unsigned int *datalen,
112 struct nf_conntrack_expect *exp,
113 unsigned int matchoff,
114 unsigned int matchlen);
115 extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb,
116 unsigned int dataoff,
118 unsigned int *datalen,
120 enum sdp_header_types type,
121 enum sdp_header_types term,
122 const union nf_inet_addr *addr);
123 extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb,
124 unsigned int dataoff,
126 unsigned int *datalen,
127 unsigned int matchoff,
128 unsigned int matchlen,
130 extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb,
131 unsigned int dataoff,
133 unsigned int *datalen,
135 const union nf_inet_addr *addr);
136 extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb,
137 unsigned int dataoff,
139 unsigned int *datalen,
140 struct nf_conntrack_expect *rtp_exp,
141 struct nf_conntrack_expect *rtcp_exp,
142 unsigned int mediaoff,
143 unsigned int medialen,
144 union nf_inet_addr *rtp_addr);
146 extern int ct_sip_parse_request(const struct nf_conn *ct,
147 const char *dptr, unsigned int datalen,
148 unsigned int *matchoff, unsigned int *matchlen,
149 union nf_inet_addr *addr, __be16 *port);
150 extern int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
151 unsigned int dataoff, unsigned int datalen,
152 enum sip_header_types type,
153 unsigned int *matchoff, unsigned int *matchlen);
154 extern int ct_sip_parse_header_uri(const struct nf_conn *ct, const char *dptr,
155 unsigned int *dataoff, unsigned int datalen,
156 enum sip_header_types type, int *in_header,
157 unsigned int *matchoff, unsigned int *matchlen,
158 union nf_inet_addr *addr, __be16 *port);
159 extern int ct_sip_parse_address_param(const struct nf_conn *ct, const char *dptr,
160 unsigned int dataoff, unsigned int datalen,
162 unsigned int *matchoff, unsigned int *matchlen,
163 union nf_inet_addr *addr);
164 extern int ct_sip_parse_numerical_param(const struct nf_conn *ct, const char *dptr,
165 unsigned int off, unsigned int datalen,
167 unsigned int *matchoff, unsigned int *matchen,
170 extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
171 unsigned int dataoff, unsigned int datalen,
172 enum sdp_header_types type,
173 enum sdp_header_types term,
174 unsigned int *matchoff, unsigned int *matchlen);
176 #endif /* __KERNEL__ */
177 #endif /* __NF_CONNTRACK_SIP_H__ */