Ethereal-cvs: [Ethereal-cvs] cvs commit: ethereal/plugins plugin_api.c plugin_api.h plugin_tab

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Guy Harris <guy@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 15 Nov 2000 01:07:51 -0600 (CST)
guy         2000/11/15 01:07:51 CST

  Modified files:
    plugins              plugin_api.c plugin_api.h plugin_table.h 
  Log:
  Add a mechanism by which a dissector can be registered by name, another
  dissector can get a "handle" for that dissector by name and then call
  that dissector through the handle.
  
  This allows dissectors that can't be called through a port table or a
  heuristic table to be called from other dissectors without directly
  referring to the dissector function - dynamically-loaded modules, under
  Windows, cannot directly call functions in the main program, and
  non-plugin dissectors are in the main program and thus cannot be called
  from plugin dissectors unless either
  
  	1) a pointer to the dissector is put in the Big Transfer Vector
  
  or
  
  	2) some other mechanism for getting a pointer to the dissector
  	   is provided.
  
  This mechanism could also support registering old-style dissectors and
  calling them from new-style dissectors without the new-style dissector
  having to do the argument translation itself (I didn't add support for
  registering old-style dissectors because I'd prefer to have people
  tvbuffify their code if they have to register a dissector...).
  
  It could also, in the future, perhaps support
  
  	disabling of protocols;
  
  	setting "pinfo->current_proto";
  
  inside "call_dissector()" - and inside "{old_}dissector_try_port()" and
  "{old_"dissector_try_heuristic()" - allowing a pile of stuff that
  currently has to be done in every dissector be done by common code.
  (I have some ideas about how to do this, by
  
  	having "proto_register_protocol()" take an abbreviation - of the
  	sort that would be put in, for example, "pinfo->current_proto" -
  	as an argument;
  
  	having the calls to register dissectors take an index returned
  	by "proto_register_protocol()" as an argument.
  
  The abbreviation could be used elsewhere as well, e.g. in the "Decoding"
  tab of the "Edit->Protocols" dialog box, and in a GUI for constructing
  protocol filters.  Watch this space.)
  
  Make "dissect_sdp()" the first client of this mechanism; it's now static
  to "packet-sdp.c", and all dissectors that call it - including the MGCP
  plugin - now call it through a dissector handle fetched by
  "find_dissector()".  (Next step - see if Ethereal can now compile on
  Windows as a result of this.)
  
  Revision  Changes    Path
  1.13      +5 -1      ethereal/plugins/plugin_api.c
  1.12      +6 -1      ethereal/plugins/plugin_api.h
  1.9       +13 -1     ethereal/plugins/plugin_table.h