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,
18 #define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
20 struct sdp_media_type {
23 enum sip_expectation_classes class;
26 #define SDP_MEDIA_TYPE(__name, __class) \
29 .len = sizeof(__name) - 1, \
36 int (*request)(struct sk_buff *skb,
37 const char **dptr, unsigned int *datalen,
39 int (*response)(struct sk_buff *skb,
40 const char **dptr, unsigned int *datalen,
41 unsigned int cseq, unsigned int code);
44 #define SIP_HANDLER(__method, __request, __response) \
46 .method = (__method), \
47 .len = sizeof(__method) - 1, \
48 .request = (__request), \
49 .response = (__response), \
59 int (*match_len)(const struct nf_conn *ct,
60 const char *dptr, const char *limit,
64 #define __SIP_HDR(__name, __cname, __search, __match) \
67 .len = sizeof(__name) - 1, \
69 .clen = (__cname) ? sizeof(__cname) - 1 : 0, \
70 .search = (__search), \
71 .slen = (__search) ? sizeof(__search) - 1 : 0, \
72 .match_len = (__match), \
75 #define SIP_HDR(__name, __cname, __search, __match) \
76 __SIP_HDR(__name, __cname, __search, __match)
78 #define SDP_HDR(__name, __search, __match) \
79 __SIP_HDR(__name, NULL, __search, __match)
81 enum sip_header_types {
88 SIP_HDR_CONTENT_LENGTH,
91 enum sdp_header_types {
95 SDP_HDR_CONNECTION_IP4,
97 SDP_HDR_CONNECTION_IP6,
101 extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
103 unsigned int *datalen);
104 extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
106 unsigned int *datalen,
107 struct nf_conntrack_expect *exp,
108 unsigned int matchoff,
109 unsigned int matchlen);
110 extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb,
112 unsigned int dataoff,
113 unsigned int *datalen,
114 enum sdp_header_types type,
115 enum sdp_header_types term,
116 const union nf_inet_addr *addr);
117 extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb,
119 unsigned int dataoff,
120 unsigned int *datalen,
121 const union nf_inet_addr *addr);
122 extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb,
124 unsigned int *datalen,
125 struct nf_conntrack_expect *rtp_exp,
126 struct nf_conntrack_expect *rtcp_exp,
127 unsigned int mediaoff,
128 unsigned int medialen,
129 union nf_inet_addr *rtp_addr);
131 extern int ct_sip_parse_request(const struct nf_conn *ct,
132 const char *dptr, unsigned int datalen,
133 unsigned int *matchoff, unsigned int *matchlen,
134 union nf_inet_addr *addr, __be16 *port);
135 extern int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
136 unsigned int dataoff, unsigned int datalen,
137 enum sip_header_types type,
138 unsigned int *matchoff, unsigned int *matchlen);
139 extern int ct_sip_parse_header_uri(const struct nf_conn *ct, const char *dptr,
140 unsigned int *dataoff, unsigned int datalen,
141 enum sip_header_types type, int *in_header,
142 unsigned int *matchoff, unsigned int *matchlen,
143 union nf_inet_addr *addr, __be16 *port);
144 extern int ct_sip_parse_address_param(const struct nf_conn *ct, const char *dptr,
145 unsigned int dataoff, unsigned int datalen,
147 unsigned int *matchoff, unsigned int *matchlen,
148 union nf_inet_addr *addr);
149 extern int ct_sip_parse_numerical_param(const struct nf_conn *ct, const char *dptr,
150 unsigned int off, unsigned int datalen,
152 unsigned int *matchoff, unsigned int *matchen,
155 extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
156 unsigned int dataoff, unsigned int datalen,
157 enum sdp_header_types type,
158 enum sdp_header_types term,
159 unsigned int *matchoff, unsigned int *matchlen);
161 #endif /* __KERNEL__ */
162 #endif /* __NF_CONNTRACK_SIP_H__ */