modules/sipcapture HEPv3 implementation. ALPHA!!! The final version will be after...
[sip-router] / modules / sipcapture / sipcapture.h
1 /*
2  * $Id$
3  *
4  * hep related structure
5  *
6  * Copyright (C) 2011 Alexandr Dubovikov (QSC AG) (alexandr.dubovikov@gmail.com)
7  *
8  * This file is part of Kamailio, a free SIP server.
9  *
10  * Kamailio is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version
14  *
15  * Kamailio is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23  *
24  */
25
26 #ifdef __OS_solaris
27 typedef uint8_t u_int8_t;
28 typedef uint16_t u_int16_t;
29 #define IPPROTO_IPIP IPPROTO_ENCAP /* Solaris IPIP protocol has name ENCAP */
30 #endif
31
32 struct _sipcapture_object {
33         str method;
34         str reply_reason;
35         str ruri;
36         str ruri_user;
37         str from_user;
38         str from_tag;
39         str to_user;
40         str to_tag;
41         str pid_user;
42         str contact_user;
43         str auth_user;
44         str callid;
45         str callid_aleg;
46         str via_1;
47         str via_1_branch;
48         str cseq;
49         str diversion;
50         str reason;
51         str content_type;
52         str authorization;
53         str user_agent;
54         str source_ip;
55         int source_port;
56         str destination_ip;
57         int destination_port;
58         str contact_ip;
59         int contact_port;
60         str originator_ip;
61         int originator_port;
62         int proto;
63         int family;
64         str rtp_stat;
65         int type;
66         long long tmstamp;
67         str node;       
68         str msg;        
69 #ifdef STATISTICS
70         stat_var *stat;
71 #endif
72 };
73
74 struct hep_hdr{
75     u_int8_t hp_v;            /* version */
76     u_int8_t hp_l;            /* length */
77     u_int8_t hp_f;            /* family */
78     u_int8_t hp_p;            /* protocol */
79     u_int16_t hp_sport;       /* source port */
80     u_int16_t hp_dport;       /* destination port */
81 };
82
83 struct hep_iphdr{
84         struct in_addr hp_src;
85         struct in_addr hp_dst;      /* source and dest address */
86 };
87
88 struct hep_timehdr{
89    u_int32_t tv_sec;         /* seconds */
90    u_int32_t tv_usec;        /* useconds */
91    u_int16_t captid;          /* Capture ID node */
92 };
93
94 #ifdef USE_IPV6
95 struct hep_ip6hdr {
96         struct in6_addr hp6_src;        /* source address */
97         struct in6_addr hp6_dst;        /* destination address */
98 };
99 #endif
100
101 /* HEPv3 types */
102
103 struct hep_chunk {
104        u_int16_t vendor_id;
105        u_int16_t type_id;
106        u_int16_t length;
107 } __attribute__((packed));
108
109 typedef struct hep_chunk hep_chunk_t;
110
111 struct hep_chunk_uint8 {
112        hep_chunk_t chunk;
113        u_int8_t data;
114 } __attribute__((packed));
115
116 typedef struct hep_chunk_uint8 hep_chunk_uint8_t;
117
118 struct hep_chunk_uint16 {
119        hep_chunk_t chunk;
120        u_int16_t data;
121 } __attribute__((packed));
122
123 typedef struct hep_chunk_uint16 hep_chunk_uint16_t;
124
125 struct hep_chunk_uint32 {
126        hep_chunk_t chunk;
127        u_int32_t data;
128 } __attribute__((packed));
129
130 typedef struct hep_chunk_uint32 hep_chunk_uint32_t;
131
132 struct hep_chunk_str {
133        hep_chunk_t chunk;
134        char *data;
135 } __attribute__((packed));
136
137 typedef struct hep_chunk_str hep_chunk_str_t;
138
139 struct hep_chunk_ip4 {
140        hep_chunk_t chunk;
141        struct in_addr data;
142 } __attribute__((packed));
143
144 typedef struct hep_chunk_ip4 hep_chunk_ip4_t;
145
146 #ifdef USE_IPV6
147 struct hep_chunk_ip6 {
148        hep_chunk_t chunk;
149        struct in6_addr data;
150 } __attribute__((packed));
151 #endif
152
153 typedef struct hep_chunk_ip6 hep_chunk_ip6_t;
154
155 struct hep_chunk_payload {
156     hep_chunk_t chunk;
157     char *data;
158 } __attribute__((packed));
159
160 typedef struct hep_chunk_payload hep_chunk_payload_t;
161
162
163 struct hep_ctrl {
164     char id[4];
165     u_int16_t length;
166 } __attribute__((packed));
167
168 typedef struct hep_ctrl hep_ctrl_t;
169
170
171 /* Structure of HEP */
172
173 struct hep_generic_recv {
174         hep_ctrl_t         *header;
175         hep_chunk_uint8_t  *ip_family;
176         hep_chunk_uint8_t  *ip_proto;
177         hep_chunk_uint16_t *src_port;
178         hep_chunk_uint16_t *dst_port;
179         hep_chunk_uint32_t *time_sec;
180         hep_chunk_uint32_t *time_usec;
181         hep_chunk_ip4_t    *hep_src_ip4;
182         hep_chunk_ip4_t     *hep_dst_ip4;
183 #ifdef USE_IPV6
184         hep_chunk_ip6_t    *hep_src_ip6;
185         hep_chunk_ip6_t    *hep_dst_ip6;
186 #endif                
187         hep_chunk_uint8_t  *proto_t;
188         hep_chunk_uint32_t *capt_id;
189         hep_chunk_uint16_t *keep_tm;
190         hep_chunk_str_t    *auth_key;        
191         hep_chunk_t   *payload_chunk;
192 } __attribute__((packed));
193
194 typedef struct hep_generic_recv hep_generic_recv_t;