Skip to content

Commit 271aa78

Browse files
authored
Merge pull request #1365 from AndreasAakesson/dev
WS bandaid
2 parents 2a164ba + e7c07f8 commit 271aa78

2 files changed

Lines changed: 26 additions & 4 deletions

File tree

api/net/ws/websocket.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,15 @@
2323

2424
#include <net/http/server.hpp>
2525
#include <net/http/client.hpp>
26+
#include <stdexcept>
2627

2728
namespace net {
2829

30+
struct WS_error : public std::runtime_error {
31+
using base = std::runtime_error;
32+
using base::base;
33+
};
34+
2935
class WebSocket {
3036
public:
3137
class Message {
@@ -76,7 +82,7 @@ class WebSocket {
7682
data_.insert(data_.end(), data, data+len);
7783
}
7884
else {
79-
throw std::string{"Panncake"};
85+
throw WS_error{"Exceeding Message size"};
8086
}
8187
}
8288

src/net/ws/websocket.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,15 @@ void WebSocket::read_data(net::tcp::buffer_t buf, size_t len)
194194
// parse message
195195
if (message != nullptr)
196196
{
197-
message->add(reinterpret_cast<char*>(buf.get()), len);
197+
try {
198+
message->add(reinterpret_cast<char*>(buf.get()), len);
199+
}
200+
catch(const WS_error& err)
201+
{
202+
failure(err.what());
203+
on_read(nullptr);
204+
return;
205+
}
198206
}
199207
// create new message
200208
else
@@ -219,7 +227,6 @@ void WebSocket::read_data(net::tcp::buffer_t buf, size_t len)
219227
printf("Payload: len=%u dataofs=%u\n",
220228
hdr.data_length(), hdr.data_offset());
221229
*/
222-
/// validate payload length
223230

224231
/// unmask data (if masked)
225232
if (hdr.is_masked()) {
@@ -232,7 +239,16 @@ void WebSocket::read_data(net::tcp::buffer_t buf, size_t len)
232239
return;
233240
}
234241

235-
message = std::make_unique<Message>(reinterpret_cast<char*>(buf.get()), len);
242+
try
243+
{
244+
message = std::make_unique<Message>(reinterpret_cast<char*>(buf.get()), len);
245+
}
246+
catch(const WS_error& err)
247+
{
248+
failure(err.what());
249+
on_read(nullptr);
250+
return;
251+
}
236252
}
237253

238254
if(message->is_complete())

0 commit comments

Comments
 (0)