Exemple #1
0
        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);
        }
Exemple #3
0
        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);
        }