diff options
author | Anders Broman <anders.broman@ericsson.com> | 2009-02-02 21:22:01 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2009-02-02 21:22:01 +0000 |
commit | d92ab193f5dcb4c423d598ef33a0b6ed3b049d6b (patch) | |
tree | d24600ba5880ec5785bb9139b35adb1a0c79240a /tools/make-dissector-reg.py | |
parent | 9f9566e6f39b5006e2299a0d3db4cbce8401f675 (diff) |
Use Python to build tshark-tap-register.c
svn path=/trunk/; revision=27355
Diffstat (limited to 'tools/make-dissector-reg.py')
-rwxr-xr-x | tools/make-dissector-reg.py | 72 |
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() |