]>
Commit | Line | Data |
---|---|---|
9fafcd7b PM |
1 | #ifndef __NF_CONNTRACK_SIP_H__ |
2 | #define __NF_CONNTRACK_SIP_H__ | |
3 | #ifdef __KERNEL__ | |
4 | ||
5 | #define SIP_PORT 5060 | |
6 | #define SIP_TIMEOUT 3600 | |
7 | ||
0f32a40f PM |
8 | struct nf_ct_sip_master { |
9 | unsigned int register_cseq; | |
10 | }; | |
11 | ||
12 | enum sip_expectation_classes { | |
13 | SIP_EXPECT_SIGNALLING, | |
14 | SIP_EXPECT_AUDIO, | |
15 | __SIP_EXPECT_MAX | |
16 | }; | |
17 | #define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1) | |
18 | ||
30f33e6d PM |
19 | struct sip_handler { |
20 | const char *method; | |
21 | unsigned int len; | |
22 | int (*request)(struct sk_buff *skb, | |
23 | const char **dptr, unsigned int *datalen, | |
24 | unsigned int cseq); | |
25 | int (*response)(struct sk_buff *skb, | |
26 | const char **dptr, unsigned int *datalen, | |
27 | unsigned int cseq, unsigned int code); | |
28 | }; | |
29 | ||
30 | #define SIP_HANDLER(__method, __request, __response) \ | |
31 | { \ | |
32 | .method = (__method), \ | |
33 | .len = sizeof(__method) - 1, \ | |
34 | .request = (__request), \ | |
35 | .response = (__response), \ | |
36 | } | |
37 | ||
3e9b4600 PM |
38 | struct sip_header { |
39 | const char *name; | |
40 | const char *cname; | |
41 | const char *search; | |
42 | unsigned int len; | |
43 | unsigned int clen; | |
44 | unsigned int slen; | |
45 | int (*match_len)(const struct nf_conn *ct, | |
46 | const char *dptr, const char *limit, | |
47 | int *shift); | |
48 | }; | |
49 | ||
50 | #define __SIP_HDR(__name, __cname, __search, __match) \ | |
51 | { \ | |
52 | .name = (__name), \ | |
53 | .len = sizeof(__name) - 1, \ | |
54 | .cname = (__cname), \ | |
55 | .clen = (__cname) ? sizeof(__cname) - 1 : 0, \ | |
56 | .search = (__search), \ | |
57 | .slen = (__search) ? sizeof(__search) - 1 : 0, \ | |
58 | .match_len = (__match), \ | |
59 | } | |
60 | ||
ea45f12a PM |
61 | #define SIP_HDR(__name, __cname, __search, __match) \ |
62 | __SIP_HDR(__name, __cname, __search, __match) | |
63 | ||
3e9b4600 PM |
64 | #define SDP_HDR(__name, __search, __match) \ |
65 | __SIP_HDR(__name, NULL, __search, __match) | |
66 | ||
ea45f12a | 67 | enum sip_header_types { |
30f33e6d | 68 | SIP_HDR_CSEQ, |
ea45f12a PM |
69 | SIP_HDR_FROM, |
70 | SIP_HDR_TO, | |
71 | SIP_HDR_CONTACT, | |
72 | SIP_HDR_VIA, | |
0f32a40f | 73 | SIP_HDR_EXPIRES, |
ea45f12a PM |
74 | SIP_HDR_CONTENT_LENGTH, |
75 | }; | |
76 | ||
3e9b4600 PM |
77 | enum sdp_header_types { |
78 | SDP_HDR_UNSPEC, | |
79 | SDP_HDR_VERSION, | |
80 | SDP_HDR_OWNER_IP4, | |
81 | SDP_HDR_CONNECTION_IP4, | |
82 | SDP_HDR_OWNER_IP6, | |
83 | SDP_HDR_CONNECTION_IP6, | |
84 | SDP_HDR_MEDIA, | |
9fafcd7b PM |
85 | }; |
86 | ||
3db05fea | 87 | extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb, |
2a6cfb22 PM |
88 | const char **dptr, |
89 | unsigned int *datalen); | |
0f32a40f PM |
90 | extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb, |
91 | const char **dptr, | |
92 | unsigned int *datalen, | |
93 | struct nf_conntrack_expect *exp, | |
94 | unsigned int matchoff, | |
95 | unsigned int matchlen); | |
3db05fea | 96 | extern unsigned int (*nf_nat_sdp_hook)(struct sk_buff *skb, |
2a6cfb22 | 97 | const char **dptr, |
212440a7 | 98 | unsigned int *datalen, |
a9c1d359 PM |
99 | struct nf_conntrack_expect *rtp_exp, |
100 | struct nf_conntrack_expect *rtcp_exp); | |
9fafcd7b | 101 | |
ac367740 PM |
102 | extern int ct_sip_parse_request(const struct nf_conn *ct, |
103 | const char *dptr, unsigned int datalen, | |
624f8b7b PM |
104 | unsigned int *matchoff, unsigned int *matchlen, |
105 | union nf_inet_addr *addr, __be16 *port); | |
ea45f12a PM |
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); | |
05e3ced2 PM |
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); | |
2bbb2116 PM |
115 | extern int ct_sip_parse_address_param(const struct nf_conn *ct, const char *dptr, |
116 | unsigned int dataoff, unsigned int datalen, | |
117 | const char *name, | |
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, | |
122 | const char *name, | |
123 | unsigned int *matchoff, unsigned int *matchen, | |
124 | unsigned int *val); | |
3e9b4600 PM |
125 | |
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); | |
131 | ||
9fafcd7b PM |
132 | #endif /* __KERNEL__ */ |
133 | #endif /* __NF_CONNTRACK_SIP_H__ */ |