public TDSPacket(byte[] bHeader, byte[] bPayload, int iPayloadSize) { _header = new TDSHeader(bHeader); _payload = new byte[iPayloadSize]; Array.Copy(bPayload, 0, _payload, 0, iPayloadSize); }
public TDSPacket(byte[] bBuffer) { _header = new TDSHeader(bBuffer); _payload = new byte[_header.LengthIncludingHeader - TDSHeader.HEADER_SIZE]; Array.Copy(bBuffer, TDSHeader.HEADER_SIZE, _payload, 0, _payload.Length); }
protected virtual void BridgeSQLThread() { try { var bBuffer = new byte[4096]; var iReceived = 0; while ((iReceived = SocketCouple.BridgeSQLSocket.Receive(bBuffer, SocketFlags.None)) > 0) { var header = new TDSHeader(bBuffer); //Console.WriteLine("[OUT][" + header.Type.ToString() + "]{" + iReceived + "}"); SocketCouple.ClientBridgeSocket.Send(bBuffer, iReceived, SocketFlags.None); //Console.WriteLine("RESPONSE"); //Console.WriteLine(System.Text.Encoding.Unicode.GetString(bBuffer)); //Console.WriteLine(BitConverter.ToString(bBuffer).Replace("-", " ")); } } catch (Exception e) { OnBridgeException(ConnectionType.BridgeSQL, e); } OnConnectionDisconnected(ConnectionType.BridgeSQL); //Console.WriteLine("Closing OutputThread"); }
public void BuildMessage(HeaderType messageType, byte[] lPayLoad) { var packet_size = 4096 - 8; Packets.Clear(); for (var lower = 0; lower < lPayLoad.Length; lower += packet_size) { var payloadSize = lPayLoad.Length - lower; if (payloadSize > packet_size) { payloadSize = packet_size; } // Create new TDS header var header = new TDSHeader(); header.Type = messageType; if (lPayLoad.Length - lower <= packet_size) { header.StatusBitMask = StatusBitMask.END_OF_MESSAGE; } else { header.StatusBitMask = StatusBitMask.NORMAL; } header.PayloadSize = payloadSize; var payload = new byte[payloadSize]; Array.Copy(lPayLoad, lower, payload, 0, payloadSize); // Create new TDS packet with new TDS header and payload var newPacket = new TDSPacket(header.Data, payload, payloadSize); // Add packet into message Packets.Add(newPacket); } }
protected virtual void ClientBridgeThread() { try { byte[] bBuffer = null; var bHeader = new byte[TDSHeader.HEADER_SIZE]; var iReceived = 0; TDSMessage tdsMessage = null; while ((iReceived = SocketCouple.ClientBridgeSocket.Receive(bHeader, TDSHeader.HEADER_SIZE, SocketFlags.None)) > 0) //while ((iReceived = sc.InputSocket.Receive(bBuffer, SocketFlags.None)) > 0) { var header = new TDSHeader(bHeader); var iMinBufferSize = Math.Max(0x1000, header.LengthIncludingHeader + 1); if (bBuffer == null || bBuffer.Length < iMinBufferSize) { bBuffer = new byte[iMinBufferSize]; } //Console.WriteLine(header.Type); if (header.Type == (HeaderType)23) { iReceived = SocketCouple.ClientBridgeSocket.Receive(bBuffer, 0, 0x1000 - TDSHeader.HEADER_SIZE, SocketFlags.None); } else if (header.PayloadSize > 0) { SocketCouple.ClientBridgeSocket.Receive(bBuffer, 0, header.PayloadSize, SocketFlags.None); } var tdsPacket = new TDSPacket(bHeader, bBuffer, header.PayloadSize); OnTDSPacketReceived(tdsPacket); if (tdsMessage == null) { tdsMessage = TDSMessage.CreateFromFirstPacket(tdsPacket); } else { tdsMessage.Packets.Add(tdsPacket); } if (!(tdsMessage is SQLBatchMessage)) // By Calvin: If message is not SQL command, do not intercept { SocketCouple.BridgeSQLSocket.Send(bHeader, bHeader.Length, SocketFlags.None); if (header.Type == (HeaderType)23) { SocketCouple.BridgeSQLSocket.Send(bBuffer, iReceived, SocketFlags.None); } else { SocketCouple.BridgeSQLSocket.Send(bBuffer, header.PayloadSize, SocketFlags.None); } } if ((header.StatusBitMask & StatusBitMask.END_OF_MESSAGE) == StatusBitMask.END_OF_MESSAGE) { OnTDSMessageReceived(tdsMessage); // By Calvin: If message is SQL command, intercept if (tdsMessage is SQLBatchMessage) { //Console.WriteLine("REQUEST"); //Console.WriteLine(System.Text.Encoding.Unicode.GetString(tdsMessage.Packets[0].Payload)); //Console.WriteLine(BitConverter.ToString(tdsMessage.Packets[0].Payload)); // Modify it here var b = (SQLBatchMessage)tdsMessage; if (b.GetBatchText().Contains("showmethemoney")) { SQLModifier.ChangeSQL(b.GetBatchText(), this); } else { foreach (var packet in b.Packets) { //Console.WriteLine(packet.Payload.Length + " | " +packet.Header.PayloadSize); SocketCouple.BridgeSQLSocket.Send(packet.Header.Data, packet.Header.Data.Length, SocketFlags.None); SocketCouple.BridgeSQLSocket.Send(packet.Payload, packet.Header.PayloadSize, SocketFlags.None); } } } tdsMessage = null; } } } catch (Exception e) { OnBridgeException(ConnectionType.ClientBridge, e); } OnConnectionDisconnected(ConnectionType.ClientBridge); //Console.WriteLine("Closing InputThread"); }