Update of /cvsroot/pgsqlclient/pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient
In directory sc8-pr-cvs1:/tmp/cvs-serv15223
Modified Files:
PgDbClient.cs
Log Message:
Added changes to read, write stuff of the TLS library:
* Removed TlsReader and TlsWriter
* Added TlsSocket and TlsNetworkStream
* Renamed TlsSessionState as TlsSessionContext
Index: PgDbClient.cs
===================================================================
RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient/PgDbClient.cs,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** PgDbClient.cs 15 Sep 2003 21:33:45 -0000 1.13
--- PgDbClient.cs 16 Sep 2003 12:29:42 -0000 1.14
***************
*** 51,56 ****
private int secretKey;
private Hashtable parameterStatus;
! private TlsWriter send;
! private TlsReader receive;
private PgConnectionParams settings;
private char transactionStatus;
--- 51,56 ----
private int secretKey;
private Hashtable parameterStatus;
! private BinaryReader receive;
! private BinaryWriter send;
private PgConnectionParams settings;
private char transactionStatus;
***************
*** 96,105 ****
}
! public TlsReader Receive
{
get { return receive; }
}
! public TlsWriter Send
{
get { return send; }
--- 96,105 ----
}
! public BinaryReader Receive
{
get { return receive; }
}
! public BinaryWriter Send
{
get { return send; }
***************
*** 140,147 ****
lock (this)
{
! TlsSessionSettings tlsSettings = new TlsSessionSettings(TlsProtocol.Tls1, settings.ServerName, settings.ServerPort);
session = new TlsSession(tlsSettings);
! send = session.GetWriter();
! receive = session.GetReader();
if (settings.SSL)
--- 140,156 ----
lock (this)
{
! // Configure TLS Session Settings
! TlsSessionSettings tlsSettings = new TlsSessionSettings();
!
! tlsSettings.Protocol = TlsProtocol.Tls1;
! tlsSettings.ServerName = settings.ServerName;
! tlsSettings.ServerPort = settings.ServerPort;
!
! // Create a new TLS Session
session = new TlsSession(tlsSettings);
!
! // Create objects for read & write
! receive = new BinaryReader(session.NetworkStream);
! send = new BinaryWriter(session.NetworkStream);
if (settings.SSL)
***************
*** 155,164 ****
{
// Start TLS Session
! session.StartSession();
}
catch (TlsException ex)
{
// If the exception is fatal close connection
! session.EndSession();
throw new PgClientException(ex.Message);
--- 164,173 ----
{
// Start TLS Session
! session.Open();
}
catch (TlsException ex)
{
// If the exception is fatal close connection
! session.Close();
throw new PgClientException(ex.Message);
***************
*** 194,198 ****
catch (PgClientException ex)
{
! session.EndSession();
throw ex;
}
--- 203,207 ----
catch (PgClientException ex)
{
! session.Close();
throw ex;
}
***************
*** 208,212 ****
// End session
! session.EndSession();
}
catch (PgClientException ex)
--- 217,221 ----
// End session
! session.Close();
}
catch (PgClientException ex)
***************
*** 237,248 ****
}
! if (settings.SSL)
! {
! responsePacket = this.receiveTLSPacket(isSslRequest);
! }
! else
! {
! responsePacket = this.receiveStandardPacket(isSslRequest);
! }
switch (responsePacket.Message)
--- 246,250 ----
}
! responsePacket = this.receiveStandardPacket(isSslRequest);
switch (responsePacket.Message)
***************
*** 301,362 ****
return responsePacket;
- }
-
- private PgResponsePacket receiveTLSPacket(bool isSslRequest)
- {
- PgResponsePacket responsePacket = null;
- if (buffer.Length == 1 ||
- buffer.Pending < 4 ||
- buffer.EOF)
- {
- updateBuffer();
- }
-
- // 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(' ', new byte[0]{});
- }
-
- char type = buffer.ReadChar();
- if (isSslRequest)
- {
- responsePacket = new PgResponsePacket(type, new byte[0]{});
- }
- else
- {
- int length = buffer.ReadInt() - 4;
- while (length > buffer.Pending)
- {
- this.updateBuffer();
- }
- responsePacket = new PgResponsePacket(type, buffer.ReadBytes(length));
- }
- responsePacket.Encoding = Settings.Encoding;
-
- return responsePacket;
- }
-
- private void updateBuffer()
- {
- PgOutputPacket w = new PgOutputPacket();
- w.Write(buffer.ReadBytes((int)buffer.Pending));
- while (true)
- {
- byte[] b = receive.ReadBytes();
- w.Write(b);
-
- if (b.Length != 0)
- {
- break;
- }
- }
-
- buffer.Reset();
- buffer = new PgResponsePacket(w.GetBytes());
-
- w.Reset();
}
--- 303,306 ----
|