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,
20 #define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
22 struct sdp_media_type {
25 enum sip_expectation_classes class;
28 #define SDP_MEDIA_TYPE(__name, __class) \
31 .len = sizeof(__name) - 1, \
38 int (*request)(struct sk_buff *skb, unsigned int dataoff,
39 const char **dptr, unsigned int *datalen,
41 int (*response)(struct sk_buff *skb, unsigned int dataoff,
42 const char **dptr, unsigned int *datalen,
43 unsigned int cseq, unsigned int code);
46 #define SIP_HANDLER(__method, __request, __response) \
48 .method = (__method), \
49 .len = sizeof(__method) - 1, \
50 .request = (__request), \
51 .response = (__response), \
61 int (*match_len)(const struct nf_conn *ct,
62 const char *dptr, const char *limit,
66 #define __SIP_HDR(__name, __cname, __search, __match) \
69 .len = sizeof(__name) - 1, \
71 .clen = (__cname) ? sizeof(__cname) - 1 : 0, \
72 .search = (__search), \
73 .slen = (__search) ? sizeof(__search) - 1 : 0, \
74 .match_len = (__match), \
77 #define SIP_HDR(__name, __cname, __search, __match) \
78 __SIP_HDR(__name, __cname, __search, __match)
80 #define SDP_HDR(__name, __search, __match) \
81 __SIP_HDR(__name, NULL, __search, __match)
83 enum sip_header_types {
91 SIP_HDR_CONTENT_LENGTH,
95 enum sdp_header_types {
99 SDP_HDR_CONNECTION_IP4,
101 SDP_HDR_CONNECTION_IP6,
105 extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
106 unsigned int dataoff,
108 unsigned int *datalen);
109 extern void (*nf_nat_sip_seq_adjust_hook)(struct sk_buff *skb, s16 off);
110 extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
111 unsigned int dataoff,
113 unsigned int *datalen,
114 struct nf_conntrack_expect *exp,
115 unsigned int matchoff,
116 unsigned int matchlen);
117 extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb,
118 unsigned int dataoff,
120 unsigned int *datalen,
122 enum sdp_header_types type,
123 enum sdp_header_types term,
124 const union nf_inet_addr *addr);
125 extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb,
126 unsigned int dataoff,
128 unsigned int *datalen,
129 unsigned int matchoff,
130 unsigned int matchlen,
132 extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb,
133 unsigned int dataoff,
135 unsigned int *datalen,
137 const union nf_inet_addr *addr);
138 extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb,
139 unsigned int dataoff,
141 unsigned int *datalen,
142 struct nf_conntrack_expect *rtp_exp,
143 struct nf_conntrack_expect *rtcp_exp,
144 unsigned int mediaoff,
145 unsigned int medialen,
146 union nf_inet_addr *rtp_addr);
148 extern int ct_sip_parse_request(const struct nf_conn *ct,
149 const char *dptr, unsigned int datalen,
150 unsigned int *matchoff, unsigned int *matchlen,
151 union nf_inet_addr *addr, __be16 *port);
152 extern int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
153 unsigned int dataoff, unsigned int datalen,
154 enum sip_header_types type,
155 unsigned int *matchoff, unsigned int *matchlen);
156 extern int ct_sip_parse_header_uri(const struct nf_conn *ct, const char *dptr,
157 unsigned int *dataoff, unsigned int datalen,
158 enum sip_header_types type, int *in_header,
159 unsigned int *matchoff, unsigned int *matchlen,
160 union nf_inet_addr *addr, __be16 *port);
161 extern int ct_sip_parse_address_param(const struct nf_conn *ct, const char *dptr,
162 unsigned int dataoff, unsigned int datalen,
164 unsigned int *matchoff, unsigned int *matchlen,
165 union nf_inet_addr *addr);
166 extern int ct_sip_parse_numerical_param(const struct nf_conn *ct, const char *dptr,
167 unsigned int off, unsigned int datalen,
169 unsigned int *matchoff, unsigned int *matchen,
172 extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
173 unsigned int dataoff, unsigned int datalen,
174 enum sdp_header_types type,
175 enum sdp_header_types term,
176 unsigned int *matchoff, unsigned int *matchlen);
178 #endif /* __KERNEL__ */
179 #endif /* __NF_CONNTRACK_SIP_H__ */