mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2024-11-24 17:14:01 +01:00
Merge branch 'feature/KASM-2797_force_full_frame' into 'master'
Add /api/send_full_frame Closes KASM-2797 See merge request kasm-technologies/internal/KasmVNC!50
This commit is contained in:
commit
d9cf46f83e
@ -44,6 +44,7 @@
|
||||
int pipe_error = 0;
|
||||
settings_t settings;
|
||||
|
||||
extern int wakeuppipe[2];
|
||||
|
||||
void traffic(const char * token) {
|
||||
/*if ((settings.verbose) && (! settings.daemon)) {
|
||||
@ -1558,6 +1559,20 @@ static uint8_t ownerapi(ws_ctx_t *ws_ctx, const char *in, const char * const use
|
||||
weblog(200, wsthread_handler_id, 0, origip, ip, user, 1, origpath, strlen(buf) + strlen(statbuf));
|
||||
|
||||
handler_msg("Sent frame stats to API caller\n");
|
||||
ret = 1;
|
||||
} else entry("/api/send_full_frame") {
|
||||
write(wakeuppipe[1], "", 1);
|
||||
|
||||
sprintf(buf, "HTTP/1.1 200 OK\r\n"
|
||||
"Server: KasmVNC/4.0\r\n"
|
||||
"Connection: close\r\n"
|
||||
"Content-type: text/plain\r\n"
|
||||
"Content-length: 6\r\n"
|
||||
"\r\n"
|
||||
"200 OK");
|
||||
ws_send(ws_ctx, buf, strlen(buf));
|
||||
weblog(200, wsthread_handler_id, 0, origip, ip, user, 1, origpath, strlen(buf));
|
||||
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
|
@ -1221,3 +1221,13 @@ void VNCServerST::handleClipboardAnnounceBinary(VNCSConnectionST* client,
|
||||
clipboardClient = client;
|
||||
desktop->handleClipboardAnnounceBinary(num, mimes);
|
||||
}
|
||||
|
||||
void VNCServerST::refreshClients()
|
||||
{
|
||||
add_changed(pb->getRect());
|
||||
|
||||
std::list<VNCSConnectionST*>::iterator i;
|
||||
for (i = clients.begin(); i != clients.end(); i++) {
|
||||
(*i)->add_changed_all();
|
||||
}
|
||||
}
|
||||
|
@ -197,6 +197,8 @@ namespace rfb {
|
||||
void handleClipboardAnnounceBinary(VNCSConnectionST* client, const unsigned num,
|
||||
const char mimes[][32]);
|
||||
|
||||
void refreshClients();
|
||||
|
||||
protected:
|
||||
|
||||
friend class VNCSConnectionST;
|
||||
|
@ -49,6 +49,8 @@
|
||||
|
||||
extern "C" {
|
||||
void vncSetGlueContext(int screenIndex);
|
||||
|
||||
extern int wakeuppipe[2];
|
||||
}
|
||||
|
||||
using namespace rfb;
|
||||
@ -307,6 +309,15 @@ void XserverDesktop::handleSocketEvent(int fd, bool read, bool write)
|
||||
{
|
||||
try {
|
||||
if (read) {
|
||||
|
||||
if (fd == wakeuppipe[0]) {
|
||||
unsigned char buf;
|
||||
while (::read(fd, &buf, 1) > 0);
|
||||
|
||||
server->refreshClients();
|
||||
return;
|
||||
}
|
||||
|
||||
if (handleListenerEvent(fd, &listeners, server))
|
||||
return;
|
||||
}
|
||||
|
@ -17,8 +17,10 @@
|
||||
* USA.
|
||||
*/
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <set>
|
||||
@ -50,6 +52,8 @@
|
||||
|
||||
extern "C" {
|
||||
void vncSetGlueContext(int screenIndex);
|
||||
|
||||
int wakeuppipe[2];
|
||||
}
|
||||
|
||||
using namespace rfb;
|
||||
@ -228,6 +232,11 @@ void vncExtensionInit(void)
|
||||
dummyY < 16)
|
||||
vncFatalError("Invalid value to %s", Server::maxVideoResolution.getName());
|
||||
|
||||
pipe(wakeuppipe);
|
||||
const int flags = fcntl(wakeuppipe[0], F_GETFL, 0);
|
||||
fcntl(wakeuppipe[0], F_SETFL, flags | O_NONBLOCK);
|
||||
vncSetNotifyFd(wakeuppipe[0], 0, true, false);
|
||||
|
||||
initialised = true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user