allow the client to ping the server to keep the connection alive

This commit is contained in:
DanyLE 2022-08-17 00:39:53 +02:00
parent 066ee18b4a
commit 20b07efac4

22
wvnc.c
View File

@ -147,7 +147,7 @@ void *process(void *data, int wait)
{ {
if (h->mask == 0) if (h->mask == 0)
{ {
ERROR("%s\n", "data is not masked"); ERROR("Data is not masked opcode 0x%04x data len %d", h->opcode,h->plen);
ws_close(user_data->wscl->client, 1012); ws_close(user_data->wscl->client, 1012);
user_data->status = DISCONNECTED; user_data->status = DISCONNECTED;
free(h); free(h);
@ -156,7 +156,7 @@ void *process(void *data, int wait)
} }
if (h->opcode == WS_CLOSE) if (h->opcode == WS_CLOSE)
{ {
LOG("%s\n", "Websocket: connection closed"); LOG("Websocket: connection closed");
ws_close(user_data->wscl->client, 1011); ws_close(user_data->wscl->client, 1011);
user_data->status = DISCONNECTED; user_data->status = DISCONNECTED;
free(h); free(h);
@ -486,7 +486,7 @@ void waitfor(void *data)
int rc = select(user_data->wscl->client->sock + 1, &fd_in, NULL, NULL, &timeout); int rc = select(user_data->wscl->client->sock + 1, &fd_in, NULL, NULL, &timeout);
if (rc == -1) if (rc == -1)
{ {
LOG("Client may disconnected \n"); LOG("Client may disconnected");
return; return;
} }
if (rc > 0 && FD_ISSET(user_data->wscl->client->sock, &fd_in)) if (rc > 0 && FD_ISSET(user_data->wscl->client->sock, &fd_in))
@ -499,12 +499,15 @@ void waitfor(void *data)
int status = WaitForMessage(user_data->vncl, 200); //500 int status = WaitForMessage(user_data->vncl, 200); //500
if (status < 0) if (status < 0)
{ {
ERROR("VNC WaitForMessage return %d", status);
break; break;
} }
if (status) if (status)
{ {
if (!HandleRFBServerMessage(user_data->vncl)) status = HandleRFBServerMessage(user_data->vncl);
if (!status)
{ {
ERROR("VNC HandleRFBServerMessage fail");
break; break;
} }
} }
@ -521,7 +524,7 @@ void *vnc_fatal(void *data, const char *msg)
int len, size; int len, size;
len = strlen(msg); len = strlen(msg);
size = len + 1; size = len + 1;
LOG("%s", msg); ERROR("VNC FATAL: %s", msg);
uint8_t *cmd = (uint8_t *)malloc(size); uint8_t *cmd = (uint8_t *)malloc(size);
cmd[0] = 0xFE; // error opcode cmd[0] = 0xFE; // error opcode
if (cmd) if (cmd)
@ -576,6 +579,9 @@ void *consume_client(void *ptr, wvnc_cmd_t header)
case 0x07: case 0x07:
SendClientCutText(user_data->vncl, (char *)header.data, strlen((char *)header.data)); SendClientCutText(user_data->vncl, (char *)header.data, strlen((char *)header.data));
break; break;
case 0x08:
LOG("Receive ping message from client: %s", (char*)header.data);
break;
default: default:
return vnc_fatal(user_data, "Unknown client command"); return vnc_fatal(user_data, "Unknown client command");
} }
@ -584,7 +590,7 @@ void *consume_client(void *ptr, wvnc_cmd_t header)
static void got_clipboard(rfbClient *cl, const char *text, int len) static void got_clipboard(rfbClient *cl, const char *text, int len)
{ {
LOG("received clipboard text '%s'\n", text); LOG("received clipboard text '%s'", text);
void *data = rfbClientGetClientData(cl, cl); void *data = rfbClientGetClientData(cl, cl);
wvnc_user_data_t *user_data = get_user_data(data); wvnc_user_data_t *user_data = get_user_data(data);
uint8_t *cmd = (uint8_t *)malloc(len + 1); uint8_t *cmd = (uint8_t *)malloc(len + 1);
@ -595,7 +601,7 @@ static void got_clipboard(rfbClient *cl, const char *text, int len)
uint8_t *ack = (uint8_t *)process(user_data, 1); uint8_t *ack = (uint8_t *)process(user_data, 1);
if (!ack || !(*ack)) if (!ack || !(*ack))
{ {
LOG("Fail to set client clipboard\n"); LOG("Fail to set client clipboard");
if (ack) if (ack)
free(ack); free(ack);
return; return;
@ -666,7 +672,7 @@ void *handle(void *data)
{ {
antd_error(cl, 400, "Please use a websocket connection"); antd_error(cl, 400, "Please use a websocket connection");
} }
task = antd_create_task(NULL, (void *)rq, NULL, time(NULL)); task = antd_create_task(NULL, (void *)rq, NULL, rq->client->last_io);
return task; return task;
//LOG("%s\n", "EXIT Streaming.."); //LOG("%s\n", "EXIT Streaming..");
} }