summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2011-09-30 18:46:42 (GMT)
committerRemko Tronçon <git@el-tramo.be>2011-09-30 18:46:42 (GMT)
commit1b255f6ba90847240b92126deb5ea0174ad269b0 (patch)
tree9d56e647ebc35c0f0941d19a302b888c1185ce1c /Swiften/FileTransfer/IBBSendSession.cpp
parentaf976a75b5e1b504a340602659ef930109cd2c48 (diff)
downloadswift-contrib-1b255f6ba90847240b92126deb5ea0174ad269b0.zip
swift-contrib-1b255f6ba90847240b92126deb5ea0174ad269b0.tar.bz2
Avoid a copy when reading from a byte array.
Diffstat (limited to 'Swiften/FileTransfer/IBBSendSession.cpp')
-rw-r--r--Swiften/FileTransfer/IBBSendSession.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/Swiften/FileTransfer/IBBSendSession.cpp b/Swiften/FileTransfer/IBBSendSession.cpp
index 3a1390c..c24cc0a 100644
--- a/Swiften/FileTransfer/IBBSendSession.cpp
+++ b/Swiften/FileTransfer/IBBSendSession.cpp
@@ -2,18 +2,19 @@
* Copyright (c) 2010 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#include <Swiften/FileTransfer/IBBSendSession.h>
#include <boost/bind.hpp>
+#include <Swiften/Base/ByteArray.h>
#include <Swiften/Queries/IQRouter.h>
#include <Swiften/FileTransfer/IBBRequest.h>
#include <Swiften/FileTransfer/BytestreamException.h>
namespace Swift {
IBBSendSession::IBBSendSession(const std::string& id, const JID& from, const JID& to, boost::shared_ptr<ReadBytestream> bytestream, IQRouter* router) : id(id), from(from), to(to), bytestream(bytestream), router(router), blockSize(4096), sequenceNumber(0), active(false), waitingForData(false) {
bytestream->onDataAvailable.connect(boost::bind(&IBBSendSession::handleDataAvailable, this));
}
@@ -46,26 +47,26 @@ void IBBSendSession::handleIBBResponse(IBB::ref, ErrorPayload::ref error) {
}
}
else {
finish(FileTransferError(FileTransferError::PeerError));
}
}
void IBBSendSession::sendMoreData() {
try {
- std::vector<unsigned char> data = bytestream->read(blockSize);
- if (!data.empty()) {
+ boost::shared_ptr<ByteArray> data = bytestream->read(blockSize);
+ if (!data->empty()) {
waitingForData = false;
- IBBRequest::ref request = IBBRequest::create(from, to, IBB::createIBBData(id, sequenceNumber, data), router);
+ IBBRequest::ref request = IBBRequest::create(from, to, IBB::createIBBData(id, sequenceNumber, *data), router);
sequenceNumber++;
request->onResponse.connect(boost::bind(&IBBSendSession::handleIBBResponse, this, _1, _2));
request->send();
- onBytesSent(data.size());
+ onBytesSent(data->size());
}
else {
waitingForData = true;
}
}
catch (const BytestreamException&) {
finish(FileTransferError(FileTransferError::ReadError));
}
}