Bug #13087 ยป asiowrapper.patch
| src/Wt/WWebSocketConnection.C | ||
|---|---|---|
|
writeBuffer_.append(data.data(), data.size());
|
||
|
// Put data into asio::buffer actual write buffer
|
||
|
using namespace boost::asio;
|
||
|
using namespace AsioWrapper::asio;
|
||
|
std::vector<const_buffer> buffer;
|
||
|
writeBuffer_.asioBuffers(buffer);
|
||
| ... | ... | |
|
// Put data into asio::buffer actual write buffer
|
||
|
writeBuffer_.append(frameHeader.data(), frameHeader.size());
|
||
|
using namespace boost::asio;
|
||
|
using namespace AsioWrapper::asio;
|
||
|
std::vector<const_buffer> buffer;
|
||
|
writeBuffer_.asioBuffers(buffer);
|
||
| ... | ... | |
|
void WebSocketTcpConnection::doSocketRead(char* buffer, size_t size)
|
||
|
{
|
||
|
using namespace boost::asio;
|
||
|
using namespace AsioWrapper::asio;
|
||
|
socket_->async_read_some(boost::asio::buffer(buffer, size), strand_.wrap(std::bind(&WebSocketTcpConnection::handleAsyncRead, shared_from_this(), std::placeholders::_1, std::placeholders::_2)));
|
||
|
socket_->async_read_some(AsioWrapper::asio::buffer(buffer, size), strand_.wrap(std::bind(&WebSocketTcpConnection::handleAsyncRead, shared_from_this(), std::placeholders::_1, std::placeholders::_2)));
|
||
|
}
|
||
|
void WebSocketTcpConnection::doSocketWrite(const std::vector<boost::asio::const_buffer>& buffer, OpCode type)
|
||
|
void WebSocketTcpConnection::doSocketWrite(const std::vector<AsioWrapper::asio::const_buffer>& buffer, OpCode type)
|
||
|
{
|
||
|
async_write(socket(), buffer, strand_.wrap(std::bind(&WebSocketTcpConnection::handleAsyncWritten, shared_from_this(), type, std::placeholders::_1, std::placeholders::_2)));
|
||
|
}
|
||
| ... | ... | |
|
void WebSocketSslConnection::doSocketRead(char* buffer, size_t size)
|
||
|
{
|
||
|
using namespace boost::asio;
|
||
|
using namespace AsioWrapper::asio;
|
||
|
socket_->async_read_some(boost::asio::buffer(buffer, size), strand_.wrap(std::bind(&WebSocketSslConnection::handleAsyncRead, shared_from_this(), std::placeholders::_1, std::placeholders::_2)));
|
||
|
socket_->async_read_some(AsioWrapper::asio::buffer(buffer, size), strand_.wrap(std::bind(&WebSocketSslConnection::handleAsyncRead, shared_from_this(), std::placeholders::_1, std::placeholders::_2)));
|
||
|
}
|
||
|
void WebSocketSslConnection::doSocketWrite(const std::vector<boost::asio::const_buffer>& buffer, OpCode type)
|
||
|
void WebSocketSslConnection::doSocketWrite(const std::vector<AsioWrapper::asio::const_buffer>& buffer, OpCode type)
|
||
|
{
|
||
|
async_write(*socket_, buffer, strand_.wrap(std::bind(&WebSocketSslConnection::handleAsyncWritten, shared_from_this(), type, std::placeholders::_1, std::placeholders::_2)));
|
||
|
}
|
||
| src/Wt/WWebSocketConnection.h | ||
|---|---|---|
|
virtual void doSocketRead(char* buffer, size_t size) = 0;
|
||
|
// Performs an async write to the socket, inside the write-done loop.
|
||
|
virtual void doSocketWrite(const std::vector<boost::asio::const_buffer>& buffer, OpCode type) = 0;
|
||
|
virtual void doSocketWrite(const std::vector<AsioWrapper::asio::const_buffer>& buffer, OpCode type) = 0;
|
||
|
private:
|
||
|
// Buffer & parsing
|
||
| ... | ... | |
|
bool hasPendingPingWrite_;
|
||
|
bool hasPendingPongWrite_;
|
||
|
OpCode pendingWriteDataType_;
|
||
|
std::vector<boost::asio::const_buffer> pendingWritePingBuffer_;
|
||
|
std::vector<boost::asio::const_buffer> pendingWritePongBuffer_;
|
||
|
std::vector<boost::asio::const_buffer> pendingWriteDataBuffer_;
|
||
|
std::vector<AsioWrapper::asio::const_buffer> pendingWritePingBuffer_;
|
||
|
std::vector<AsioWrapper::asio::const_buffer> pendingWritePongBuffer_;
|
||
|
std::vector<AsioWrapper::asio::const_buffer> pendingWriteDataBuffer_;
|
||
|
std::function<void()> hasDataReadCallback_;
|
||
|
std::function<void(const AsioWrapper::error_code&, std::size_t)> hasDataWrittenCallback_;
|
||
| ... | ... | |
|
protected:
|
||
|
void doSocketRead(char* input, size_t offset) final;
|
||
|
void doSocketWrite(const std::vector<boost::asio::const_buffer>& buffer, OpCode type) final;
|
||
|
void doSocketWrite(const std::vector<AsioWrapper::asio::const_buffer>& buffer, OpCode type) final;
|
||
|
private:
|
||
|
std::unique_ptr<Socket> socket_;
|
||
| ... | ... | |
|
protected:
|
||
|
void doSocketRead(char* input, size_t offset) final;
|
||
|
void doSocketWrite(const std::vector<boost::asio::const_buffer>& buffer, OpCode type) final;
|
||
|
void doSocketWrite(const std::vector<AsioWrapper::asio::const_buffer>& buffer, OpCode type) final;
|
||
|
private:
|
||
|
std::unique_ptr<SSLSocket> socket_;
|
||