///
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;
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,
// 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;
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();
}
}
}