diff options
author | Pierre Ossman <ossman@cendio.se> | 2024-05-20 16:12:12 +0200 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2024-05-20 16:12:12 +0200 |
commit | 37c9cedb21b48ac8a13e4e34f39a83faefb7d8c1 (patch) | |
tree | 829fc0f28a587590152e01fabb46bc88b4d151db /unix/xserver/hw | |
parent | 763cf8b27cb79e97bb2e5edefbc5bdce9bd6b6f7 (diff) | |
parent | 7597f8d42b236c99d175a02cea7e76593e16b886 (diff) | |
download | tigervnc-37c9cedb21b48ac8a13e4e34f39a83faefb7d8c1.tar.gz tigervnc-37c9cedb21b48ac8a13e4e34f39a83faefb7d8c1.zip |
Merge branch 'casantos-rhbz_2180903' of https://github.com/casantos/tigervnc
Diffstat (limited to 'unix/xserver/hw')
-rw-r--r-- | unix/xserver/hw/vnc/XserverDesktop.cc | 8 | ||||
-rw-r--r-- | unix/xserver/hw/vnc/XserverDesktop.h | 8 | ||||
-rw-r--r-- | unix/xserver/hw/vnc/vncExt.c | 2 | ||||
-rw-r--r-- | unix/xserver/hw/vnc/vncExtInit.cc | 8 | ||||
-rw-r--r-- | unix/xserver/hw/vnc/vncExtInit.h | 2 |
5 files changed, 15 insertions, 13 deletions
diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc index b5a58671..4cf37937 100644 --- a/unix/xserver/hw/vnc/XserverDesktop.cc +++ b/unix/xserver/hw/vnc/XserverDesktop.cc @@ -311,7 +311,7 @@ void XserverDesktop::handleSocketEvent(int fd, bool read, bool write) bool XserverDesktop::handleListenerEvent(int fd, std::list<SocketListener*>* sockets, - SocketServer* sockserv) + VNCServer* sockserv) { std::list<SocketListener*>::iterator i; @@ -332,7 +332,7 @@ bool XserverDesktop::handleListenerEvent(int fd, } bool XserverDesktop::handleSocketEvent(int fd, - SocketServer* sockserv, + VNCServer* sockserv, bool read, bool write) { std::list<Socket*> sockets; @@ -402,10 +402,10 @@ void XserverDesktop::blockHandler(int* timeout) } } -void XserverDesktop::addClient(Socket* sock, bool reverse) +void XserverDesktop::addClient(Socket* sock, bool reverse, bool viewOnly) { vlog.debug("new client, sock %d reverse %d",sock->getFd(),reverse); - server->addSocket(sock, reverse); + server->addSocket(sock, reverse, viewOnly ? AccessView : AccessDefault); vncSetNotifyFd(sock->getFd(), screenIndex, true, false); } diff --git a/unix/xserver/hw/vnc/XserverDesktop.h b/unix/xserver/hw/vnc/XserverDesktop.h index 677097a6..9cc5bf79 100644 --- a/unix/xserver/hw/vnc/XserverDesktop.h +++ b/unix/xserver/hw/vnc/XserverDesktop.h @@ -42,7 +42,7 @@ namespace rfb { class VNCServerST; } -namespace network { class SocketListener; class Socket; class SocketServer; } +namespace network { class SocketListener; class Socket; } class XserverDesktop : public rfb::SDesktop, public rfb::FullFramePixelBuffer, public rfb::Timer::Callback { @@ -72,7 +72,7 @@ public: void add_copied(const rfb::Region &dest, const rfb::Point &delta); void handleSocketEvent(int fd, bool read, bool write); void blockHandler(int* timeout); - void addClient(network::Socket* sock, bool reverse); + void addClient(network::Socket* sock, bool reverse, bool viewOnly); void disconnectClients(); // QueryConnect methods called from X server code @@ -107,9 +107,9 @@ public: protected: bool handleListenerEvent(int fd, std::list<network::SocketListener*>* sockets, - network::SocketServer* sockserv); + rfb::VNCServer* sockserv); bool handleSocketEvent(int fd, - network::SocketServer* sockserv, + rfb::VNCServer* sockserv, bool read, bool write); virtual bool handleTimeout(rfb::Timer* t); diff --git a/unix/xserver/hw/vnc/vncExt.c b/unix/xserver/hw/vnc/vncExt.c index 89c10550..e98275c2 100644 --- a/unix/xserver/hw/vnc/vncExt.c +++ b/unix/xserver/hw/vnc/vncExt.c @@ -348,7 +348,7 @@ static int ProcVncExtConnect(ClientPtr client) address[stuff->strLen] = 0; rep.success = 0; - if (vncConnectClient(address) == 0) + if (vncConnectClient(address, (int)stuff->viewOnly) == 0) rep.success = 1; rep.type = X_Reply; diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc index 1dfe76d7..b260e626 100644 --- a/unix/xserver/hw/vnc/vncExtInit.cc +++ b/unix/xserver/hw/vnc/vncExtInit.cc @@ -267,7 +267,7 @@ void vncExtensionInit(void) if (scr == 0 && vncInetdSock != -1 && listeners.empty()) { network::Socket* sock = new network::TcpSocket(vncInetdSock); - desktop[scr]->addClient(sock, false); + desktop[scr]->addClient(sock, false, false); vlog.info("added inetd sock"); } } @@ -343,7 +343,7 @@ void vncSendClipboardData(const char* data) desktop[scr]->sendClipboardData(data); } -int vncConnectClient(const char *addr) +int vncConnectClient(const char *addr, int viewOnly) { if (strlen(addr) == 0) { try { @@ -362,7 +362,9 @@ int vncConnectClient(const char *addr) try { network::Socket* sock = new network::TcpSocket(host.c_str(), port); - desktop[0]->addClient(sock, true); + vlog.info("Reverse connection: %s:%d%s", host.c_str(), port, + viewOnly ? " (view only)" : ""); + desktop[0]->addClient(sock, true, (bool)viewOnly); } catch (rdr::Exception& e) { vlog.error("Reverse connection: %s",e.str()); return -1; diff --git a/unix/xserver/hw/vnc/vncExtInit.h b/unix/xserver/hw/vnc/vncExtInit.h index c317d8a2..333e32a9 100644 --- a/unix/xserver/hw/vnc/vncExtInit.h +++ b/unix/xserver/hw/vnc/vncExtInit.h @@ -57,7 +57,7 @@ void vncRequestClipboard(void); void vncAnnounceClipboard(int available); void vncSendClipboardData(const char* data); -int vncConnectClient(const char *addr); +int vncConnectClient(const char *addr, int viewOnly); void vncGetQueryConnect(uint32_t *opaqueId, const char**username, const char **address, int *timeout); |