mirror of
https://github.com/lxsang/antd-wvnc-plugin.git
synced 2025-03-12 10:52:48 +01:00
allow the client to ping the server to keep the connection alive
This commit is contained in:
parent
066ee18b4a
commit
20b07efac4
22
wvnc.c
22
wvnc.c
@ -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..");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user