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;
			}
		}