Esempio n. 1
0
 public Task WriteAsPacketsAsync(
     Stream stream,
     ushort packetLength,
     ushort spid,
     CancellationToken cancellationToken,
     TDSStatus status = TDSStatus.Normal,
     TDSMessageType?overrideMessageType = null)
 {
     return(TDSPacket.WriteMessageAsync(stream, packetLength, spid, this, cancellationToken, status, overrideMessageType));
 }
Esempio n. 2
0
        public static async Task WriteMessageAsync(
            Stream stream,
            ushort packetLength,
            ushort spid,
            TDSMessage message,
            CancellationToken cancellationToken,
            TDSStatus status = TDSStatus.Normal,
            TDSMessageType?overrideMessageType = null)
        {
            status &= ~TDSStatus.EndOfMessage;

            message.EnsurePayload();
            var payload          = message.Payload;
            var packet           = new byte[Math.Min(payload.Length + HeaderLength, packetLength)];
            int payloadOffset    = 0;
            int maxPacketPayload = packetLength - HeaderLength;
            var messageType      = overrideMessageType ?? message.MessageType;

            byte packetId = 1;

            while (payloadOffset < payload.Length)
            {
                ushort thisPayloadLength = (ushort)Math.Min(payload.Length - payloadOffset, maxPacketPayload);
                ushort thisPacketLength  = (ushort)(thisPayloadLength + HeaderLength);
                if (payloadOffset + thisPayloadLength >= payload.Length)
                {
                    status |= TDSStatus.EndOfMessage;
                }

                packet[0] = (byte)messageType;
                packet[1] = (byte)status;
                packet[2] = (byte)((thisPacketLength >> 8) & 0xff);
                packet[3] = (byte)(thisPacketLength & 0xff);
                packet[4] = (byte)((spid >> 8) & 0xff);
                packet[5] = (byte)(spid & 0xff);
                packet[6] = packetId++;
                packet[7] = 0;
                Buffer.BlockCopy(payload, payloadOffset, packet, HeaderLength, thisPayloadLength);
                await stream.WriteAsync(packet, 0, thisPacketLength, cancellationToken);

                if (DumpPackets)
                {
                    log.DebugFormat("Wrote {0} packet. Data:\r\n{1}", messageType, packet.FormatAsHex());
                }

                payloadOffset += thisPayloadLength;
            }
        }
Esempio n. 3
0
 public static Task WriteMessageAsync(
     Stream stream, ushort packetLength, ushort spid, TDSMessage message, TDSStatus status = TDSStatus.Normal, TDSMessageType?overrideMessageType = null)
 {
     return(WriteMessageAsync(stream, packetLength, spid, message, CancellationToken.None, status, overrideMessageType));
 }
Esempio n. 4
0
 public static void WriteMessage(
     Stream stream, ushort packetLength, ushort spid, TDSMessage message, TDSStatus status = TDSStatus.Normal, TDSMessageType?overrideMessageType = null)
 {
     WriteMessageAsync(stream, packetLength, spid, message, status, overrideMessageType).Wait();
 }
Esempio n. 5
0
 public void WriteAsPackets(Stream stream, ushort packetLength, ushort spid, TDSStatus status = TDSStatus.Normal, TDSMessageType?overrideMessageType = null)
 {
     TDSPacket.WriteMessage(stream, packetLength, spid, this, status, overrideMessageType);
 }