/// <summary> /// Send TDS Message to the server. /// </summary> /// <param name="data">TDS Message Data</param> public void SendTDSMessage(ITDSPacketData data) { switch (this.communicatorState) { case TDSCommunicatorState.Initial: { if (!(data is TDSPreLoginPacketData)) { throw new InvalidDataException(); } this.innerTdsStream.CurrentOutboundMessageType = TDSMessageType.PreLogin; break; } case TDSCommunicatorState.SentInitialPreLogin: { if (!(data is TDSLogin7PacketData)) { throw new InvalidDataException(); } this.innerTdsStream.CurrentOutboundMessageType = TDSMessageType.TDS7Login; break; } case TDSCommunicatorState.LoggedIn: { throw new NotSupportedException(); } default: { throw new InvalidOperationException(); } } var buffer = new byte[data.Length()]; data.Pack(new MemoryStream(buffer)); this.innerStream.Write(buffer, 0, buffer.Length); switch (this.communicatorState) { case TDSCommunicatorState.Initial: { this.communicatorState = TDSCommunicatorState.SentInitialPreLogin; break; } case TDSCommunicatorState.SentInitialPreLogin: { this.communicatorState = TDSCommunicatorState.SentLogin7RecordWithCompleteAuthToken; break; } } }
/// <summary> /// Receive TDS Message from the server. /// </summary> /// <returns>Returns received TDS Message.</returns> public ITDSPacketData ReceiveTDSMessage() { if (TDSSQLTestClient.flag == TDSEncryptionOption.EncryptOff && this.communicatorState == TDSCommunicatorState.Initial) { this.communicatorState = TDSCommunicatorState.SentLogin7RecordWithCompleteAuthToken; } TDSSQLTestClient.flag = TDSEncryptionOption.EncryptOn; byte[] resultBuffer = null; var curOffset = 0; if (this.communicatorState == TDSCommunicatorState.SentLogin7RecordWithCompleteAuthToken) { } do { Array.Resize(ref resultBuffer, curOffset + this.packetSize); curOffset += this.innerStream.Read(resultBuffer, curOffset, this.packetSize); }while (!this.innerTdsStream.InboundMessageTerminated); Array.Resize(ref resultBuffer, curOffset); ITDSPacketData result; switch (this.communicatorState) { case TDSCommunicatorState.SentInitialPreLogin: { result = new TDSPreLoginPacketData(); result.Unpack(new MemoryStream(resultBuffer)); break; } case TDSCommunicatorState.SentLogin7RecordWithCompleteAuthToken: { result = new TDSTokenStreamPacketData(); result.Unpack(new MemoryStream(resultBuffer)); break; } default: { throw new InvalidOperationException(); } } return(result); }