diff -Nur wireshark-1.2.7/epan/conversation.c wireshark-1.2.7-fD/epan/conversation.c
--- wireshark-1.2.7/epan/conversation.c	2010-04-01 01:44:39.000000000 +0900
+++ wireshark-1.2.7-fD/epan/conversation.c	2011-02-23 14:26:35.000000000 +0900
@@ -40,6 +40,11 @@
 static GHashTable *conversation_hashtable_exact = NULL;
 
 /*
+ * Hash table for conversations without strid.
+ */
+static GHashTable *conversation_hashtable_no_strid = NULL;
+
+/*
  * Hash table for conversations with one wildcard address.
  */
 static GHashTable *conversation_hashtable_no_addr2 = NULL;
@@ -63,6 +68,7 @@
 	port_type ptype;
 	guint32	port1;
 	guint32	port2;
+	guint32	strid;
 } conversation_key;
 #endif
 /*
@@ -193,6 +199,7 @@
 	hash_val += key->port1;
 	ADD_ADDRESS_TO_HASH(hash_val, &key->addr2);
 	hash_val += key->port2;
+	hash_val += key->strid;
 
 	return hash_val;
 }
@@ -217,6 +224,78 @@
 	 */
 	if (v1->port1 == v2->port1 &&
 	    v1->port2 == v2->port2 &&
+	    v1->strid == v2->strid &&
+	    ADDRESSES_EQUAL(&v1->addr1, &v2->addr1) &&
+	    ADDRESSES_EQUAL(&v1->addr2, &v2->addr2)) {
+		/*
+		 * Yes.  It's the same conversation, and the two
+		 * address/port pairs are going in the same direction.
+		 */
+		return 1;
+	}
+
+	/*
+	 * Is the first port 2 the same as the second port 1, the first
+	 * port 1 the same as the second port 2, the first address 2
+	 * the same as the second address 1, and the first address 1
+	 * the same as the second address 2?
+	 */
+	if (v1->port2 == v2->port1 &&
+	    v1->port1 == v2->port2 &&
+	    v1->strid == v2->strid &&
+	    ADDRESSES_EQUAL(&v1->addr2, &v2->addr1) &&
+	    ADDRESSES_EQUAL(&v1->addr1, &v2->addr2)) {
+		/*
+		 * Yes.  It's the same conversation, and the two
+		 * address/port pairs are going in opposite directions.
+		 */
+		return 1;
+	}
+
+	/*
+	 * The addresses or the ports don't match.
+	 */
+	return 0;
+}
+
+/*
+ * Compute the hash value for two given address/port pairs if the match
+ * has a wildcard stream id.
+ */
+static guint
+conversation_hash_no_strid(gconstpointer v)
+{
+	const conversation_key *key = (const conversation_key *)v;
+	guint hash_val;
+
+	hash_val = 0;
+	ADD_ADDRESS_TO_HASH(hash_val, &key->addr1);
+	hash_val += key->port1;
+	hash_val += key->port2;
+
+	return hash_val;
+}
+
+/*
+ * Compare two conversation keys, except for the stream id value.
+ */
+static gint
+conversation_match_no_strid(gconstpointer v, gconstpointer w)
+{
+	const conversation_key *v1 = (const conversation_key *)v;
+	const conversation_key *v2 = (const conversation_key *)w;
+
+	if (v1->ptype != v2->ptype)
+		return 0;	/* different types of port */
+
+	/*
+	 * Are the first and second port 1 values the same, the first and
+	 * second port 2 values the same, the first and second address
+	 * 1 values the same, and the first and second address 2 values
+	 * the same?
+	 */
+	if (v1->port1 == v2->port1 &&
+	    v1->port2 == v2->port2 &&
 	    ADDRESSES_EQUAL(&v1->addr1, &v2->addr1) &&
 	    ADDRESSES_EQUAL(&v1->addr2, &v2->addr2)) {
 		/*
@@ -263,6 +342,7 @@
 	ADD_ADDRESS_TO_HASH(hash_val, &key->addr1);
 	hash_val += key->port1;
 	hash_val += key->port2;
+	hash_val += key->strid;
 
 	return hash_val;
 }
@@ -289,6 +369,7 @@
 	 */
 	if (v1->port1 == v2->port1 &&
 	    v1->port2 == v2->port2 &&
+	    v1->strid == v2->strid &&
 	    ADDRESSES_EQUAL(&v1->addr1, &v2->addr1)) {
 		/*
 		 * Yes.  It's the same conversation, and the two
@@ -317,6 +398,7 @@
 	ADD_ADDRESS_TO_HASH(hash_val, &key->addr1);
 	hash_val += key->port1;
 	ADD_ADDRESS_TO_HASH(hash_val, &key->addr2);
+	hash_val += key->strid;
 
 	return hash_val;
 }
@@ -342,6 +424,7 @@
 	 * address 2 values the same?
 	 */
 	if (v1->port1 == v2->port1 &&
+	    v1->strid == v2->strid &&
 	    ADDRESSES_EQUAL(&v1->addr1, &v2->addr1) &&
 	    ADDRESSES_EQUAL(&v1->addr2, &v2->addr2)) {
 		/*
@@ -370,6 +453,7 @@
 	hash_val = 0;
 	ADD_ADDRESS_TO_HASH(hash_val, &key->addr1);
 	hash_val += key->port1;
+	hash_val += key->strid;
 
 	return hash_val;
 }
@@ -394,6 +478,7 @@
 	 * and second address 1 values the same?
 	 */
 	if (v1->port1 == v2->port1 &&
+	    v1->strid == v2->strid &&
 	    ADDRESSES_EQUAL(&v1->addr1, &v2->addr1)) {
 		/*
 		 * Yes.  It's the same conversation, and the two
@@ -420,6 +505,8 @@
 	conversation_keys = NULL;
 	if (conversation_hashtable_exact != NULL)
 		g_hash_table_destroy(conversation_hashtable_exact);
+	if (conversation_hashtable_no_strid != NULL)
+		g_hash_table_destroy(conversation_hashtable_no_strid);
 	if (conversation_hashtable_no_addr2 != NULL)
 		g_hash_table_destroy(conversation_hashtable_no_addr2);
 	if (conversation_hashtable_no_port2 != NULL)
@@ -438,6 +525,9 @@
 	conversation_hashtable_exact =
 	    g_hash_table_new(conversation_hash_exact,
 	      conversation_match_exact);
+	conversation_hashtable_no_strid =
+	    g_hash_table_new(conversation_hash_no_strid,
+	      conversation_match_no_strid);
 	conversation_hashtable_no_addr2 =
 	    g_hash_table_new(conversation_hash_no_addr2,
 	      conversation_match_no_addr2);
@@ -466,6 +556,15 @@
 conversation_new(guint32 setup_frame, address *addr1, address *addr2, port_type ptype,
     guint32 port1, guint32 port2, guint options)
 {
+	return conversation_new_ext(setup_frame, addr1, addr2, ptype,
+    		port1, port2, options & ~(DISTINCT_SCTP_STREAMID), 0);
+
+}
+
+conversation_t *
+conversation_new_ext(guint32 setup_frame, address *addr1, address *addr2, port_type ptype,
+    guint32 port1, guint32 port2, guint options, guint16 strid)
+{
 /*
 	DISSECTOR_ASSERT(!(options | CONVERSATION_TEMPLATE) || ((options | (NO_ADDR2 | NO_PORT2 | NO_PORT2_FORCE))) &&
 				"A conversation template may not be constructed without wildcard options");
@@ -486,7 +585,11 @@
 		if (options & (NO_PORT2|NO_PORT2_FORCE)) {
 			hashtable = conversation_hashtable_no_port2;
 		} else {
-			hashtable = conversation_hashtable_exact;
+			if (options & DISTINCT_SCTP_STREAMID) {
+				hashtable = conversation_hashtable_exact;
+			} else {
+				hashtable = conversation_hashtable_no_strid;
+			}
 		}
 	}
 
@@ -495,6 +598,7 @@
 	existing_key.ptype = ptype;
 	existing_key.port1 = port1;
 	existing_key.port2 = port2;
+	existing_key.strid = strid;
 
 	conversation = g_hash_table_lookup(hashtable, &existing_key);
 	tc = conversation; /* Remember if lookup was successful */
@@ -507,6 +611,7 @@
 	new_key->ptype = ptype;
 	new_key->port1 = port1;
 	new_key->port2 = port2;
+	new_key->strid = strid;
 
 	if (conversation) {
 		for (; conversation->next; conversation = conversation->next)
@@ -568,8 +673,13 @@
 		g_hash_table_insert(conversation_hashtable_no_addr2,
 		    conv->key_ptr, conv);
 	} else {
-		g_hash_table_insert(conversation_hashtable_exact,
-		    conv->key_ptr, conv);
+		if (conv->options & DISTINCT_SCTP_STREAMID) {
+			g_hash_table_insert(conversation_hashtable_exact,
+			    conv->key_ptr, conv);
+		} else {
+			g_hash_table_insert(conversation_hashtable_no_strid,
+			    conv->key_ptr, conv);
+		}
 	}
 }
 
@@ -602,18 +712,23 @@
 		g_hash_table_insert(conversation_hashtable_no_port2,
 		    conv->key_ptr, conv);
 	} else {
-		g_hash_table_insert(conversation_hashtable_exact,
-		    conv->key_ptr, conv);
+		if (conv->options & DISTINCT_SCTP_STREAMID) {
+			g_hash_table_insert(conversation_hashtable_exact,
+			    conv->key_ptr, conv);
+		} else {
+			g_hash_table_insert(conversation_hashtable_no_strid,
+			    conv->key_ptr, conv);
+		}
 	}
 }
 
 /*
  * Search a particular hash table for a conversation with the specified
- * {addr1, port1, addr2, port2} and set up before frame_num.
+ * {addr1, port1, addr2, port2, strid} and set up before frame_num.
  */
 static conversation_t *
 conversation_lookup_hashtable(GHashTable *hashtable, guint32 frame_num, address *addr1, address *addr2,
-    port_type ptype, guint32 port1, guint32 port2)
+    port_type ptype, guint32 port1, guint32 port2, guint16 strid)
 {
 	conversation_t* conversation;
 	conversation_t* match;
@@ -628,6 +743,7 @@
 	key.ptype = ptype;
 	key.port1 = port1;
 	key.port2 = port2;
+	key.strid = strid;
 
 	match = g_hash_table_lookup(hashtable, &key);
 
@@ -685,12 +801,19 @@
 find_conversation(guint32 frame_num, address *addr_a, address *addr_b, port_type ptype,
     guint32 port_a, guint32 port_b, guint options)
 {
+	return find_conversation_ext(frame_num, addr_a, addr_b, ptype,
+    		port_a, port_b, options | IGNORE_SCTP_STREAMID, 0);
+}
+conversation_t *
+find_conversation_ext(guint32 frame_num, address *addr_a, address *addr_b, port_type ptype,
+    guint32 port_a, guint32 port_b, guint options, guint16 strid)
+{
    conversation_t *conversation;
 
    /*
-    * First try an exact match, if we have two addresses and ports.
+    * First try an exact match, if we have two addresses and ports and strid.
     */
-   if (!(options & (NO_ADDR_B|NO_PORT_B))) {
+   if (!(options & (NO_ADDR_B|NO_PORT_B|IGNORE_SCTP_STREAMID))) {
       /*
        * Neither search address B nor search port B are wildcarded,
        * start out with an exact match.
@@ -699,7 +822,7 @@
       conversation =
          conversation_lookup_hashtable(conversation_hashtable_exact,
          frame_num, addr_a, addr_b, ptype,
-         port_a, port_b);
+         port_a, port_b, strid);
       if ((conversation == NULL) && (addr_a->type == AT_FC)) {
          /* In Fibre channel, OXID & RXID are never swapped as
           * TCP/UDP ports are in TCP/IP.
@@ -707,7 +830,33 @@
          conversation =
             conversation_lookup_hashtable(conversation_hashtable_exact,
             frame_num, addr_b, addr_a, ptype,
-            port_a, port_b);
+            port_a, port_b, strid);
+      }
+      if (conversation != NULL)
+         return conversation;
+   }
+
+   /*
+    * Then, ignoring strid try an exact match, if we have two addresses and ports.
+    */
+   if (!(options & (NO_ADDR_B|NO_PORT_B|NO_IGNORE_SCTP_STREAMID))) {
+      /*
+       * Neither search address B nor search port B are wildcarded,
+       * start out with an exact match.
+       * Exact matches check both directions.
+       */
+      conversation =
+         conversation_lookup_hashtable(conversation_hashtable_no_strid,
+         frame_num, addr_a, addr_b, ptype,
+         port_a, port_b, strid);
+      if ((conversation == NULL) && (addr_a->type == AT_FC)) {
+         /* In Fibre channel, OXID & RXID are never swapped as
+          * TCP/UDP ports are in TCP/IP.
+          */
+         conversation =
+            conversation_lookup_hashtable(conversation_hashtable_no_strid,
+            frame_num, addr_b, addr_a, ptype,
+            port_a, port_b, strid);
       }
       if (conversation != NULL)
          return conversation;
@@ -729,7 +878,7 @@
        */
       conversation =
          conversation_lookup_hashtable(conversation_hashtable_no_addr2,
-         frame_num, addr_a, addr_b, ptype, port_a, port_b);
+         frame_num, addr_a, addr_b, ptype, port_a, port_b, strid);
       if ((conversation == NULL) && (addr_a->type == AT_FC)) {
          /* In Fibre channel, OXID & RXID are never swapped as
           * TCP/UDP ports are in TCP/IP.
@@ -737,7 +886,7 @@
          conversation =
             conversation_lookup_hashtable(conversation_hashtable_no_addr2,
             frame_num, addr_b, addr_a, ptype,
-            port_a, port_b);
+            port_a, port_b, strid);
       }
       if (conversation != NULL) {
          /*
@@ -779,7 +928,7 @@
       if (!(options & NO_ADDR_B)) {
          conversation =
             conversation_lookup_hashtable(conversation_hashtable_no_addr2,
-            frame_num, addr_b, addr_a, ptype, port_b, port_a);
+            frame_num, addr_b, addr_a, ptype, port_b, port_a, strid);
          if (conversation != NULL) {
             /*
              * If this is for a connection-oriented
@@ -821,14 +970,14 @@
        */
       conversation =
          conversation_lookup_hashtable(conversation_hashtable_no_port2,
-         frame_num, addr_a, addr_b, ptype, port_a, port_b);
+         frame_num, addr_a, addr_b, ptype, port_a, port_b, strid);
       if ((conversation == NULL) && (addr_a->type == AT_FC)) {
          /* In Fibre channel, OXID & RXID are never swapped as
           * TCP/UDP ports are in TCP/IP
           */
          conversation =
             conversation_lookup_hashtable(conversation_hashtable_no_port2,
-            frame_num, addr_b, addr_a, ptype, port_a, port_b);
+            frame_num, addr_b, addr_a, ptype, port_a, port_b, strid);
       }
       if (conversation != NULL) {
          /*
@@ -870,7 +1019,7 @@
       if (!(options & NO_PORT_B)) {
          conversation =
             conversation_lookup_hashtable(conversation_hashtable_no_port2,
-            frame_num, addr_b, addr_a, ptype, port_b, port_a);
+            frame_num, addr_b, addr_a, ptype, port_b, port_a, strid);
          if (conversation != NULL) {
             /*
              * If this is for a connection-oriented
@@ -907,7 +1056,7 @@
     */
    conversation =
       conversation_lookup_hashtable(conversation_hashtable_no_addr2_or_port2,
-      frame_num, addr_a, addr_b, ptype, port_a, port_b);
+      frame_num, addr_a, addr_b, ptype, port_a, port_b, strid);
    if (conversation != NULL) {
       /*
        * If this is for a connection-oriented protocol:
@@ -952,11 +1101,11 @@
    if (addr_a->type == AT_FC)
       conversation =
       conversation_lookup_hashtable(conversation_hashtable_no_addr2_or_port2,
-      frame_num, addr_b, addr_a, ptype, port_a, port_b);
+      frame_num, addr_b, addr_a, ptype, port_a, port_b, strid);
    else
       conversation =
       conversation_lookup_hashtable(conversation_hashtable_no_addr2_or_port2,
-      frame_num, addr_b, addr_a, ptype, port_b, port_a);
+      frame_num, addr_b, addr_a, ptype, port_b, port_a, strid);
    if (conversation != NULL) {
       /*
        * If this is for a connection-oriented protocol, set the
diff -Nur wireshark-1.2.7/epan/conversation.h wireshark-1.2.7-fD/epan/conversation.h
--- wireshark-1.2.7/epan/conversation.h	2010-04-01 01:44:39.000000000 +0900
+++ wireshark-1.2.7-fD/epan/conversation.h	2011-02-23 14:25:44.000000000 +0900
@@ -39,11 +39,13 @@
  * TEMPLATE flag will be altered once the first connections (connection
  * oriented protocols only) to include the newly found information which
  * matched the wildcard options.
+ * DISTINCT_SCTP_STREAMID will also save the SCTP stream identifier, if any.
  */
 #define NO_ADDR2 0x01
 #define NO_PORT2 0x02
 #define NO_PORT2_FORCE 0x04
 #define CONVERSATION_TEMPLATE 0x08
+#define DISTINCT_SCTP_STREAMID 0x10
 
 /*
  * Flags to pass to "find_conversation()" to indicate that the address B
@@ -51,6 +53,8 @@
  */
 #define NO_ADDR_B 0x01
 #define NO_PORT_B 0x02
+#define IGNORE_SCTP_STREAMID 0x04
+#define NO_IGNORE_SCTP_STREAMID 0x08
 
 #include "packet.h"		/* for conversation dissector type */
 
@@ -64,6 +68,7 @@
 	port_type ptype;
 	guint32	port1;
 	guint32	port2;
+	guint16	strid;
 } conversation_key;
 
 typedef struct conversation {
@@ -85,6 +90,13 @@
 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);
 
+/* for SCTP stream */
+extern conversation_t *conversation_new_ext(guint32 setup_frame, address *addr1, address *addr2,
+    port_type ptype, guint32 port1, guint32 port2, guint options, guint16 strid);
+extern conversation_t *find_conversation_ext(guint32 frame_num, address *addr_a, address *addr_b,
+    port_type ptype, guint32 port_a, guint32 port_b, guint options, guint16 strid);
+    
+
 extern void conversation_add_proto_data(conversation_t *conv, int proto,
     void *proto_data);
 extern void *conversation_get_proto_data(conversation_t *conv, int proto);
diff -Nur wireshark-1.2.7/epan/dissectors/packet-diameter.c wireshark-1.2.7-fD/epan/dissectors/packet-diameter.c
--- wireshark-1.2.7/epan/dissectors/packet-diameter.c	2010-04-01 01:44:21.000000000 +0900
+++ wireshark-1.2.7-fD/epan/dissectors/packet-diameter.c	2011-02-23 13:33:10.000000000 +0900
@@ -63,8 +63,10 @@
 #include "packet-ntp.h"
 #include "packet-diameter.h"
 #include "diam_dict.h"
+#include "packet-ssl.h"
 
 #define SCTP_PORT_DIAMETER	3868
+#define SCTP_TLS_PORT_DIAMETER	3869
 
 /* Diameter Header Flags */
 /*                                      RPETrrrrCCCCCCCCCCCCCCCCCCCCCCCC  */
@@ -271,10 +273,13 @@
 
 
 static guint gbl_diameterSctpPort=SCTP_PORT_DIAMETER;
+static guint gbl_diameterSctpTlsPort=SCTP_TLS_PORT_DIAMETER;
 
 static dissector_handle_t diameter_tcp_handle;
 static range_t *global_diameter_tcp_port_range;
+static range_t *global_diameter_tcp_tls_port_range;
 #define DEFAULT_DIAMETER_PORT_RANGE "3868"
+#define DEFAULT_DIAMETER_TLS_PORT_RANGE "3869"
 
 /* desegmentation of Diameter over TCP */
 static gboolean gbl_diameter_desegment = TRUE;
@@ -1358,13 +1363,27 @@
     dissector_add("tcp.port", port, diameter_tcp_handle);
 }
 
+static void
+range_delete_callback_sec(guint32 port)
+{
+    ssl_dissector_delete(port, "diameter", TRUE);
+}
+
+static void
+range_add_callback_sec(guint32 port)
+{
+    ssl_dissector_add(port, "diameter", TRUE);
+}
+
 void
 proto_reg_handoff_diameter(void)
 {
 	static gboolean Initialized=FALSE;
 	static guint SctpPort;
+	static guint SctpsPort;
 	static dissector_handle_t diameter_handle;
 	static range_t *diameter_tcp_port_range;
+	static range_t *diameters_tcp_port_range;
 
 	if (!Initialized) {
 		diameter_handle = find_dissector("diameter");
@@ -1382,20 +1401,27 @@
 		/* AVP Code: 463 EAP-Reissued-Payload */
 		dissector_add("diameter.base", 463, 
 			new_create_dissector_handle(dissect_diameter_eap_payload, proto_diameter));
+			
+		/* set port for future deletes */
+		diameter_tcp_port_range = range_copy(global_diameter_tcp_port_range);
+		range_foreach(diameter_tcp_port_range, range_add_callback);
+		diameters_tcp_port_range = range_copy(global_diameter_tcp_tls_port_range);
+		range_foreach(diameters_tcp_port_range, range_add_callback_sec);
+		
+		dissector_add("sctp.port", gbl_diameterSctpPort, diameter_handle);
+		ssl_dissector_add(gbl_diameterSctpTlsPort, "diameter", TRUE);
 
 		Initialized=TRUE;
 	} else {
 		range_foreach(diameter_tcp_port_range, range_delete_callback);
 		g_free(diameter_tcp_port_range);
+		range_foreach(diameters_tcp_port_range, range_delete_callback_sec);
+		g_free(diameters_tcp_port_range);
 		dissector_delete("sctp.port", SctpPort, diameter_handle);
 	}
 
-	/* set port for future deletes */
-	diameter_tcp_port_range = range_copy(global_diameter_tcp_port_range);
-	range_foreach(diameter_tcp_port_range, range_add_callback);
 
-	SctpPort=gbl_diameterSctpPort;
-	dissector_add("sctp.port", gbl_diameterSctpPort, diameter_handle);
+	
 }
 
 /* registration with the filtering engine */
@@ -1543,8 +1569,9 @@
 	diameter_dissector_table = register_dissector_table("diameter.base", "DIAMETER_3GPP_AVPS", FT_UINT32, BASE_DEC);
 	diameter_3gpp_avp_dissector_table = register_dissector_table("diameter.3gpp", "DIAMETER_3GPP_AVPS", FT_UINT32, BASE_DEC);
 
-	/* Set default TCP ports */
+	/* Set default TCP & TLS ports */
 	range_convert_str(&global_diameter_tcp_port_range, DEFAULT_DIAMETER_PORT_RANGE, MAX_UDP_PORT);
+	range_convert_str(&global_diameter_tcp_tls_port_range, DEFAULT_DIAMETER_TLS_PORT_RANGE, MAX_UDP_PORT);
 
 	/* Register configuration options for ports */
 	diameter_module = prefs_register_protocol(proto_diameter,
diff -Nur wireshark-1.2.7/epan/dissectors/packet-sctp.c wireshark-1.2.7-fD/epan/dissectors/packet-sctp.c
--- wireshark-1.2.7/epan/dissectors/packet-sctp.c	2010-04-01 01:44:28.000000000 +0900
+++ wireshark-1.2.7-fD/epan/dissectors/packet-sctp.c	2011-02-23 13:54:13.000000000 +0900
@@ -2693,6 +2693,7 @@
   b_bit = tvb_get_guint8(chunk_tvb, CHUNK_FLAGS_OFFSET) & SCTP_DATA_CHUNK_B_BIT;
   u_bit = tvb_get_guint8(chunk_tvb, CHUNK_FLAGS_OFFSET) & SCTP_DATA_CHUNK_U_BIT;
   stream_id = tvb_get_ntohs(chunk_tvb, DATA_CHUNK_STREAM_ID_OFFSET);
+  pinfo->strid = stream_id;
   stream_seq_num = tvb_get_ntohs(chunk_tvb, DATA_CHUNK_STREAM_SEQ_NUMBER_OFFSET);
   tsn = tvb_get_ntohl(chunk_tvb, DATA_CHUNK_TSN_OFFSET);
 
diff -Nur wireshark-1.2.7/epan/dissectors/packet-ssl.c wireshark-1.2.7-fD/epan/dissectors/packet-ssl.c
--- wireshark-1.2.7/epan/dissectors/packet-ssl.c	2010-04-01 01:44:34.000000000 +0900
+++ wireshark-1.2.7-fD/epan/dissectors/packet-ssl.c	2011-02-23 14:56:36.000000000 +0900
@@ -500,6 +500,7 @@
     guint* conv_version;
     Ssl_private_key_t * private_key;
     guint32 port;
+    guint16 strid;
 
     ti = NULL;
     ssl_tree   = NULL;
@@ -507,9 +508,14 @@
     first_record_in_frame = TRUE;
     ssl_session = NULL;
     port = 0;
+    strid = 0;
 
 
     ssl_debug_printf("\ndissect_ssl enter frame #%u (%s)\n", pinfo->fd->num, (pinfo->fd->flags.visited)?"already visited":"first time");
+    
+    if (pinfo->ptype == PT_SCTP) {
+    	ssl_debug_printf("\ndissect_ssl SCTP stream %hd\n", pinfo->strid);
+    }
 
     /* Track the version using conversations to reduce the
      * chance that a packet that simply *looks* like a v2 or
@@ -523,14 +529,14 @@
      *       the conv_version, must set the copy in the conversation
      *       in addition to conv_version
      */
-    conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype,
-                                     pinfo->srcport, pinfo->destport, 0);
+    conversation = find_conversation_ext(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype,
+                                     pinfo->srcport, pinfo->destport, NO_IGNORE_SCTP_STREAMID, pinfo->strid);
 
     if (!conversation)
     {
         /* create a new conversation */
-        conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype,
-                                        pinfo->srcport, pinfo->destport, 0);
+        conversation = conversation_new_ext(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype,
+                                        pinfo->srcport, pinfo->destport, (pinfo->ptype == PT_SCTP) ? DISTINCT_SCTP_STREAMID : 0, pinfo->strid);
         ssl_debug_printf("  new conversation = %p created\n", (void *)conversation);
     }
     conv_data = conversation_get_proto_data(conversation, proto_ssl);
@@ -549,7 +555,7 @@
         conversation_add_proto_data(conversation, proto_ssl, ssl_session);
 
         /* we need to know which side of the conversation is speaking */
-        if (ssl_packet_from_server(ssl_associations, pinfo->srcport, pinfo->ptype == PT_TCP)) {
+        if (ssl_packet_from_server(ssl_associations, pinfo->srcport, pinfo->ptype != PT_UDP)) {
             dummy.addr = pinfo->src;
             dummy.port = port = pinfo->srcport;
         } else {
@@ -762,7 +768,7 @@
      * add decrypted data to this packet info */
     ssl_debug_printf("decrypt_ssl3_record: app_data len %d ssl, state 0x%02X\n",
         record_length, ssl->state);
-    direction = ssl_packet_from_server(ssl_associations, pinfo->srcport, pinfo->ptype == PT_TCP);
+    direction = ssl_packet_from_server(ssl_associations, pinfo->srcport, pinfo->ptype != PT_UDP);
 
     /* retrieve decoder for this packet direction */
     if (direction != 0) {
@@ -1504,7 +1510,7 @@
             col_append_str(pinfo->cinfo, COL_INFO, "Change Cipher Spec");
         dissect_ssl3_change_cipher_spec(tvb, ssl_record_tree,
                                         offset, conv_version, content_type);
-        if (ssl) ssl_change_cipher(ssl, ssl_packet_from_server(ssl_associations, pinfo->srcport, pinfo->ptype == PT_TCP));
+        if (ssl) ssl_change_cipher(ssl, ssl_packet_from_server(ssl_associations, pinfo->srcport, pinfo->ptype != PT_UDP));
         break;
     case SSL_ID_ALERT:
     {
@@ -1566,8 +1572,8 @@
         /* we need dissector information when the selected packet is shown.
          * ssl session pointer is NULL at that time, so we can't access
          * info cached there*/
-        association = ssl_association_find(ssl_associations, pinfo->srcport, pinfo->ptype == PT_TCP);
-        association = association ? association: ssl_association_find(ssl_associations, pinfo->destport, pinfo->ptype == PT_TCP);
+        association = ssl_association_find(ssl_associations, pinfo->srcport, pinfo->ptype != PT_UDP);
+        association = association ? association: ssl_association_find(ssl_associations, pinfo->destport, pinfo->ptype != PT_UDP);
 
         proto_item_set_text(ssl_record_tree,
            "%s Record Layer: %s Protocol: %s",
diff -Nur wireshark-1.2.7/epan/dissectors/packet-ssl-utils.c wireshark-1.2.7-fD/epan/dissectors/packet-ssl-utils.c
--- wireshark-1.2.7/epan/dissectors/packet-ssl-utils.c	2010-04-01 01:44:27.000000000 +0900
+++ wireshark-1.2.7-fD/epan/dissectors/packet-ssl-utils.c	2011-02-23 13:33:10.000000000 +0900
@@ -2713,9 +2713,10 @@
     fprintf(stderr, "association_add() could not find handle for protocol:%s\n",protocol);
   } else {
     if(port) {
-      if(tcp)
+      if(tcp) {
         dissector_add("tcp.port", port, handle);
-      else
+        dissector_add("sctp.port", port, handle);
+      } else
         dissector_add("udp.port", port, handle);
     }
     g_tree_insert(associations, assoc, assoc);
diff -Nur wireshark-1.2.7/epan/packet_info.h wireshark-1.2.7-fD/epan/packet_info.h
--- wireshark-1.2.7/epan/packet_info.h	2010-04-01 01:44:40.000000000 +0900
+++ wireshark-1.2.7-fD/epan/packet_info.h	2011-02-23 13:54:52.000000000 +0900
@@ -169,6 +169,7 @@
   tvbuff_t *gssapi_decrypted_tvb;
   gboolean gssapi_data_encrypted;
 
+  guint16 strid; /* Stream Id of the last DATA chunk in the packet */
   guint32 ppid;  /* SCTP PPI of current DATA chunk */
   guint32 ppids[MAX_NUMBER_OF_PPIDS]; /* The first NUMBER_OF_PPIDS PPIDS which are present
                                       * in the SCTP packet
