wiretap: add read/write support for Decryption Secrets Block (DSB)
[metze/wireshark/wip.git] / wiretap / wtap_opttypes.c
index 91690d0e6941c472ccbd9c094ee9f938f8ecbbbf..c50879e6a6fd7ec4e5797daaab77f7fefd01e213 100644 (file)
@@ -972,6 +972,27 @@ static void idb_copy_mand(wtap_block_t dest_block, wtap_block_t src_block)
     }
 }
 
+static void dsb_create(wtap_block_t block)
+{
+    block->mandatory_data = g_new0(wtapng_dsb_mandatory_t, 1);
+}
+
+static void dsb_free_mand(wtap_block_t block)
+{
+    wtapng_dsb_mandatory_t *mand = (wtapng_dsb_mandatory_t *)block->mandatory_data;
+    g_free(mand->secrets_data);
+}
+
+static void dsb_copy_mand(wtap_block_t dest_block, wtap_block_t src_block)
+{
+    wtapng_dsb_mandatory_t *src = (wtapng_dsb_mandatory_t *)src_block->mandatory_data;
+    wtapng_dsb_mandatory_t *dst = (wtapng_dsb_mandatory_t *)dest_block->mandatory_data;
+    dst->secrets_type = src->secrets_type;
+    dst->secrets_len = src->secrets_len;
+    g_free(dst->secrets_data);
+    dst->secrets_data = (guint8 *)g_memdup(src->secrets_data, src->secrets_len);
+}
+
 void wtap_opttypes_initialize(void)
 {
     static wtap_blocktype_t shb_block = {
@@ -1082,6 +1103,16 @@ void wtap_opttypes_initialize(void)
         NULL
     };
 
+    static wtap_blocktype_t dsb_block = {
+        WTAP_BLOCK_DSB,
+        "DSB",
+        "Decryption Secrets Block",
+        dsb_create,
+        dsb_free_mand,
+        dsb_copy_mand,
+        NULL
+    };
+
     static wtap_blocktype_t nrb_block = {
         WTAP_BLOCK_NG_NRB,       /* block_type */
         "NRB",                   /* name */
@@ -1227,6 +1258,11 @@ void wtap_opttypes_initialize(void)
     wtap_opttype_option_register(&isb_block, OPT_ISB_FILTERACCEPT, &isb_filteraccept);
     wtap_opttype_option_register(&isb_block, OPT_ISB_OSDROP, &isb_osdrop);
     wtap_opttype_option_register(&isb_block, OPT_ISB_USRDELIV, &isb_usrdeliv);
+
+    /*
+     * Register the DSB, currently no options are defined.
+     */
+    wtap_opttype_block_register(WTAP_BLOCK_DSB, &dsb_block);
 }
 
 void wtap_opttypes_cleanup(void)