]> bbs.cooldavid.org Git - net-next-2.6.git/blob - include/linux/netfilter/nf_conntrack_sip.h
[NETFILTER]: nf_conntrack_sip: parse SIP headers properly
[net-next-2.6.git] / include / linux / netfilter / nf_conntrack_sip.h
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
8 struct sip_header {
9         const char      *name;
10         const char      *cname;
11         const char      *search;
12         unsigned int    len;
13         unsigned int    clen;
14         unsigned int    slen;
15         int             (*match_len)(const struct nf_conn *ct,
16                                      const char *dptr, const char *limit,
17                                      int *shift);
18 };
19
20 #define __SIP_HDR(__name, __cname, __search, __match)                   \
21 {                                                                       \
22         .name           = (__name),                                     \
23         .len            = sizeof(__name) - 1,                           \
24         .cname          = (__cname),                                    \
25         .clen           = (__cname) ? sizeof(__cname) - 1 : 0,          \
26         .search         = (__search),                                   \
27         .slen           = (__search) ? sizeof(__search) - 1 : 0,        \
28         .match_len      = (__match),                                    \
29 }
30
31 #define SIP_HDR(__name, __cname, __search, __match) \
32         __SIP_HDR(__name, __cname, __search, __match)
33
34 #define SDP_HDR(__name, __search, __match) \
35         __SIP_HDR(__name, NULL, __search, __match)
36
37 enum sip_header_types {
38         SIP_HDR_FROM,
39         SIP_HDR_TO,
40         SIP_HDR_CONTACT,
41         SIP_HDR_VIA,
42         SIP_HDR_CONTENT_LENGTH,
43 };
44
45 enum sdp_header_types {
46         SDP_HDR_UNSPEC,
47         SDP_HDR_VERSION,
48         SDP_HDR_OWNER_IP4,
49         SDP_HDR_CONNECTION_IP4,
50         SDP_HDR_OWNER_IP6,
51         SDP_HDR_CONNECTION_IP6,
52         SDP_HDR_MEDIA,
53 };
54
55 extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
56                                        const char **dptr,
57                                        unsigned int *datalen);
58 extern unsigned int (*nf_nat_sdp_hook)(struct sk_buff *skb,
59                                        const char **dptr,
60                                        unsigned int *datalen,
61                                        struct nf_conntrack_expect *exp);
62
63 extern int ct_sip_parse_request(const struct nf_conn *ct,
64                                 const char *dptr, unsigned int datalen,
65                                 unsigned int *matchoff, unsigned int *matchlen);
66 extern int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
67                              unsigned int dataoff, unsigned int datalen,
68                              enum sip_header_types type,
69                              unsigned int *matchoff, unsigned int *matchlen);
70
71 extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
72                                  unsigned int dataoff, unsigned int datalen,
73                                  enum sdp_header_types type,
74                                  enum sdp_header_types term,
75                                  unsigned int *matchoff, unsigned int *matchlen);
76
77 #endif /* __KERNEL__ */
78 #endif /* __NF_CONNTRACK_SIP_H__ */