Update of /cvsroot/pgsqlclient/pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient
In directory sc8-pr-cvs1:/tmp/cvs-serv4460
Modified Files:
PgDbClient.cs PgStatement.cs
Log Message:
Changes for bettrer handling of TLS connections
Index: PgDbClient.cs
===================================================================
RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient/PgDbClient.cs,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** PgDbClient.cs 14 Sep 2003 19:14:37 -0000 1.11
--- PgDbClient.cs 15 Sep 2003 11:56:19 -0000 1.12
***************
*** 234,237 ****
--- 234,245 ----
}
+ // Seems that in TLS mode PostgreSQL sends messages with length 0
+ // if we have a packet like this we will return an empty packet in
+ // response
+ if (buffer.Length == 0)
+ {
+ return new PgResponsePacket('\0', new byte[0]{});
+ }
+
lock (this)
{
***************
*** 241,244 ****
--- 249,272 ----
{
int length = buffer.ReadInt() - 4;
+ if (length > (buffer.Length - buffer.Position))
+ {
+ PgOutputPacket w = new PgOutputPacket();
+ w.Write(buffer.ReadBytes(length));
+ while (true)
+ {
+ byte[] b = receive.ReadBytes();
+ w.Write(b);
+
+ if (b.Length != 0)
+ {
+ break;
+ }
+ }
+
+ buffer.Reset();
+ buffer = new PgResponsePacket(w.GetBytes());
+
+ w.Reset();
+ }
responsePacket = new PgResponsePacket(type, buffer.ReadBytes(length));
}
Index: PgStatement.cs
===================================================================
RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient/PgStatement.cs,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** PgStatement.cs 20 Aug 2003 11:53:19 -0000 1.3
--- PgStatement.cs 15 Sep 2003 11:56:19 -0000 1.4
***************
*** 312,318 ****
db.Flush();
! // Receive response
! PgResponsePacket response = db.ReceiveResponsePacket();
! processSqlPacket(response);
// Update status
--- 312,322 ----
db.Flush();
! // Read BIND Complete message
! PgResponsePacket response = new PgResponsePacket();
! while (response.Message != PgBackendCodes.BIND_COMPLETE)
! {
! response = db.ReceiveResponsePacket();
! processSqlPacket(response);
! }
// Update status
|