1 /* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. 2 * Copyright 2009-2019 Pierre Ossman for Cendio AB 3 * 4 * This is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This software is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this software; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 17 * USA. 18 */ 19 // 20 // VNCServer - abstract interface implemented by the RFB library. The back-end 21 // code calls the relevant methods as appropriate. 22 23 #ifndef __RFB_VNCSERVER_H__ 24 #define __RFB_VNCSERVER_H__ 25 26 #include <network/Socket.h> 27 28 #include <rfb/UpdateTracker.h> 29 #include <rfb/SSecurity.h> 30 #include <rfb/ScreenSet.h> 31 32 namespace rfb { 33 34 class VNCServer : public UpdateTracker, 35 public network::SocketServer { 36 public: 37 // blockUpdates()/unblockUpdates() tells the server that the pixel buffer 38 // is currently in flux and may not be accessed. The attributes of the 39 // pixel buffer may still be accessed, but not the frame buffer itself. 40 // Note that access must be unblocked the exact same number of times it 41 // was blocked. 42 virtual void blockUpdates() = 0; 43 virtual void unblockUpdates() = 0; 44 45 // setPixelBuffer() tells the server to use the given pixel buffer (and 46 // optionally a modified screen layout). If this differs in size from 47 // the previous pixel buffer, this may result in protocol messages being 48 // sent, or clients being disconnected. 49 virtual void setPixelBuffer(PixelBuffer* pb, const ScreenSet& layout) = 0; 50 virtual void setPixelBuffer(PixelBuffer* pb) = 0; 51 52 // setScreenLayout() modifies the current screen layout without changing 53 // the pixelbuffer. Clients will be notified of the new layout. 54 virtual void setScreenLayout(const ScreenSet& layout) = 0; 55 56 // getPixelBuffer() returns a pointer to the PixelBuffer object. 57 virtual const PixelBuffer* getPixelBuffer() const = 0; 58 59 // requestClipboard() will result in a request to a client to 60 // transfer its clipboard data. A call to 61 // SDesktop::handleClipboardData() will be made once the data is 62 // available. 63 virtual void requestClipboard() = 0; 64 65 // announceClipboard() informs all clients of changes to the 66 // clipboard on the server. A client may later request the 67 // clipboard data via SDesktop::handleClipboardRequest(). 68 virtual void announceClipboard(bool available) = 0; 69 70 // sendClipboardData() transfers the clipboard data to a client 71 // and should be called whenever a client has requested the 72 // clipboard via SDesktop::handleClipboardRequest(). 73 virtual void sendClipboardData(const char* data) = 0; 74 75 // bell() tells the server that it should make all clients make a bell sound. 76 virtual void bell() = 0; 77 78 // approveConnection() is called some time after 79 // SDesktop::queryConnection() has been called, to accept or reject 80 // the connection. The accept argument should be true for 81 // acceptance, or false for rejection, in which case a string 82 // reason may also be given. 83 virtual void approveConnection(network::Socket* sock, bool accept, 84 const char* reason = NULL) = 0; 85 86 // - Close all currently-connected clients, by calling 87 // their close() method with the supplied reason. 88 virtual void closeClients(const char* reason) = 0; 89 90 // getConnection() gets the SConnection for a particular Socket. If 91 // the Socket is not recognised then null is returned. 92 virtual SConnection* getConnection(network::Socket* sock) = 0; 93 94 // setCursor() tells the server that the cursor has changed. The 95 // cursorData argument contains width*height rgba quadruplets with 96 // non-premultiplied alpha. 97 virtual void setCursor(int width, int height, const Point& hotspot, 98 const rdr::U8* cursorData) = 0; 99 100 // setCursorPos() tells the server the current position of the cursor, and 101 // whether the server initiated that change (e.g. through another X11 102 // client calling XWarpPointer()). 103 virtual void setCursorPos(const Point& p, bool warped) = 0; 104 105 // setName() tells the server what desktop title to supply to clients 106 virtual void setName(const char* name) = 0; 107 108 // setLEDState() tells the server what the current lock keys LED 109 // state is 110 virtual void setLEDState(unsigned int state) = 0; 111 }; 112 } 113 #endif 114