Skip to content

Commit 3ba51c4

Browse files
committed
fixed copy of asio buffer
1 parent e88577d commit 3ba51c4

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

include/internal/WebSocketProtocol.h

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ namespace SL {
9898
sendImpl(parent, socket, ws, false);
9999
}
100100

101-
template<class PARENTTYPE, class SOCKETTYPE>inline void handlewriteclose(const PARENTTYPE& parent, const SOCKETTYPE& socket, unsigned short code, const std::string& msg) {
101+
template<class PARENTTYPE, class SOCKETTYPE>inline void handleclose(const PARENTTYPE& parent, const SOCKETTYPE& socket, unsigned short code, const std::string& msg) {
102102
SL_WS_LITE_LOG(Logging_Levels::INFO_log_level, "Closed: " << code);
103103
socket->SocketStatus_ = SocketStatus::CLOSED;
104104
socket->Writing = false;
@@ -121,11 +121,11 @@ namespace SL {
121121
UNUSED(bytes_transferred);
122122
if (msg.code == OpCode::CLOSE) {
123123
//final close.. get out and dont come back mm kay?
124-
return handlewriteclose(parent, socket, 1000, "");
124+
return handleclose(parent, socket, 1000, "");
125125
}
126126
if (ec)
127127
{
128-
return handlewriteclose(parent, socket, 1002, "write header failed " + ec.message());
128+
return handleclose(parent, socket, 1002, "write header failed " + ec.message());
129129
}
130130
assert(msg.len == bytes_transferred);
131131
startwrite(parent, socket);
@@ -150,10 +150,10 @@ namespace SL {
150150
if (ec)
151151
{
152152
if (msg.code == OpCode::CLOSE) {
153-
return handlewriteclose(parent, socket, msg.code, "");
153+
return handleclose(parent, socket, msg.code, "");
154154
}
155155
else {
156-
return handlewriteclose(parent, socket, 1002, "write mask failed " + ec.message());
156+
return handleclose(parent, socket, 1002, "write mask failed " + ec.message());
157157
}
158158
}
159159
else {
@@ -204,7 +204,7 @@ namespace SL {
204204
writeend(parent, socket, msg);
205205
}
206206
else {
207-
handlewriteclose(parent, socket, 1002, "write header failed " + ec.message());
207+
handleclose(parent, socket, 1002, "write header failed " + ec.message());
208208
}
209209

210210
}
@@ -518,14 +518,15 @@ namespace SL {
518518
dataconsumed = extradata->size();
519519
}
520520
bytestoread -= dataconsumed;
521-
memcpy(buffer->get(), extradata->data(), dataconsumed);
521+
std::copy_n(asio::buffers_begin(*extradata), dataconsumed, buffer.get());
522+
// memcpy(buffer.get(), extradata->data(), dataconsumed);
522523
extradata->consume(dataconsumed);
523524

524525
asio::async_read(socket->Socket, asio::buffer(buffer.get() + dataconsumed, bytestoread), [size, extradata, parent, socket, buffer](const std::error_code& ec, size_t) {
525526
if (!ec) {
526527
UnMaskMessage(parent, size, buffer.get());
527528
auto tempsize = size - AdditionalBodyBytesToRead<PARENTTYPE>();
528-
if (extradata.size() == 0) {
529+
if (extradata->size() == 0) {
529530
return ProcessControlMessage(parent, socket, buffer, tempsize);
530531
}
531532
else {
@@ -539,7 +540,7 @@ namespace SL {
539540
}
540541
else {
541542
std::shared_ptr<unsigned char> ptr;
542-
if (extradata.size() == 0) {
543+
if (extradata->size() == 0) {
543544
return ProcessControlMessage(parent, socket, ptr, 0);
544545
}
545546
else {
@@ -579,15 +580,16 @@ namespace SL {
579580
dataconsumed = extradata->size();
580581
}
581582
bytestoread -= dataconsumed;
582-
memcpy(socket->ReceiveBuffer + socket->ReceiveBufferSize - size, extradata->data(), dataconsumed);
583+
std::copy_n(asio::buffers_begin(*extradata), dataconsumed, socket->ReceiveBuffer + socket->ReceiveBufferSize - size);
584+
//memcpy(socket->ReceiveBuffer + socket->ReceiveBufferSize - size, extradata->data(), dataconsumed);
583585
extradata->consume(dataconsumed);
584586

585587
asio::async_read(socket->Socket, asio::buffer(socket->ReceiveBuffer + socket->ReceiveBufferSize - size + dataconsumed, bytestoread), [size, extradata, parent, socket](const std::error_code& ec, size_t) {
586588
if (!ec) {
587589
auto buffer = socket->ReceiveBuffer + socket->ReceiveBufferSize - size;
588590
UnMaskMessage(parent, size, buffer);
589591
socket->ReceiveBufferSize -= AdditionalBodyBytesToRead<PARENTTYPE>();
590-
if (extradata.size() == 0) {
592+
if (extradata->size() == 0) {
591593
return ProcessMessage(parent, socket);
592594
}
593595
else {
@@ -600,7 +602,7 @@ namespace SL {
600602
});
601603
}
602604
else {
603-
if (extradata.size() == 0) {
605+
if (extradata->size() == 0) {
604606
return ProcessMessage(parent, socket);
605607
}
606608
else {
@@ -641,7 +643,7 @@ namespace SL {
641643
}
642644
//zero is not possible
643645
bytestoread -= dataconsumed;
644-
memcpy(socket->ReceiveHeader, extradata->data(), dataconsumed);
646+
std::copy_n(asio::buffers_begin(*extradata), dataconsumed, socket->ReceiveHeader);
645647
extradata->consume(dataconsumed);
646648

647649
asio::async_read(socket->Socket, asio::buffer(socket->ReceiveHeader + dataconsumed, bytestoread), [parent, socket, extradata](const std::error_code& ec, size_t bytes_transferred) {
@@ -670,10 +672,11 @@ namespace SL {
670672
dataconsumed = 0;
671673
}
672674
bytestoread -= dataconsumed;
673-
memcpy(socket->ReceiveHeader, extradata->data(), dataconsumed);
675+
std::copy_n(asio::buffers_begin(*extradata), dataconsumed, socket->ReceiveHeader + 2);
676+
//memcpy(socket->ReceiveHeader, extradata->data(), dataconsumed);
674677
extradata->consume(dataconsumed);
675678

676-
asio::async_read(socket->Socket, asio::buffer(socket->ReceiveHeader + dataconsumed, bytestoread), [parent, socket, extradata](const std::error_code& ec, size_t) {
679+
asio::async_read(socket->Socket, asio::buffer(socket->ReceiveHeader + 2 + dataconsumed, bytestoread), [parent, socket, extradata](const std::error_code& ec, size_t) {
677680
if (!ec) {
678681
if (extradata->size() > 0) {
679682
ReadBody(parent, socket, extradata);

0 commit comments

Comments
 (0)