[NETFILTER]: nf_conntrack_sip: add seperate SDP header parsing function
[pandora-kernel.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 enum sip_header_pos {
9         POS_REG_REQ_URI,
10         POS_REQ_URI,
11         POS_FROM,
12         POS_TO,
13         POS_VIA,
14         POS_CONTACT,
15         POS_CONTENT,
16 };
17
18 struct sip_header {
19         const char      *name;
20         const char      *cname;
21         const char      *search;
22         unsigned int    len;
23         unsigned int    clen;
24         unsigned int    slen;
25         int             (*match_len)(const struct nf_conn *ct,
26                                      const char *dptr, const char *limit,
27                                      int *shift);
28 };
29
30 #define __SIP_HDR(__name, __cname, __search, __match)                   \
31 {                                                                       \
32         .name           = (__name),                                     \
33         .len            = sizeof(__name) - 1,                           \
34         .cname          = (__cname),                                    \
35         .clen           = (__cname) ? sizeof(__cname) - 1 : 0,          \
36         .search         = (__search),                                   \
37         .slen           = (__search) ? sizeof(__search) - 1 : 0,        \
38         .match_len      = (__match),                                    \
39 }
40
41 #define SDP_HDR(__name, __search, __match) \
42         __SIP_HDR(__name, NULL, __search, __match)
43
44 enum sdp_header_types {
45         SDP_HDR_UNSPEC,
46         SDP_HDR_VERSION,
47         SDP_HDR_OWNER_IP4,
48         SDP_HDR_CONNECTION_IP4,
49         SDP_HDR_OWNER_IP6,
50         SDP_HDR_CONNECTION_IP6,
51         SDP_HDR_MEDIA,
52 };
53
54 extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
55                                        const char **dptr,
56                                        unsigned int *datalen);
57 extern unsigned int (*nf_nat_sdp_hook)(struct sk_buff *skb,
58                                        const char **dptr,
59                                        unsigned int *datalen,
60                                        struct nf_conntrack_expect *exp);
61
62 extern int ct_sip_get_info(const struct nf_conn *ct, const char *dptr,
63                            size_t dlen, unsigned int *matchoff,
64                            unsigned int *matchlen, enum sip_header_pos pos);
65 extern int ct_sip_lnlen(const char *line, const char *limit);
66 extern const char *ct_sip_search(const char *needle, const char *haystack,
67                                  size_t needle_len, size_t haystack_len,
68                                  int case_sensitive);
69
70 extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
71                                  unsigned int dataoff, unsigned int datalen,
72                                  enum sdp_header_types type,
73                                  enum sdp_header_types term,
74                                  unsigned int *matchoff, unsigned int *matchlen);
75
76 #endif /* __KERNEL__ */
77 #endif /* __NF_CONNTRACK_SIP_H__ */