aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2018-02-27 08:22:25 +0100
committerAnders Broman <a.broman58@gmail.com>2018-02-28 12:04:29 +0000
commit0fb38879af867b147d2ad73616f0c0ec08a0fc92 (patch)
tree66a61e72d013ac7acd4245ea96d870076eacea16
parentb405a9f0d2af056dd0c0e4d15271ff7dfdd5c928 (diff)
L16_mono: Add L16 monaural codec plugin as functional example
This codec plugin serves a dual purpose. First it is to add L16 codec suppport to Wireshark. Second it is an illustration of a basic codec plugin module. Change-Id: I64394dab3257ae49dece0257b16cd969503918e2 Reviewed-on: https://code.wireshark.org/review/26131 Reviewed-by: Jaap Keuter <jaap.keuter@xs4all.nl> Petri-Dish: Jaap Keuter <jaap.keuter@xs4all.nl> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--CMakeLists.txt1
-rw-r--r--configure.ac1
-rw-r--r--debian/libwscodecs0.install1
-rw-r--r--packaging/nsis/wireshark.nsi6
-rw-r--r--plugins/Makefile.am3
-rw-r--r--plugins/codecs/l16_mono/AUTHORS2
-rw-r--r--plugins/codecs/l16_mono/CMakeLists.txt68
-rw-r--r--plugins/codecs/l16_mono/Makefile.am48
-rw-r--r--plugins/codecs/l16_mono/README3
-rw-r--r--plugins/codecs/l16_mono/l16decode.c83
-rwxr-xr-xtools/make-plugin-reg.py28
11 files changed, 236 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6930f35e57..0a4824a601 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1388,6 +1388,7 @@ if(ENABLE_PLUGINS)
plugins/epan/wimaxasncp
plugins/epan/wimaxmacphy
plugins/wiretap/usbdump
+ plugins/codecs/l16_mono
${CUSTOM_PLUGIN_SRC_DIR}
)
diff --git a/configure.ac b/configure.ac
index a1f18a6922..11ef8825e6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2813,6 +2813,7 @@ AC_CONFIG_FILES(
plugins/epan/wimaxasncp/Makefile
plugins/epan/wimaxmacphy/Makefile
plugins/wiretap/usbdump/Makefile
+ plugins/codecs/l16_mono/Makefile
_CUSTOM_PLUGIN_CONFIG_FILES_
randpkt_core/doxygen.cfg
randpkt_core/Makefile
diff --git a/debian/libwscodecs0.install b/debian/libwscodecs0.install
index 418ba73dff..f41f8804da 100644
--- a/debian/libwscodecs0.install
+++ b/debian/libwscodecs0.install
@@ -1 +1,2 @@
usr/lib/*/libwscodecs.so.*
+usr/lib/*/wireshark/plugins/*/codecs/*.so
diff --git a/packaging/nsis/wireshark.nsi b/packaging/nsis/wireshark.nsi
index d928107879..a9cc6fc6d3 100644
--- a/packaging/nsis/wireshark.nsi
+++ b/packaging/nsis/wireshark.nsi
@@ -1051,6 +1051,12 @@ SetOutPath '$INSTDIR\plugins\${VERSION_MAJOR}.${VERSION_MINOR}\wiretap'
File "${STAGING_DIR}\plugins\${VERSION_MAJOR}.${VERSION_MINOR}\wiretap\usbdump.dll"
SectionEnd
+Section "Codec plugins" SecCodec
+;-------------------------------------------
+SetOutPath '$INSTDIR\plugins\${VERSION_MAJOR}.${VERSION_MINOR}\codecs'
+File "${STAGING_DIR}\plugins\${VERSION_MAJOR}.${VERSION_MINOR}\codecs\l16mono.dll"
+SectionEnd
+
Section "Configuration Profiles" SecProfiles
;-------------------------------------------
; This should be a function or macro
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 7e56bcf379..2055eb1b0e 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -35,7 +35,8 @@ SUBDIRS = \
epan/wimax \
epan/wimaxasncp \
epan/wimaxmacphy \
- wiretap/usbdump
+ wiretap/usbdump \
+ codecs/l16_mono
EXTRA_DIST = \
$(_CUSTOM_EXTRA_DIST_) \
diff --git a/plugins/codecs/l16_mono/AUTHORS b/plugins/codecs/l16_mono/AUTHORS
new file mode 100644
index 0000000000..f00e0146b8
--- /dev/null
+++ b/plugins/codecs/l16_mono/AUTHORS
@@ -0,0 +1,2 @@
+Author :
+Jaap Keuter <jaap.keuter@xs4all.nl>
diff --git a/plugins/codecs/l16_mono/CMakeLists.txt b/plugins/codecs/l16_mono/CMakeLists.txt
new file mode 100644
index 0000000000..99b3de3dcc
--- /dev/null
+++ b/plugins/codecs/l16_mono/CMakeLists.txt
@@ -0,0 +1,68 @@
+# CMakeLists.txt
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+
+include(WiresharkPlugin)
+
+# Plugin name and version info (major minor micro extra)
+set_module_info(l16mono 0 1 0 0)
+
+set(CODEC_SRC
+ l16decode.c
+)
+
+set(PLUGIN_FILES
+ plugin.c
+ ${CODEC_SRC}
+)
+
+set_source_files_properties(
+ ${PLUGIN_FILES}
+ PROPERTIES
+ COMPILE_FLAGS "${WERROR_COMMON_FLAGS}"
+)
+
+include_directories(
+ ${CMAKE_SOURCE_DIR}/codec
+ ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+register_plugin_files(plugin.c
+ plugin_codec
+ ${CODEC_SRC}
+)
+
+add_plugin_library(l16mono codecs)
+
+target_link_libraries(l16mono wscodecs)
+
+install_plugin(l16mono codecs)
+
+file(GLOB CODEC_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*.h")
+CHECKAPI(
+ NAME
+ l16mono
+ SWITCHES
+ -g abort -g termoutput -build
+ SOURCES
+ ${CODEC_SRC}
+ ${CODEC_HEADERS}
+)
+
+#
+# Editor modelines - http://www.wireshark.org/tools/modelines.html
+#
+# Local variables:
+# c-basic-offset: 8
+# tab-width: 8
+# indent-tabs-mode: t
+# End:
+#
+# vi: set shiftwidth=8 tabstop=8 noexpandtab:
+# :indentSize=8:tabSize=8:noTabs=false:
+#
diff --git a/plugins/codecs/l16_mono/Makefile.am b/plugins/codecs/l16_mono/Makefile.am
new file mode 100644
index 0000000000..bbc2379eb3
--- /dev/null
+++ b/plugins/codecs/l16_mono/Makefile.am
@@ -0,0 +1,48 @@
+# Makefile.am
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+
+include $(top_srcdir)/Makefile.am.inc
+include $(top_srcdir)/plugins/codecs/Makefile.am.inc
+
+# the name of the plugin
+PLUGIN_NAME = l16mono
+
+PLUGIN_VERSION = 0.1.0
+
+BUILT_SOURCES = \
+ plugin.c
+
+# Non-generated sources to be scanned for registration routines
+NONGENERATED_REGISTER_C_FILES = \
+ l16decode.c
+
+# Non-generated sources
+NONGENERATED_C_FILES = \
+ $(NONGENERATED_REGISTER_C_FILES)
+
+wiretap_plugin_LTLIBRARIES = l16mono.la
+
+l16mono_la_SOURCES = \
+ $(SRC_FILES) \
+ $(HEADER_FILES)
+
+nodist_l16mono_la_SOURCES = \
+ plugin.c
+
+l16mono_la_CPPFLAGS = $(AM_CPPFLAGS) $(PLUGIN_CPPFLAGS) -I$(abs_top_srcdir)/codecs
+
+l16mono_la_CFLAGS = $(AM_CFLAGS) $(PLUGIN_CFLAGS) -I$(abs_top_srcdir)/codecs
+
+l16mono_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+
+DISTCLEANFILES = \
+ plugin.c
+
+EXTRA_DIST = \
+ CMakeLists.txt
diff --git a/plugins/codecs/l16_mono/README b/plugins/codecs/l16_mono/README
new file mode 100644
index 0000000000..993730a4e6
--- /dev/null
+++ b/plugins/codecs/l16_mono/README
@@ -0,0 +1,3 @@
+This codec plugin serves a dual purpose.
+First it is to add L16 codec suppport to Wireshark.
+Second it is an illustration of a basic codec plugin module.
diff --git a/plugins/codecs/l16_mono/l16decode.c b/plugins/codecs/l16_mono/l16decode.c
new file mode 100644
index 0000000000..6c4453f457
--- /dev/null
+++ b/plugins/codecs/l16_mono/l16decode.c
@@ -0,0 +1,83 @@
+/* l16decode.c
+ * 16-bit audio, mono codec
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+
+#include "codecs/codecs.h"
+#include "ws_attributes.h"
+
+void *
+codec_l16_init(void)
+{
+ return NULL;
+}
+
+void
+codec_l16_release(void *ctx _U_)
+{
+
+}
+
+unsigned
+codec_l16_get_channels(void *ctx _U_)
+{
+ return 1;
+}
+
+unsigned
+codec_l16_get_frequency(void *ctx _U_)
+{
+ return 44100;
+}
+
+size_t
+codec_l16_decode(void *ctx _U_, const void *input, size_t inputSizeBytes,
+ void *output, size_t *outputSizeBytes)
+{
+ const guint16 *dataIn = (const guint16 *)input;
+ guint16 *dataOut = (guint16 *)output;
+ size_t i;
+
+ if (!output || !outputSizeBytes)
+ {
+ return inputSizeBytes;
+ }
+
+ for (i=0; i<inputSizeBytes/2; i++)
+ {
+ dataOut[i] = g_ntohs(dataIn[i]);
+ }
+
+ *outputSizeBytes = inputSizeBytes;
+ return *outputSizeBytes;
+}
+
+void
+codec_register_l16(void)
+{
+ register_codec("16-bit audio, monaural", codec_l16_init, codec_l16_release,
+ codec_l16_get_channels, codec_l16_get_frequency, codec_l16_decode);
+}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */
diff --git a/tools/make-plugin-reg.py b/tools/make-plugin-reg.py
index 12bf86ae01..1aed42ddef 100755
--- a/tools/make-plugin-reg.py
+++ b/tools/make-plugin-reg.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Looks for registration routines in the plugin dissectors,
+# Looks for registration routines in the plugins
# and assembles C code to call all the routines.
#
@@ -13,7 +13,7 @@ import re
#
srcdir = sys.argv[1]
#
-# The second argument is either "plugin" or "plugin_wtap".
+# The second argument is either "plugin", "plugin_wtap" or "plugin_codec".
#
registertype = sys.argv[2]
#
@@ -50,6 +50,7 @@ regs = {
'proto_reg': set(),
'handoff_reg': set(),
'wtap_register': set(),
+ 'codec_register': set(),
}
# For those that don't know Python, r"" indicates a raw string,
@@ -60,11 +61,14 @@ handoff_regex = r"\bproto_reg_handoff_(?P<symbol>[_A-Za-z0-9]+)\s*\(\s*void\s*\)
wtap_reg_regex = r"\bwtap_register_(?P<symbol>[_A-Za-z0-9]+)\s*\([^;]+$"
+codec_reg_regex = r"\bcodec_register_(?P<symbol>[_A-Za-z0-9]+)\s*\([^;]+$"
+
# This table drives the pattern-matching and symbol-harvesting
patterns = [
( 'proto_reg', re.compile(proto_regex, re.MULTILINE) ),
( 'handoff_reg', re.compile(handoff_regex, re.MULTILINE) ),
( 'wtap_register', re.compile(wtap_reg_regex, re.MULTILINE) ),
+ ( 'codec_register', re.compile(codec_reg_regex, re.MULTILINE) ),
]
# Grep
@@ -83,14 +87,15 @@ for filename in filenames:
file.close()
# Make sure we actually processed something
-if len(regs['proto_reg']) < 1 and len(regs['wtap_register']) < 1:
- print("No protocol registrations found")
+if (len(regs['proto_reg']) < 1 and len(regs['wtap_register']) < 1 and len(regs['codec_register']) < 1):
+ print("No plugin registrations found")
sys.exit(1)
# Convert the sets into sorted lists to make the output pretty
regs['proto_reg'] = sorted(regs['proto_reg'])
regs['handoff_reg'] = sorted(regs['handoff_reg'])
regs['wtap_register'] = sorted(regs['wtap_register'])
+regs['codec_register'] = sorted(regs['codec_register'])
reg_code = ""
@@ -108,9 +113,11 @@ reg_code += """
"""
if registertype == "plugin":
- reg_code += "#include <epan/proto.h>\n\n"
+ reg_code += "#include \"epan/proto.h\"\n\n"
if registertype == "plugin_wtap":
- reg_code += "#include <wiretap/wtap.h>\n\n"
+ reg_code += "#include \"wiretap/wtap.h\"\n\n"
+if registertype == "plugin_codec":
+ reg_code += "#include \"codecs/codecs.h\"\n\n"
for symbol in regs['proto_reg']:
reg_code += "void proto_register_%s(void);\n" % (symbol)
@@ -118,6 +125,8 @@ for symbol in regs['handoff_reg']:
reg_code += "void proto_reg_handoff_%s(void);\n" % (symbol)
for symbol in regs['wtap_register']:
reg_code += "void wtap_register_%s(void);\n" % (symbol)
+for symbol in regs['codec_register']:
+ reg_code += "void codec_register_%s(void);\n" % (symbol)
reg_code += """
WS_DLL_PUBLIC_DEF const gchar plugin_version[] = PLUGIN_VERSION;
@@ -138,11 +147,16 @@ if registertype == "plugin":
else:
reg_code +=" plug_%s.register_handoff = NULL;\n" % (symbol)
reg_code += " proto_register_plugin(&plug_%s);\n" % (symbol)
-else:
+if registertype == "plugin_wtap":
for symbol in regs['wtap_register']:
reg_code += " static wtap_plugin plug_%s;\n\n" % (symbol)
reg_code += " plug_%s.register_wtap_module = wtap_register_%s;\n" % (symbol, symbol)
reg_code += " wtap_register_plugin(&plug_%s);\n" % (symbol)
+if registertype == "plugin_codec":
+ for symbol in regs['codec_register']:
+ reg_code += " static codecs_plugin plug_%s;\n\n" % (symbol)
+ reg_code += " plug_%s.register_codec_module = codec_register_%s;\n" % (symbol, symbol)
+ reg_code += " codecs_register_plugin(&plug_%s);\n" % (symbol)
reg_code += "}\n"