aboutsummaryrefslogtreecommitdiffstats
path: root/src/vmime/net/smtp/SMTPChunkingOutputStreamAdapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vmime/net/smtp/SMTPChunkingOutputStreamAdapter.cpp')
-rw-r--r--src/vmime/net/smtp/SMTPChunkingOutputStreamAdapter.cpp94
1 files changed, 54 insertions, 40 deletions
diff --git a/src/vmime/net/smtp/SMTPChunkingOutputStreamAdapter.cpp b/src/vmime/net/smtp/SMTPChunkingOutputStreamAdapter.cpp
index f6ecc54d..3b242d1b 100644
--- a/src/vmime/net/smtp/SMTPChunkingOutputStreamAdapter.cpp
+++ b/src/vmime/net/smtp/SMTPChunkingOutputStreamAdapter.cpp
@@ -1,6 +1,6 @@
//
// VMime library (http://www.vmime.org)
-// Copyright (C) 2002-2013 Vincent Richard <[email protected]>
+// Copyright (C) 2002 Vincent Richard <[email protected]>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -40,21 +40,31 @@ namespace net {
namespace smtp {
-SMTPChunkingOutputStreamAdapter::SMTPChunkingOutputStreamAdapter
- (shared_ptr <SMTPConnection> conn, const size_t size, utility::progressListener* progress)
- : m_connection(conn), m_bufferSize(0), m_chunkCount(0),
- m_totalSize(size), m_totalSent(0), m_progress(progress)
-{
- if (progress)
+SMTPChunkingOutputStreamAdapter::SMTPChunkingOutputStreamAdapter(
+ const shared_ptr <SMTPConnection>& conn,
+ const size_t size,
+ utility::progressListener* progress
+)
+ : m_connection(conn),
+ m_bufferSize(0),
+ m_chunkCount(0),
+ m_totalSize(size),
+ m_totalSent(0),
+ m_progress(progress) {
+
+ if (progress) {
progress->start(size);
+ }
}
-void SMTPChunkingOutputStreamAdapter::sendChunk
- (const byte_t* const data, const size_t count, const bool last)
-{
- if (count == 0 && !last)
- {
+void SMTPChunkingOutputStreamAdapter::sendChunk(
+ const byte_t* const data,
+ const size_t count,
+ const bool last
+) {
+
+ if (count == 0 && !last) {
// Nothing to send
return;
}
@@ -65,45 +75,45 @@ void SMTPChunkingOutputStreamAdapter::sendChunk
++m_chunkCount;
- if (m_progress)
- {
+ if (m_progress) {
+
m_totalSent += count;
m_totalSize = std::max(m_totalSize, m_totalSent);
m_progress->progress(m_totalSent, m_totalSize);
}
- if (m_connection->getTracer())
+ if (m_connection->getTracer()) {
m_connection->getTracer()->traceSendBytes(count);
+ }
// If PIPELINING is not supported, read one response for this BDAT command
- if (!m_connection->hasExtension("PIPELINING"))
- {
+ if (!m_connection->hasExtension("PIPELINING")) {
+
shared_ptr <SMTPResponse> resp = m_connection->readResponse();
- if (resp->getCode() != 250)
- {
+ if (resp->getCode() != 250) {
m_connection->getTransport()->disconnect();
throw exceptions::command_error("BDAT", resp->getText());
}
- }
+
// If PIPELINING is supported, read one response for each chunk (ie. number
// of BDAT commands issued) after the last chunk has been sent
- else if (last)
- {
+ } else if (last) {
+
bool invalidReply = false;
shared_ptr <SMTPResponse> resp;
- for (unsigned int i = 0 ; i < m_chunkCount ; ++i)
- {
+ for (unsigned int i = 0 ; i < m_chunkCount ; ++i) {
+
resp = m_connection->readResponse();
- if (resp->getCode() != 250)
+ if (resp->getCode() != 250) {
invalidReply = true;
+ }
}
- if (invalidReply)
- {
+ if (invalidReply) {
m_connection->getTransport()->disconnect();
throw exceptions::command_error("BDAT", resp->getText());
}
@@ -111,14 +121,16 @@ void SMTPChunkingOutputStreamAdapter::sendChunk
}
-void SMTPChunkingOutputStreamAdapter::writeImpl
- (const byte_t* const data, const size_t count)
-{
+void SMTPChunkingOutputStreamAdapter::writeImpl(
+ const byte_t* const data,
+ const size_t count
+) {
+
const byte_t* curData = data;
size_t curCount = count;
- while (curCount != 0)
- {
+ while (curCount != 0) {
+
// Fill the buffer
const size_t remaining = sizeof(m_buffer) - m_bufferSize;
const size_t bytesToCopy = std::min(remaining, curCount);
@@ -130,8 +142,8 @@ void SMTPChunkingOutputStreamAdapter::writeImpl
curCount -= bytesToCopy;
// If the buffer is full, send this chunk
- if (m_bufferSize >= sizeof(m_buffer))
- {
+ if (m_bufferSize >= sizeof(m_buffer)) {
+
sendChunk(m_buffer, m_bufferSize, /* last */ false);
m_bufferSize = 0;
}
@@ -139,21 +151,23 @@ void SMTPChunkingOutputStreamAdapter::writeImpl
}
-void SMTPChunkingOutputStreamAdapter::flush()
-{
+void SMTPChunkingOutputStreamAdapter::flush() {
+
sendChunk(m_buffer, m_bufferSize, /* last */ true);
m_bufferSize = 0;
- if (m_progress)
+ if (m_progress) {
m_progress->stop(m_totalSize);
+ }
- if (m_connection->getTracer())
+ if (m_connection->getTracer()) {
m_connection->getTracer()->traceSendBytes(m_bufferSize);
+ }
}
-size_t SMTPChunkingOutputStreamAdapter::getBlockSize()
-{
+size_t SMTPChunkingOutputStreamAdapter::getBlockSize() {
+
return sizeof(m_buffer);
}