aboutsummaryrefslogtreecommitdiffstats
path: root/tools/make-dissector-reg.py
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2009-02-02 21:22:01 +0000
committerAnders Broman <anders.broman@ericsson.com>2009-02-02 21:22:01 +0000
commitd92ab193f5dcb4c423d598ef33a0b6ed3b049d6b (patch)
treed24600ba5880ec5785bb9139b35adb1a0c79240a /tools/make-dissector-reg.py
parent9f9566e6f39b5006e2299a0d3db4cbce8401f675 (diff)
Use Python to build tshark-tap-register.c
svn path=/trunk/; revision=27355
Diffstat (limited to 'tools/make-dissector-reg.py')
-rwxr-xr-xtools/make-dissector-reg.py72
1 files changed, 48 insertions, 24 deletions
diff --git a/tools/make-dissector-reg.py b/tools/make-dissector-reg.py
index f9745bb384..1c520c0576 100755
--- a/tools/make-dissector-reg.py
+++ b/tools/make-dissector-reg.py
@@ -36,6 +36,10 @@ elif registertype == "dissectors":
tmp_filename = "register.c-tmp"
final_filename = "register.c"
cache_filename = "register-cache.pkl"
+elif registertype == "taps":
+ tmp_filename = "tshark-tap-register.c-tmp"
+ final_filename = "tshark-tap-register.c"
+ cache_filename = "tap-cache.pkl"
else:
print "Unknown output type '%s'" % registertype
sys.exit(1)
@@ -65,6 +69,7 @@ if len(filenames) < 1:
regs = {
'proto_reg': [],
'handoff_reg': [],
+ 'tap_reg': [],
}
# For those that don't know Python, r"" indicates a raw string,
@@ -75,12 +80,17 @@ proto_regex1 = r"void\s+(?P<symbol>proto_register_[_A-Za-z0-9]+)\s*\([^;]+$"
handoff_regex0 = r"^(?P<symbol>proto_reg_handoff_[_A-Za-z0-9]+)\s*\([^;]+$"
handoff_regex1 = r"void\s+(?P<symbol>proto_reg_handoff_[_A-Za-z0-9]+)\s*\([^;]+$"
+tap_regex0 = r"^(?P<symbol>register_tap_listener_[_A-Za-z0-9]+)\s*\([^;]+$"
+tap_regex1 = r"void\s+(?P<symbol>register_tap_listener_[_A-Za-z0-9]+)\s*\([^;]+$"
+
# This table drives the pattern-matching and symbol-harvesting
patterns = [
( 'proto_reg', re.compile(proto_regex0) ),
( 'proto_reg', re.compile(proto_regex1) ),
( 'handoff_reg', re.compile(handoff_regex0) ),
( 'handoff_reg', re.compile(handoff_regex1) ),
+ ( 'tap_reg', re.compile(tap_regex0) ),
+ ( 'tap_reg', re.compile(tap_regex1) ),
]
# Open our registration symbol cache
@@ -103,6 +113,7 @@ for filename in filenames:
# print "Pulling %s from cache" % (filename)
regs['proto_reg'].extend(cdict['proto_reg'])
regs['handoff_reg'].extend(cdict['handoff_reg'])
+ regs['tap_reg'].extend(cdict['tap_reg'])
file.close()
continue
# We don't have a cache entry
@@ -111,6 +122,7 @@ for filename in filenames:
'mtime': cur_mtime,
'proto_reg': [],
'handoff_reg': [],
+ 'tap_reg': [],
}
# print "Searching %s" % (filename)
for line in file.readlines():
@@ -132,13 +144,19 @@ if cache is not None and cache_filename is not None:
cache_file.close()
# Make sure we actually processed something
-if len(regs['proto_reg']) < 1:
- print "No protocol registrations found"
- sys.exit(1)
+if registertype == "taps":
+ if len(regs['tap_reg']) < 1:
+ print "No tap registrations found"
+ sys.exit(1)
+else:
+ if len(regs['proto_reg']) < 1:
+ print "No protocol registrations found"
+ sys.exit(1)
# Sort the lists to make them pretty
regs['proto_reg'].sort()
regs['handoff_reg'].sort()
+regs['tap_reg'].sort()
reg_code = open(tmp_filename, "w")
@@ -165,22 +183,22 @@ G_MODULE_EXPORT void
plugin_register (void)
{
""");
-else:
+ for symbol in regs['proto_reg']:
+ line = " {extern void %s (void); %s ();}\n" % (symbol, symbol)
+ reg_code.write(line)
+
+ reg_code.write("}\n")
+if registertype == "dissectors":
reg_code.write("""
#include "register.h"
void
register_all_protocols(register_cb cb, gpointer client_data)
{
""");
-
-for symbol in regs['proto_reg']:
- if registertype == "plugin":
- line = " {extern void %s (void); %s ();}\n" % (symbol, symbol)
- else:
+ for symbol in regs['proto_reg']:
line = " {extern void %s (void); if(cb) (*cb)(RA_REGISTER, \"%s\", client_data); %s ();}\n" % (symbol, symbol, symbol)
- reg_code.write(line)
-
-reg_code.write("}\n")
+ reg_code.write(line)
+ reg_code.write("}\n")
# Make the routine to register all protocol handoffs
@@ -190,25 +208,22 @@ G_MODULE_EXPORT void
plugin_reg_handoff(void)
{
""");
-else:
+ for symbol in regs['handoff_reg']:
+ line = " {extern void %s (void); %s ();}\n" % (symbol, symbol)
+ reg_code.write(line)
+ reg_code.write("}\n")
+ reg_code.write("#endif\n");
+if registertype == "dissectors":
reg_code.write("""
void
register_all_protocol_handoffs(register_cb cb, gpointer client_data)
{
""");
-for symbol in regs['handoff_reg']:
- if registertype == "plugin":
- line = " {extern void %s (void); %s ();}\n" % (symbol, symbol)
- else:
+ for symbol in regs['tap_reg']:
line = " {extern void %s (void); if(cb) (*cb)(RA_HANDOFF, \"%s\", client_data); %s ();}\n" % (symbol, symbol, symbol)
- reg_code.write(line)
-
-reg_code.write("}\n")
-
-if registertype == "plugin":
- reg_code.write("#endif\n");
-else:
+ reg_code.write(line)
+ reg_code.write("}\n")
reg_code.write("""
gulong register_count(void)
{
@@ -221,6 +236,15 @@ gulong register_count(void)
}
""");
+if registertype == "taps":
+ reg_code.write("""
+#include "register.h"
+void register_all_tap_listeners(void) {
+""");
+ for symbol in regs['tap_reg']:
+ line = " {extern void %s (void); %s ();}\n" % (symbol, symbol)
+ reg_code.write(line)
+ reg_code.write("}\n")
# Close the file
reg_code.close()