From Harald Welte:
[obnox/wireshark/wip.git] / epan / packet.h
index 50b8f7965f110145d5a591d0dfd7e4c9fbf3809c..5db30200611654baaa8cc0c6c5267ae493ea9c9d 100644 (file)
@@ -79,20 +79,20 @@ typedef struct _packet_counts {
 
 /* Types of character encodings */
 typedef enum {
-       CHAR_ASCII       = 0,   /* ASCII */
-       CHAR_EBCDIC      = 1    /* EBCDIC */
-} char_enc;
+       PACKET_CHAR_ENC_CHAR_ASCII       = 0,   /* ASCII */
+       PACKET_CHAR_ENC_CHAR_EBCDIC      = 1    /* EBCDIC */
+} packet_char_enc;
 
 extern void packet_init(void);
 extern void packet_cleanup(void);
 
-/* Handle for dissectors you call directly or register with "dissector_add()".
+/* Handle for dissectors you call directly or register with "dissector_add_uint()".
    This handle is opaque outside of "packet.c". */
 struct dissector_handle;
 typedef struct dissector_handle *dissector_handle_t;
 
-/* Hash table for matching port numbers and dissectors; this is opaque
-   outside of "packet.c". */
+/* Hash table for matching unsigned integers, or strings, and dissectors;
+   this is opaque outside of "packet.c". */
 struct dissector_table;
 typedef struct dissector_table *dissector_table_t;
 
@@ -132,6 +132,9 @@ typedef void (*DATFunc_handle) (const gchar *table_name, gpointer value,
 typedef void (*DATFunc_table) (const gchar *table_name, const gchar *ui_name,
     gpointer user_data);
 
+typedef void (*DATFunc_heur_table) (const gchar *table_name,gpointer table,
+    gpointer user_data);
+
 /* Opaque structure - provides type checking but no access to components */
 typedef struct dtbl_entry dtbl_entry_t;
 
@@ -150,7 +153,7 @@ extern void dissector_all_tables_foreach_table (DATFunc_table func,
 
 /* a protocol uses the function to register a sub-dissector table */
 extern dissector_table_t register_dissector_table(const char *name,
-    const char *ui_name, ftenum_t type, int base);
+    const char *ui_name, const ftenum_t type, const int base);
 
 /* Find a dissector table by table name. */
 extern dissector_table_t find_dissector_table(const char *name);
@@ -167,38 +170,66 @@ extern ftenum_t get_dissector_table_selector_type(const char *name);
 extern int get_dissector_table_base(const char *name);
 
 /* Add an entry to a uint dissector table. */
-extern void dissector_add(const char *abbrev, guint32 pattern,
+extern void dissector_add_uint(const char *abbrev, const guint32 pattern,
     dissector_handle_t handle);
 
+/* For old code that hasn't yet been changed. */
+#define dissector_add(abbrev, pattern, handle) \
+       dissector_add_uint(abbrev, pattern, handle)
+
 /* Delete the entry for a dissector in a uint dissector table
    with a particular pattern. */
-extern void dissector_delete(const char *name, guint32 pattern,
+extern void dissector_delete_uint(const char *name, const guint32 pattern,
     dissector_handle_t handle);
 
+/* For old code that hasn't yet been changed. */
+#define dissector_delete(name, pattern, handle) \
+       dissector_delete_uint(name, pattern, handle)
+
 /* Change the entry for a dissector in a uint dissector table
    with a particular pattern to use a new dissector handle. */
-extern void dissector_change(const char *abbrev, guint32 pattern,
+extern void dissector_change_uint(const char *abbrev, const guint32 pattern,
     dissector_handle_t handle);
 
+/* For old code that hasn't yet been changed. */
+#define dissector_change(abbrev, pattern, handle) \
+       dissector_change_uint(abbrev, pattern, handle)
+
 /* Reset an entry in a uint dissector table to its initial value. */
-extern void dissector_reset(const char *name, guint32 pattern);
+extern void dissector_reset_uint(const char *name, const guint32 pattern);
+
+/* For old code that hasn't yet been changed. */
+#define dissector_reset(name, pattern) \
+       dissector_reset_uint(name, pattern)
 
 /* Look for a given value in a given uint dissector table and, if found,
    call the dissector with the arguments supplied, and return TRUE,
    otherwise return FALSE. */
-extern gboolean dissector_try_port(dissector_table_t sub_dissectors,
-    guint32 port, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+extern gboolean dissector_try_uint(dissector_table_t sub_dissectors,
+    const guint32 uint_val, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+
+/* For old code that hasn't yet been changed. */
+#define dissector_try_port(sub_dissectors, uint_val, tvb, pinfo, tree) \
+       dissector_try_uint(sub_dissectors, uint_val, tvb, pinfo, tree)
 
 /* Look for a given value in a given uint dissector table and, if found,
    call the dissector with the arguments supplied, and return TRUE,
    otherwise return FALSE. */
-extern gboolean dissector_try_port_new(dissector_table_t sub_dissectors, 
-       guint32 port, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean add_proto_name);
+extern gboolean dissector_try_uint_new(dissector_table_t sub_dissectors,
+       const guint32 uint_val, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const gboolean add_proto_name);
+
+/* For old code that hasn't yet been changed. */
+#define dissector_try_port_new(sub_dissectors, uint_val, tvb, pinfo, tree, add_proto_name) \
+       dissector_try_uint_new(sub_dissectors, uint_val, tvb, pinfo, tree, add_proto_name)
 
 /* Look for a given value in a given uint dissector table and, if found,
    return the dissector handle for that value. */
-extern dissector_handle_t dissector_get_port_handle(
-    dissector_table_t sub_dissectors, guint32 port);
+extern dissector_handle_t dissector_get_uint_handle(
+    dissector_table_t const sub_dissectors, const guint32 uint_val);
+
+/* For old code that hasn't yet been changed. */
+#define dissector_get_port_handle(sub_dissectors, uint_val) \
+       dissector_get_uint_handle(sub_dissectors, uint_val)
 
 /* Add an entry to a string dissector table. */
 extern void dissector_add_string(const char *name, const gchar *pattern,
@@ -211,7 +242,7 @@ extern void dissector_delete_string(const char *name, const gchar *pattern,
 
 /* Change the entry for a dissector in a string dissector table
    with a particular pattern to use a new dissector handle. */
-extern void dissector_change_string(const char *name, gchar *pattern,
+extern void dissector_change_string(const char *name, const gchar *pattern,
     dissector_handle_t handle);
 
 /* Reset an entry in a string sub-dissector table to its initial value. */
@@ -238,6 +269,13 @@ extern void dissector_add_handle(const char *name, dissector_handle_t handle);
    by another dissector. */
 typedef GSList *heur_dissector_list_t;
 
+
+typedef struct {
+       heur_dissector_t dissector;
+       protocol_t *protocol;
+       gboolean enabled;
+} heur_dtbl_entry_t;
+
 /** A protocol uses this function to register a heuristic sub-dissector list.
  *  Call this in the parent dissectors proto_register function.
  *
@@ -247,6 +285,9 @@ typedef GSList *heur_dissector_list_t;
 extern void register_heur_dissector_list(const char *name,
     heur_dissector_list_t *list);
 
+extern void dissector_all_heur_tables_foreach_table (DATFunc_heur_table func,
+    gpointer user_data);
+
 /** Try all the dissectors in a given heuristic dissector list. This is done,
  *  until we find one that recognizes the protocol.
  *  Call this while the parent dissector running.
@@ -268,7 +309,7 @@ extern gboolean dissector_try_heuristic(heur_dissector_list_t sub_dissectors,
  * @param proto the protocol id of the sub-dissector
  */
 extern void heur_dissector_add(const char *name, heur_dissector_t dissector,
-    int proto);
+    const int proto);
 
 /** Remove a sub-dissector from a heuristic dissector list.
  *  Call this in the prefs_reinit function of the sub-dissector.
@@ -277,28 +318,41 @@ extern void heur_dissector_add(const char *name, heur_dissector_t dissector,
  * @param dissector the sub-dissector to be unregistered
  * @param proto the protocol id of the sub-dissector
  */
-extern void heur_dissector_delete(const char *name, heur_dissector_t dissector, int proto);
+extern void heur_dissector_delete(const char *name, heur_dissector_t dissector, const int proto);
+
+/** Enable/Disable a sub-dissector in a heuristic dissector list
+ *  Call this in the prefs_reinit function of the sub-dissector.
+ *
+ * @param name the name of the "parent" protocol, e.g. "tcp"
+ * @param dissector the sub-dissector to be disabled/enabled
+ * @param proto the protocol id of the sub-dissector
+ * @param TRUE/FALSE to enable/disable the sub-dissector
+ */
+extern void heur_dissector_set_enabled(const char *name, heur_dissector_t dissector, const int proto, const gboolean enabled);
 
 /* Register a dissector. */
 extern void register_dissector(const char *name, dissector_t dissector,
-    int proto);
+    const int proto);
 extern void new_register_dissector(const char *name, new_dissector_t dissector,
-    int proto);
+    const int proto);
+
+/* Get the long name of the protocol for a dissector handle. */
+extern const char *dissector_handle_get_long_name(const dissector_handle_t handle);
 
 /* Get the short name of the protocol for a dissector handle. */
-extern const char *dissector_handle_get_short_name(dissector_handle_t handle);
+extern const char *dissector_handle_get_short_name(const dissector_handle_t handle);
 
 /* Get the index of the protocol for a dissector handle. */
-extern int dissector_handle_get_protocol_index(dissector_handle_t handle);
+extern int dissector_handle_get_protocol_index(const dissector_handle_t handle);
 
 /* Find a dissector by name. */
 extern dissector_handle_t find_dissector(const char *name);
 
 /* Create an anonymous handle for a dissector. */
 extern dissector_handle_t create_dissector_handle(dissector_t dissector,
-    int proto);
+    const int proto);
 extern dissector_handle_t new_create_dissector_handle(new_dissector_t dissector,
-    int proto);
+    const int proto);
 
 /* Call a dissector through a handle and if no dissector was found
  * pass if over to the "data" dissector instead.
@@ -307,14 +361,14 @@ extern dissector_handle_t new_create_dissector_handle(new_dissector_t dissector,
  *   @param  tvb The buffer to dissect.
  *   @param  pinfo Packet Info.
  *   @param  tree The protocol tree.
- *   @return  If the protocol for that handle isn't enabled call the data 
- *   dissector. Otherwise, if the handle refers to a new-style 
- *   dissector, call the dissector and return its return value, otherwise call 
+ *   @return  If the protocol for that handle isn't enabled call the data
+ *   dissector. Otherwise, if the handle refers to a new-style
+ *   dissector, call the dissector and return its return value, otherwise call
  *   it and return the length of the tvbuff pointed to by the argument.
  */
 extern int call_dissector(dissector_handle_t handle, tvbuff_t *tvb,
     packet_info *pinfo, proto_tree *tree);
-    
+
 /* Call a dissector through a handle but if no dissector was found
  * just return 0 and do not call the "data" dissector instead.
  *
@@ -323,8 +377,8 @@ extern int call_dissector(dissector_handle_t handle, tvbuff_t *tvb,
  *   @param  pinfo Packet Info.
  *   @param  tree The protocol tree.
  *   @return  If the protocol for that handle isn't enabled, return 0 without
- *   calling the dissector. Otherwise, if the handle refers to a new-style 
- *   dissector, call the dissector and return its return value, otherwise call 
+ *   calling the dissector. Otherwise, if the handle refers to a new-style
+ *   dissector, call the dissector and return its return value, otherwise call
  *   it and return the length of the tvbuff pointed to by the argument.
  */
 extern int call_dissector_only(dissector_handle_t handle, tvbuff_t *tvb,
@@ -339,7 +393,7 @@ extern void dissect_cleanup(void);
  * Given a tvbuff, and a length from a packet header, adjust the length
  * of the tvbuff to reflect the specified length.
  */
-extern void set_actual_length(tvbuff_t *tvb, guint specified_len);
+extern void set_actual_length(tvbuff_t *tvb, const guint specified_len);
 
 /* Allow protocols to register "init" routines, which are called before
    we make a pass through a capture file and dissect all its packets
@@ -376,23 +430,12 @@ register_final_registration_routine(void (*func)(void));
 extern void
 final_registration_all_protocols(void);
 
-/*
- * DEPRECATED: Use packet_add_new_data_source() instead.
- */
-extern void
-add_new_data_source(packet_info *pinfo, tvbuff_t *tvb, const char *name);
-
 /*
  * Add a new data source to the list of data sources for a frame, given
  * the tvbuff for the data source and its name.
- *
- *   @param  tree The protocol tree.
- *   @param  pinfo Packet Info.
- *   @param  tvb The buffer to store.
- *   @param  name The name of the data source
  */
-extern void
-packet_add_new_data_source(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, const char *name);
+extern void add_new_data_source(packet_info *pinfo, tvbuff_t *tvb,
+    const char *name);
 
 /*
  * Return the data source name.
@@ -424,6 +467,11 @@ extern void ethertype(guint16 etype, tvbuff_t *tvb, int offset_after_ethertype,
  */
 extern void dissector_dump_decodes(void);
 
+/*
+ * For each heuristic dissector table, dump list of dissectors (filter_names) for that table
+ */
+extern void dissector_dump_heur_decodes(void);
+
 /*
  * post dissectors are to be called by packet-frame.c after every other
  * dissector has been called.