core, lib, modules: restructured source code tree
[sip-router] / src / modules / sipcapture / hep.h
1 /*
2  * hep related structure
3  *
4  * Copyright (C) 2011-14 Alexandr Dubovikov <alexandr.dubovikov@gmail.com>
5  *
6  * This file is part of Kamailio, a free SIP server.
7  *
8  * Kamailio is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version
12  *
13  * Kamailio is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21  *
22  */
23
24 #ifndef _hep_h
25 #define _hep_h
26
27 #include "../../endianness.h"
28
29 #ifdef __IS_BIG_ENDIAN
30 #define to_le(x) bswap32(x)
31 #else
32 #define to_le(x) (x)
33 #endif
34
35 #ifdef __OS_solaris
36 typedef uint8_t u_int8_t;
37 typedef uint16_t u_int16_t;
38 typedef uint32_t u_int32_t;
39 #define IPPROTO_IPIP IPPROTO_ENCAP /* Solaris IPIP protocol has name ENCAP */
40 #endif
41
42 extern int hep_capture_on;
43 extern int hep_offset;
44 extern char *authkey;
45 extern char *correlation_id;
46
47 /* int hep_msg_received(char * buf, unsigned int len, struct receive_info * ri);*/
48 int hep_msg_received(void *data);
49
50 /* new method for events */
51 int hepv3_message_parse(char *buf, unsigned int len, sip_msg_t* msg);
52 int hepv2_message_parse(char *buf, unsigned int len, sip_msg_t* msg);
53 int hepv3_get_chunk(struct sip_msg *msg, char *buf, unsigned int len, int req_chunk, pv_param_t *param, pv_value_t *res);
54
55
56
57 struct hep_hdr{
58     u_int8_t hp_v;            /* version */
59     u_int8_t hp_l;            /* length */
60     u_int8_t hp_f;            /* family */
61     u_int8_t hp_p;            /* protocol */
62     u_int16_t hp_sport;       /* source port */
63     u_int16_t hp_dport;       /* destination port */
64 };
65
66 struct hep_iphdr{
67         struct in_addr hp_src;
68         struct in_addr hp_dst;      /* source and dest address */
69 };
70
71 struct hep_timehdr{
72    u_int32_t tv_sec;         /* seconds */
73    u_int32_t tv_usec;        /* useconds */
74    u_int16_t captid;          /* Capture ID node */
75 };
76
77 struct hep_timeinfo{
78    u_int32_t tv_sec;         /* seconds */
79    u_int32_t tv_usec;        /* useconds */
80    u_int32_t captid;          /* Capture ID node */
81 };
82
83 struct hep_ip6hdr {
84         struct in6_addr hp6_src;        /* source address */
85         struct in6_addr hp6_dst;        /* destination address */
86 };
87
88 /* HEPv3 types */
89
90 struct hep_chunk {
91        u_int16_t vendor_id;
92        u_int16_t type_id;
93        u_int16_t length;
94 } __attribute__((packed));
95
96 typedef struct hep_chunk hep_chunk_t;
97
98 struct hep_chunk_uint8 {
99        hep_chunk_t chunk;
100        u_int8_t data;
101 } __attribute__((packed));
102
103 typedef struct hep_chunk_uint8 hep_chunk_uint8_t;
104
105 struct hep_chunk_uint16 {
106        hep_chunk_t chunk;
107        u_int16_t data;
108 } __attribute__((packed));
109
110 typedef struct hep_chunk_uint16 hep_chunk_uint16_t;
111
112 struct hep_chunk_uint32 {
113        hep_chunk_t chunk;
114        u_int32_t data;
115 } __attribute__((packed));
116
117 typedef struct hep_chunk_uint32 hep_chunk_uint32_t;
118
119 struct hep_chunk_str {
120        hep_chunk_t chunk;
121        char *data;
122 } __attribute__((packed));
123
124 typedef struct hep_chunk_str hep_chunk_str_t;
125
126 struct hep_chunk_ip4 {
127        hep_chunk_t chunk;
128        struct in_addr data;
129 } __attribute__((packed));
130
131 typedef struct hep_chunk_ip4 hep_chunk_ip4_t;
132
133 struct hep_chunk_ip6 {
134        hep_chunk_t chunk;
135        struct in6_addr data;
136 } __attribute__((packed));
137
138 typedef struct hep_chunk_ip6 hep_chunk_ip6_t;
139
140 struct hep_chunk_payload {
141     hep_chunk_t chunk;
142     char *data;
143 } __attribute__((packed));
144
145 typedef struct hep_chunk_payload hep_chunk_payload_t;
146
147
148 struct hep_ctrl {
149     char id[4];
150     u_int16_t length;
151 } __attribute__((packed));
152
153 typedef struct hep_ctrl hep_ctrl_t;
154
155
156 /* Structure of HEP */
157
158 struct hep_generic_recv {
159         hep_ctrl_t         *header;
160         hep_chunk_uint8_t  *ip_family;
161         hep_chunk_uint8_t  *ip_proto;
162         hep_chunk_uint16_t *src_port;
163         hep_chunk_uint16_t *dst_port;
164         hep_chunk_uint32_t *time_sec;
165         hep_chunk_uint32_t *time_usec;
166         hep_chunk_ip4_t    *hep_src_ip4;
167         hep_chunk_ip4_t     *hep_dst_ip4;
168         hep_chunk_ip6_t    *hep_src_ip6;
169         hep_chunk_ip6_t    *hep_dst_ip6;
170         hep_chunk_uint8_t  *proto_t;
171         hep_chunk_uint32_t *capt_id;
172         hep_chunk_uint16_t *keep_tm;
173         hep_chunk_str_t    *auth_key;
174         hep_chunk_str_t    *correlation_id;        
175         hep_chunk_t   *payload_chunk;
176 } __attribute__((packed));
177
178 typedef struct hep_generic_recv hep_generic_recv_t;
179
180
181 #endif