Module: kamailio
Branch: 5.0
Commit: 3a8d3892e2e924c308c4be011d6cd39c840351ba
URL: 
https://github.com/kamailio/kamailio/commit/3a8d3892e2e924c308c4be011d6cd39c840351ba

Author: Giacomo Vacca <giacomo.va...@gmail.com>
Committer: Giacomo Vacca <giacomo.va...@gmail.com>
Date: 2017-02-23T17:59:54+01:00

sipcapture: add macros to pack HEPv3 chunks

(cherry picked from commit 281e8e980c70f38218844d1da0c5e257399ffda3)

---

Modified: src/modules/sipcapture/hep.h

---

Diff:  
https://github.com/kamailio/kamailio/commit/3a8d3892e2e924c308c4be011d6cd39c840351ba.diff
Patch: 
https://github.com/kamailio/kamailio/commit/3a8d3892e2e924c308c4be011d6cd39c840351ba.patch

---

diff --git a/src/modules/sipcapture/hep.h b/src/modules/sipcapture/hep.h
index 10812a2..e4ff77b 100644
--- a/src/modules/sipcapture/hep.h
+++ b/src/modules/sipcapture/hep.h
@@ -177,5 +177,52 @@ struct hep_generic_recv {
 
 typedef struct hep_generic_recv hep_generic_recv_t;
 
+#define HEP3_PACK_INIT(buf) \
+               union { \
+                       hep_chunk_uint8_t chunk8; \
+                       hep_chunk_uint16_t chunk16; \
+                       hep_chunk_uint32_t chunk32; \
+                       hep_chunk_t chunkpl; \
+                       uint16_t len; \
+               } _tmpu; \
+               char *_tmp_p = (buf); \
+               memcpy(_tmp_p, "HEP3", 4); \
+               _tmp_p += 4 + 2/* skip length */;
+
+#define HEP3_PACK_FINALIZE(buf, lenp) \
+               do { \
+                       _tmpu.len = htons(_tmp_p - (char *)(buf)); \
+                       memcpy((void *)(&(((hep_ctrl_t *)(buf))->length)), 
(void*)&_tmpu.len, 2); \
+                       *lenp = _tmp_p - (char *)(buf); \
+               } while (0)
+
+#define _HEP3_PACK_CHUNK_GENERIC(type, tmpvar, vid, tid, val) \
+               do { \
+                       (tmpvar).chunk.vendor_id = htons(vid); \
+                       (tmpvar).chunk.type_id = htons(tid); \
+                       (tmpvar).chunk.length = htons(sizeof(type)); \
+                       (tmpvar).data = (val); \
+                       memcpy(_tmp_p, (void *) &(tmpvar), sizeof(type)); \
+                       _tmp_p += sizeof(type); \
+               } while (0)
+
+#define HEP3_PACK_CHUNK_UINT8(vid, tid, val) 
_HEP3_PACK_CHUNK_GENERIC(hep_chunk_uint8_t, _tmpu.chunk8, vid, tid, val)
+#define HEP3_PACK_CHUNK_UINT16(vid, tid, val) 
_HEP3_PACK_CHUNK_GENERIC(hep_chunk_uint16_t, _tmpu.chunk16, vid, tid, 
htons(val))
+#define HEP3_PACK_CHUNK_UINT16_NBO(vid, tid, val) 
_HEP3_PACK_CHUNK_GENERIC(hep_chunk_uint16_t, _tmpu.chunk16, vid, tid, (val))
+#define HEP3_PACK_CHUNK_UINT32(vid, tid, val) 
_HEP3_PACK_CHUNK_GENERIC(hep_chunk_uint32_t, _tmpu.chunk32, vid, tid, 
htonl(val))
+#define HEP3_PACK_CHUNK_UINT32_NBO(vid, tid, val) 
_HEP3_PACK_CHUNK_GENERIC(hep_chunk_uint32_t, _tmpu.chunk32, vid, tid, (val))
+
+#define HEP3_PACK_CHUNK_DATA(vid, tid, val, len) \
+               do { \
+                       _tmpu.chunkpl.vendor_id = htons(vid); \
+                       _tmpu.chunkpl.type_id = htons(tid); \
+                       _tmpu.chunkpl.length = htons(sizeof(hep_chunk_t) + 
(len)); \
+                       memcpy(_tmp_p, (void *) &_tmpu.chunkpl, 
sizeof(hep_chunk_t)); \
+                       _tmp_p += sizeof(hep_chunk_t); \
+                       memcpy(_tmp_p, (void *) (val), len); \
+                       _tmp_p += len; \
+               } while (0)
+
+#define HEP3_PACK_CHUNK_IP6(vid, tid, paddr) HEP3_PACK_CHUNK_DATA(vid, tid, 
paddr, sizeof(struct in6_addr))
 
 #endif


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to