Licepnse -> License
[obnox/wireshark/wip.git] / epan / conversation.h
index bf4c6fb13fdc3c568473b97adf5e870360834720..f00ff93e468961504b056c8979b270315c59281a 100644 (file)
@@ -1,22 +1,22 @@
 /* conversation.h
  * Routines for building lists of packets that are part of a "conversation"
  *
- * $Id: conversation.h,v 1.8 2001/11/04 03:55:52 guy Exp $
+ * $Id$
  *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
  * Copyright 1998 Gerald Combs
- * 
+ *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #ifndef __CONVERSATION_H__
 #define __CONVERSATION_H__
 
-/* 
+/*
  * Flags to pass to "conversation_new()" to indicate that the address 2
  * and/or port 2 values for the conversation should be wildcards.
+ * The CONVERSATION_TEMPLATE option tells that any of the other supplied
+ * port and / or address wildcards will be used to match an infinite number
+ * of new connections to the conversation(s) that have the CONVERSATION_-
+ * TEMPLATE flag set. Any conversation created without the CONVERSATION_-
+ * TEMPLATE flag will be altered once the first connections (connection
+ * oriented protocols only) to include the newly found information which
+ * matched the wildcard options.
  */
 #define NO_ADDR2 0x01
 #define NO_PORT2 0x02
+#define NO_PORT2_FORCE 0x04
+#define CONVERSATION_TEMPLATE 0x08
 
-/* 
+/*
  * Flags to pass to "find_conversation()" to indicate that the address B
  * and/or port B search arguments are wildcards.
  */
 #define NO_ADDR_B 0x01
 #define NO_PORT_B 0x02
+#define NO_PORT_B_FORCE 0x04
 
 #include "packet.h"            /* for conversation dissector type */
 
@@ -56,18 +66,20 @@ typedef struct conversation_key {
 typedef struct conversation {
        struct conversation *next;      /* pointer to next conversation on hash chain */
        guint32 index;                  /* unique ID for conversation */
+       guint32 setup_frame;    /* frame number that setup this conversation */
        GSList *data_list;              /* list of data associated with conversation */
-       dissector_t dissector;          /* protocol dissector client can associate with conversation */
+       dissector_handle_t dissector_handle;
+                                       /* handle for protocol dissector client associated with conversation */
        guint   options;                /* wildcard flags */
        conversation_key *key_ptr;      /* pointer to the key for this conversation */
 } conversation_t;
 
 extern void conversation_init(void);
 
-extern conversation_t *conversation_new(address *addr1, address *addr2,
+extern conversation_t *conversation_new(guint32 setup_frame, address *addr1, address *addr2,
     port_type ptype, guint32 port1, guint32 port2, guint options);
 
-extern conversation_t *find_conversation(address *addr_a, address *addr_b,
+extern conversation_t *find_conversation(guint32 frame_num, address *addr_a, address *addr_b,
     port_type ptype, guint32 port_a, guint32 port_b, guint options);
 
 extern void conversation_add_proto_data(conversation_t *conv, int proto,
@@ -76,7 +88,7 @@ extern void *conversation_get_proto_data(conversation_t *conv, int proto);
 extern void conversation_delete_proto_data(conversation_t *conv, int proto);
 
 extern void conversation_set_dissector(conversation_t *conversation,
-    dissector_t dissector);
+    dissector_handle_t handle);
 extern gboolean
 try_conversation_dissector(address *addr_a, address *addr_b, port_type ptype,
     guint32 port_a, guint32 port_b, tvbuff_t *tvb, packet_info *pinfo,