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;
12 enum sip_expectation_classes {
13 SIP_EXPECT_SIGNALLING,
17 #define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
22 int (*request)(struct sk_buff *skb,
23 const char **dptr, unsigned int *datalen,
25 int (*response)(struct sk_buff *skb,
26 const char **dptr, unsigned int *datalen,
27 unsigned int cseq, unsigned int code);
30 #define SIP_HANDLER(__method, __request, __response) \
32 .method = (__method), \
33 .len = sizeof(__method) - 1, \
34 .request = (__request), \
35 .response = (__response), \
45 int (*match_len)(const struct nf_conn *ct,
46 const char *dptr, const char *limit,
50 #define __SIP_HDR(__name, __cname, __search, __match) \
53 .len = sizeof(__name) - 1, \
55 .clen = (__cname) ? sizeof(__cname) - 1 : 0, \
56 .search = (__search), \
57 .slen = (__search) ? sizeof(__search) - 1 : 0, \
58 .match_len = (__match), \
61 #define SIP_HDR(__name, __cname, __search, __match) \
62 __SIP_HDR(__name, __cname, __search, __match)
64 #define SDP_HDR(__name, __search, __match) \
65 __SIP_HDR(__name, NULL, __search, __match)
67 enum sip_header_types {
74 SIP_HDR_CONTENT_LENGTH,
77 enum sdp_header_types {
81 SDP_HDR_CONNECTION_IP4,
83 SDP_HDR_CONNECTION_IP6,
87 extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
89 unsigned int *datalen);
90 extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
92 unsigned int *datalen,
93 struct nf_conntrack_expect *exp,
94 unsigned int matchoff,
95 unsigned int matchlen);
96 extern unsigned int (*nf_nat_sdp_hook)(struct sk_buff *skb,
98 unsigned int *datalen,
99 struct nf_conntrack_expect *rtp_exp,
100 struct nf_conntrack_expect *rtcp_exp);
102 extern int ct_sip_parse_request(const struct nf_conn *ct,
103 const char *dptr, unsigned int datalen,
104 unsigned int *matchoff, unsigned int *matchlen,
105 union nf_inet_addr *addr, __be16 *port);
106 extern int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
107 unsigned int dataoff, unsigned int datalen,
108 enum sip_header_types type,
109 unsigned int *matchoff, unsigned int *matchlen);
110 extern int ct_sip_parse_header_uri(const struct nf_conn *ct, const char *dptr,
111 unsigned int *dataoff, unsigned int datalen,
112 enum sip_header_types type, int *in_header,
113 unsigned int *matchoff, unsigned int *matchlen,
114 union nf_inet_addr *addr, __be16 *port);
115 extern int ct_sip_parse_address_param(const struct nf_conn *ct, const char *dptr,
116 unsigned int dataoff, unsigned int datalen,
118 unsigned int *matchoff, unsigned int *matchlen,
119 union nf_inet_addr *addr);
120 extern int ct_sip_parse_numerical_param(const struct nf_conn *ct, const char *dptr,
121 unsigned int off, unsigned int datalen,
123 unsigned int *matchoff, unsigned int *matchen,
126 extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
127 unsigned int dataoff, unsigned int datalen,
128 enum sdp_header_types type,
129 enum sdp_header_types term,
130 unsigned int *matchoff, unsigned int *matchlen);
132 #endif /* __KERNEL__ */
133 #endif /* __NF_CONNTRACK_SIP_H__ */