I am trying to set up a websocket server using POCO 1.7.5.
The sample from POCO found here works well. Lines 111-122 reads (sligthly prettified):
WebSocket ws(request, response);
char buffer[1024];
int n, flags;
do
{
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
ws.sendFrame(buffer, n, flags);
}
while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
However, this approach does not take care of answering ping frames by pong frames. How do I do this properly using POCO? I tried the following, but I dont know if it is correct:
WebSocket ws(request, response);
char buffer[1024];
int n, flags;
do
{
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
if ((flags & WebSocket::FRAME_OP_BITMASK) == WebSocket::FRAME_OP_PING){
buffer[0] = WebSocket::FRAME_OP_PING;
ws.sendFrame(buffer, 1, WebSocket::FRAME_OP_PONG);
}
else{
ws.sendFrame(buffer, n, flags);
}
}
while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
Dont know if this is the right way of doing it, and cannot find how to do it online, including the POCO documentation. The websocket RFC 6465 holds loads of info, but I dont want to go there, as I just want to use the websocket as an application programmer here
From RFC you must send the same buffer with WebSocket::FRAME_OP_PONG flag. Try this:
do
{
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
if ((flags & WebSocket::FRAME_OP_BITMASK) == WebSocket::FRAME_OP_PING) {
ws.sendFrame(buffer, n, WebSocket::FRAME_OP_PONG);
}
else {
ws.sendFrame(buffer, n, flags);
}
}
while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With