aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2006-11-18 09:27:30 +0000
committerVincent Richard <[email protected]>2006-11-18 09:27:30 +0000
commitafc1548ac40021a3ce53b9e0d45cfe327f69548d (patch)
tree3be6b70f829f7034e41f64a35d2ec4169a1b86cf /src
parentTemporary fix for socket stream copy. (diff)
downloadvmime-afc1548ac40021a3ce53b9e0d45cfe327f69548d.tar.gz
vmime-afc1548ac40021a3ce53b9e0d45cfe327f69548d.zip
Preferred block size for streams.
Diffstat (limited to 'src')
-rw-r--r--src/utility/stream.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/utility/stream.cpp b/src/utility/stream.cpp
index f2a89a55..48869958 100644
--- a/src/utility/stream.cpp
+++ b/src/utility/stream.cpp
@@ -32,6 +32,14 @@ namespace vmime {
namespace utility {
+// stream
+
+const stream::size_type stream::getBlockSize() const
+{
+ return 32768; // 32 KB
+}
+
+
// Helpers
outputStream& operator<<(outputStream& os, const stream::value_type c)
@@ -57,7 +65,12 @@ const stream::size_type bufferedStreamCopy(inputStream& is, outputStream& os)
const stream::size_type bufferedStreamCopy(inputStream& is, outputStream& os,
const stream::size_type length, progressListener* progress)
{
- stream::value_type buffer[16384];
+ const stream::size_type blockSize =
+ std::min(is.getBlockSize(), os.getBlockSize());
+
+ std::vector <stream::value_type> vbuffer(blockSize);
+
+ stream::value_type* buffer = &vbuffer.front();
stream::size_type total = 0;
if (progress != NULL)
@@ -443,6 +456,13 @@ void outputStreamSocketAdapter::flush()
}
+const stream::size_type outputStreamSocketAdapter::getBlockSize() const
+{
+ return 16384; // 16 KB
+}
+
+
+
// inputStreamSocketAdapter
inputStreamSocketAdapter::inputStreamSocketAdapter(net::socket& sok)
@@ -479,6 +499,12 @@ const stream::size_type inputStreamSocketAdapter::skip
}
+const stream::size_type inputStreamSocketAdapter::getBlockSize() const
+{
+ return 16384; // 16 KB
+}
+
+
#endif // VMIME_HAVE_MESSAGING_FEATURES