public static TDSHeader Read(TDSReader r) // TODo - not all token types have a TDS Header, like APPDATA or perhaps SSPI - needs more research { TDSHeader head = new TDSHeader(); head.PacketType = r.ReadByte(); if (head.PacketType != (byte)TDSPacketType.SQLBATCH && head.PacketType != (byte)TDSPacketType.LOGIN && head.PacketType != (byte)TDSPacketType.RPC && head.PacketType != (byte)TDSPacketType.RESPONSE && head.PacketType != (byte)TDSPacketType.ATTENTION && head.PacketType != (byte)TDSPacketType.BULKLOAD && head.PacketType != (byte)TDSPacketType.DTC && head.PacketType != (byte)TDSPacketType.LOGIN7 && head.PacketType != (byte)TDSPacketType.SSPI && head.PacketType != (byte)TDSPacketType.PRELOGIN && head.PacketType != (byte)TDSPacketType.APPDATA) { throw new InvalidTDSException("Unknown token type: " + head.PacketType); } head.Status = r.ReadByte(); if (head.Status > 31) { throw new InvalidTDSException("Unknown Status value: " + head.Status); // supposed to ignore other flag fields } head.Length = r.ReadBigEndianUInt16(); head.SPID = r.ReadBigEndianUInt16(); head.PacketID = r.ReadByte(); head.Window = r.ReadByte(); if (head.Window != 0) { throw new InvalidTDSException("Invalid TDS Window value: " + head.Window); // supposed to ignore } return(head); }
public TDSHeader GetTDSHeader() { TDSHeader head = null; TDSReader r = null; // TDSReader does not need to be closed; GC is all it needs try { r = new TDSReader(payload, 0); // header does not span packets, so we can read without aggregating head = TDSHeader.Read(r); } catch (Exception) { return(null); } // null if error return(head); }
public TDSHeader GetTDSHeader() { if (frames == null) { throw new InvalidOperationException("Packet must have at least one frame."); } TDSHeader head = null; TDSReader r = null; // TDSReader does not need to be closed; GC is all it needs try { r = new TDSReader(((FrameData)(frames[0])).payload, 0); // header does not span packets, so we can read without aggregating head = TDSHeader.Read(r); } catch (Exception) { return(null); } // null if error return(head); }