private void WriteStreamPackageHeader(StreamSendRequest request, StreamPackageType streamPackageType)
        {
            uint header = (uint)streamPackageType | (uint)request.Stream.AssociationId << 3;

            var buffer = BitConverterEx.GetNetworkBytes(header);

            Write(buffer, 0, buffer.Length);
        }
        private void SendStreamEnd(StreamSendRequest request, bool success)
        {
            _sendStreamManager.RemoveStream(request.Stream);

            long packageStart = BeginSendPackage();

            WriteStreamPackageHeader(request, success ? StreamPackageType.EndStream : StreamPackageType.StreamFailed);

            EndSendPackage(PackageType.Stream, packageStart, false);

            RaiseEvent(request.Stream, StreamTransferEventType.End);
        }
        private void SendStreamEnd(StreamSendRequest request)
        {
            long packageStart = BeginSendPackage();

            WriteStreamPackageHeader(request, StreamPackageType.EndStream);

            EndSendPackage(PackageType.Stream, packageStart, false);
        }
        private void SendStreamData(StreamSendRequest request)
        {
            // Send the stream data package.

            long packageStart = BeginSendPackage();

            WriteStreamPackageHeader(request, StreamPackageType.StreamData);

            // Write the stream data. If this fails, we send a stream
            // failure instead.

            try
            {
                WriteStream(request.Stream.Stream, request.Length);

                RaiseEvent(request.Stream, StreamTransferEventType.Transfer);
            }
            catch (Exception ex)
            {
                // If the send stream failed, back up and send the stream
                // failed package.

                Log.Warn("Exception while reading from stream", ex);

                WriteLength = WritePosition = packageStart;

                SendStreamEnd(request, false);

                return;
            }

            request.Stream.Position += request.Length;

            // And send the package.

            EndSendPackage(PackageType.Stream, packageStart, false);
        }
        private void SendStreamData(StreamSendRequest request)
        {
            // Send the stream data package.

            long packageStart = BeginSendPackage();

            WriteStreamPackageHeader(request, StreamPackageType.StreamData);

            // Write the stream data.

            WriteStream(request.Stream.Stream, request.Length);

            // And send the package.

            EndSendPackage(PackageType.Stream, packageStart, false);
        }