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 764d5ad..47ef00f
@@ -39,13 +39,12 @@ namespace Npgsql
     ///
     internal sealed class NpgsqlStartupPacket
     {
-
         // Logging related values
         private static readonly String CLASSNAME = "NpgsqlStartupPacket";
 
         // Private fields.
         private Int32 packet_size;
-        private Int32 protocol_version;
+        private ProtocolVersion protocol_version;
         private String database_name;
         private String user_name;
         private String arguments;
@@ -53,8 +52,7 @@ namespace Npgsql
         private String optional_tty;
 
         public NpgsqlStartupPacket(Int32 packet_size,
-                                   Int32 protocol_version_major,
-                                   Int32 protocol_version_minor,
+                                   ProtocolVersion protocol_version,
                                    String database_name,
                                    String user_name,
                                    String arguments,
@@ -69,7 +67,8 @@ namespace Npgsql
             // know what to send.
 
             this.packet_size = packet_size;
-            this.protocol_version = (protocol_version_major<<16) | protocol_version_minor;
+            this.protocol_version = protocol_version;
+
             this.database_name = database_name;
             this.user_name = user_name;
             this.arguments = arguments;
@@ -81,73 +80,76 @@ namespace Npgsql
 
         public void WriteToStream(Stream output_stream, Encoding encoding)
         {
-
             NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "WriteToStream");
 
-            // [FIXME] Need exception handling ?
+            switch (protocol_version) {
+            case ProtocolVersion.Version2 :
+                WriteToStream_Ver_2(output_stream, encoding);
+                break;
 
-            if (protocol_version == ProtocolVersion.Version2) // Protocol 2.0
-            {
+            case ProtocolVersion.Version3 :
+                WriteToStream_Ver_3(output_stream, encoding);
+                break;
 
-                // 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);
+        private void WriteToStream_Ver_2(Stream output_stream, Encoding encoding)
+                               {
+            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "WriteToStream_Ver_2");
 
-                // Unused.
-                PGUtil.WriteLimString(this.unused, 64, output_stream, encoding);
+            // Packet length = 296
+            output_stream.Write(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(this.packet_size)), 0, 4);
 
-                // Optional tty.
-                PGUtil.WriteLimString(this.optional_tty, 64, output_stream, encoding);
-                output_stream.Flush();
+            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);
 
-            if (protocol_version >= ProtocolVersion.Version3) // Protocol 3+
-            {
-                PGUtil.WriteInt32(output_stream, 4 + 4 + 5 + (encoding.GetByteCount(user_name) + 1) + 9 + (encoding.GetByteCount(database_name) + 1) + 10 + 4 + 1);
+            // User name.
+            PGUtil.WriteLimString(this.user_name, 32, output_stream, encoding);
 
-                // Protocol version = 3.0
+            // Arguments.
+            PGUtil.WriteLimString(this.arguments, 64, output_stream, encoding);
 
-                PGUtil.WriteInt32(output_stream, this.protocol_version);
+            // Unused.
+            PGUtil.WriteLimString(this.unused, 64, output_stream, encoding);
 
-                // User name.
+            // Optional tty.
+            PGUtil.WriteLimString(this.optional_tty, 64, output_stream, encoding);
+            output_stream.Flush();
+        }
 
-                PGUtil.WriteString("user", output_stream, encoding);
 
-                // User name.
-                PGUtil.WriteString(user_name, output_stream, encoding);
+        private void WriteToStream_Ver_3(Stream output_stream, Encoding encoding)
+        {
+            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "WriteToStream_Ver_3");
 
-                // Database name.
-                PGUtil.WriteString("database", output_stream, encoding);
+            PGUtil.WriteInt32(output_stream, 4 + 4 + 5 + (encoding.GetByteCount(user_name) + 1) + 9 + (encoding.GetByteCount(database_name) + 1) + 10 + 4 + 1);
 
-                // Database name.
-                PGUtil.WriteString(database_name, output_stream, encoding);
-                
-                // DateStyle.
-                PGUtil.WriteString("DateStyle", output_stream, encoding);
+            PGUtil.WriteInt32(output_stream, Npgsql.PGUtil.ConvertProtocolVersion(this.protocol_version));
 
-                // DateStyle.
-                PGUtil.WriteString("ISO", output_stream, encoding);
+            // User name.
+            PGUtil.WriteString("user", output_stream, encoding);
 
-                output_stream.WriteByte(0);
-                output_stream.Flush();
+            // 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();
         }
     }
 }