Make System.Web.Script.Serialization.JavaScriptSerializer.ConvertToType(Type, object...
[mono.git] / mcs / class / Npgsql / Npgsql / NpgsqlStartupPacket.cs
old mode 100755 (executable)
new mode 100644 (file)
index b57a1c0..47ef00f
@@ -2,23 +2,24 @@
 
 
 // Npgsql.NpgsqlStartupPacket.cs
-// 
+//
 // Author:
 //     Francisco Jr. (fxjrlists@yahoo.com.br)
 //
 //     Copyright (C) 2002 The Npgsql Development Team
+//     npgsql-general@gborg.postgresql.org
+//     http://gborg.postgresql.org/project/npgsql/projdisplay.php
 //
-
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
 // version 2.1 of the License, or (at your option) any later version.
-// 
+//
 // This library 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
 // Lesser General Public License for more details.
-// 
+//
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -30,82 +31,125 @@ using System.Net;
 
 namespace Npgsql
 {
-       
-       /// <summary>
-       /// This class represents a StartupPacket message of PostgreSQL
-       /// protocol.
-       /// </summary>
-       /// 
-       internal sealed class NpgsqlStartupPacket
-       {
-               
-               // Logging related values
-    private static readonly String CLASSNAME = "NpgsqlStartupPacket";
-               
-               // Private fields.
-               private Int32 packet_size;
-               private Int32 protocol_version;
-               private String database_name;
-               private String user_name;
-               private String arguments;
-               private String unused;
-               private String optional_tty;
-                               
-               public NpgsqlStartupPacket(Int32 packet_size, 
-                                          Int32 protocol_version_major,
-                                          Int32 protocol_version_minor,
-                                          String database_name, 
-                                          String user_name,
-                                          String arguments,
-                                          String unused,
-                                          String optional_tty)
-               {
-                       
-                       NpgsqlEventLog.LogMsg("Entering " + CLASSNAME + ".NpgsqlStartupPacket()", LogLevel.Debug);
-                       // Just copy the values.
-                       
-                       // [FIXME] Validate params? We are the only clients, so, hopefully, we
-                       // know what to send.
-                       
-                       this.packet_size = packet_size;
-                 this.protocol_version = (protocol_version_major<<16) | protocol_version_minor; 
-                       this.database_name = database_name;
-                 this.user_name = user_name;
-                 this.arguments = arguments;
-                       this.unused = unused;
-                 this.optional_tty = optional_tty;
-                       
-               }
-               
-               public void WriteToStream(Stream output_stream, Encoding encoding)
-               {
-                       
-                       NpgsqlEventLog.LogMsg("Entering " + CLASSNAME + ".WriteToStream()", LogLevel.Debug);
-                       
-                       // [FIXME] Need exception handling ?
-                       
-                       // Packet length = 296
-      output_stream.Write(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(this.packet_size)), 0, 4);
-               
-      // Protocol version = 2.0
-      output_stream.Write(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(this.protocol_version)), 0, 4);
-               
-      // Database name.
-                       PGUtil.WriteLimString(this.database_name, 64, output_stream, encoding);
-      
-      // User name.
-      PGUtil.WriteLimString(this.user_name, 32, output_stream, encoding);
-       
-       // Arguments.
-       PGUtil.WriteLimString(this.arguments, 64, output_stream, encoding);
-                       
-      // Unused.
-      PGUtil.WriteLimString(this.unused, 64, output_stream, encoding);
-      
-      // Optional tty.
-      PGUtil.WriteLimString(this.optional_tty, 64, output_stream, encoding);
-                       
-                       
-               }
-       }
+
+    /// <summary>
+    /// This class represents a StartupPacket message of PostgreSQL
+    /// protocol.
+    /// </summary>
+    ///
+    internal sealed class NpgsqlStartupPacket
+    {
+        // Logging related values
+        private static readonly String CLASSNAME = "NpgsqlStartupPacket";
+
+        // Private fields.
+        private Int32 packet_size;
+        private ProtocolVersion protocol_version;
+        private String database_name;
+        private String user_name;
+        private String arguments;
+        private String unused;
+        private String optional_tty;
+
+        public NpgsqlStartupPacket(Int32 packet_size,
+                                   ProtocolVersion protocol_version,
+                                   String database_name,
+                                   String user_name,
+                                   String arguments,
+                                   String unused,
+                                   String optional_tty)
+        {
+
+            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, CLASSNAME);
+            // Just copy the values.
+
+            // [FIXME] Validate params? We are the only clients, so, hopefully, we
+            // know what to send.
+
+            this.packet_size = packet_size;
+            this.protocol_version = protocol_version;
+
+            this.database_name = database_name;
+            this.user_name = user_name;
+            this.arguments = arguments;
+            this.unused = unused;
+            this.optional_tty = optional_tty;
+
+        }
+
+
+        public void WriteToStream(Stream output_stream, Encoding encoding)
+        {
+            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "WriteToStream");
+
+            switch (protocol_version) {
+            case ProtocolVersion.Version2 :
+                WriteToStream_Ver_2(output_stream, encoding);
+                break;
+
+            case ProtocolVersion.Version3 :
+                WriteToStream_Ver_3(output_stream, encoding);
+                break;
+
+            }
+        }
+
+
+        private void WriteToStream_Ver_2(Stream output_stream, Encoding encoding)
+                               {
+            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "WriteToStream_Ver_2");
+
+            // Packet length = 296
+            output_stream.Write(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(this.packet_size)), 0, 4);
+
+            output_stream.Write(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(PGUtil.ConvertProtocolVersion(this.protocol_version))), 0, 4);
+
+            // Database name.
+            PGUtil.WriteLimString(this.database_name, 64, output_stream, encoding);
+
+            // User name.
+            PGUtil.WriteLimString(this.user_name, 32, output_stream, encoding);
+
+            // Arguments.
+            PGUtil.WriteLimString(this.arguments, 64, output_stream, encoding);
+
+            // Unused.
+            PGUtil.WriteLimString(this.unused, 64, output_stream, encoding);
+
+            // Optional tty.
+            PGUtil.WriteLimString(this.optional_tty, 64, output_stream, encoding);
+            output_stream.Flush();
+        }
+
+
+        private void WriteToStream_Ver_3(Stream output_stream, Encoding encoding)
+        {
+            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "WriteToStream_Ver_3");
+
+            PGUtil.WriteInt32(output_stream, 4 + 4 + 5 + (encoding.GetByteCount(user_name) + 1) + 9 + (encoding.GetByteCount(database_name) + 1) + 10 + 4 + 1);
+
+            PGUtil.WriteInt32(output_stream, Npgsql.PGUtil.ConvertProtocolVersion(this.protocol_version));
+
+            // User name.
+            PGUtil.WriteString("user", output_stream, encoding);
+
+            // User name.
+            PGUtil.WriteString(user_name, output_stream, encoding);
+
+            // Database name.
+            PGUtil.WriteString("database", output_stream, encoding);
+
+            // Database name.
+            PGUtil.WriteString(database_name, output_stream, encoding);
+
+            // DateStyle.
+            PGUtil.WriteString("DateStyle", output_stream, encoding);
+
+            // DateStyle.
+            PGUtil.WriteString("ISO", output_stream, encoding);
+
+            output_stream.WriteByte(0);
+            output_stream.Flush();
+        }
+    }
 }