public virtual void WriteBodyToConnection(Connection connection) { try { if (HasOnTransferProgress) { connection.OnBytesSent += HandleOnBytesSent; connection.ResetStatistics(); } switch (ContentSource) { case ContentSource.ContentBytes: TriggerOnTransferStart(TransferDirection.Send, ContentBytes.Length); connection.Send(ContentBytes); TriggerOnTransferEnd(TransferDirection.Send); break; case ContentSource.ContentStream: TriggerOnTransferStart(TransferDirection.Send, ContentStream.Length); Byte[] lBuffer = new Byte[BUFFER_SIZE]; Int32 lBytesRead; do { lBytesRead = ContentStream.Read(lBuffer, 0, BUFFER_SIZE); if (lBytesRead != 0) connection.Send(lBuffer, 0, lBytesRead); } while (lBytesRead > 0); if (CloseStream) ContentStream.Close(); TriggerOnTransferEnd(TransferDirection.Send); break; case ContentSource.ContentNone: // No action needed break; } if (HasOnTransferProgress) connection.OnBytesSent -= HandleOnBytesSent; } finally { fContentBytes = null; fContentStream = null; fContentString = null; } }