123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
- *
- * This is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this software; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- * USA.
- */
-
- #ifndef __VNCSERVER_WIN32_H__
- #define __VNCSERVER_WIN32_H__
-
- #include <winsock2.h>
- #include <network/TcpSocket.h>
- #include <rfb/VNCServerST.h>
- #include <rfb_win32/RegConfig.h>
- #include <rfb_win32/SDisplay.h>
- #include <rfb_win32/SocketManager.h>
- #include <rfb_win32/TCharArray.h>
- #include <winvnc/QueryConnectDialog.h>
- #include <winvnc/ManagedListener.h>
-
- namespace os {
- class Mutex;
- class Condition;
- class Thread;
- }
-
- namespace winvnc {
-
- class ListConnInfo;
- class STrayIconThread;
-
- class VNCServerWin32 : rfb::win32::QueryConnectionHandler,
- rfb::win32::SocketManager::AddressChangeNotifier,
- rfb::win32::RegConfig::Callback,
- rfb::win32::EventHandler {
- public:
- VNCServerWin32();
- virtual ~VNCServerWin32();
-
- // Run the server in the current thread
- int run();
-
- // Cause the run() call to return
- // THREAD-SAFE
- void stop();
-
- // Determine whether a viewer is active
- // THREAD-SAFE
- bool isServerInUse() const {return isDesktopStarted;}
-
- // Connect out to the specified VNC Viewer
- // THREAD-SAFE
- bool addNewClient(const char* client);
-
- // Disconnect all connected clients
- // THREAD-SAFE
- bool disconnectClients(const char* reason=0);
-
- // Call used to notify VNCServerST of user accept/reject query completion
- // CALLED FROM AcceptConnectDialog THREAD
- void queryConnectionComplete();
-
- // Where to read the configuration settings from
- static const TCHAR* RegConfigPath;
-
- bool getClientsInfo(ListConnInfo* LCInfo);
-
- bool setClientsStatus(ListConnInfo* LCInfo);
-
- protected:
- // QueryConnectionHandler interface
- // Callback used to prompt user to accept or reject a connection.
- // CALLBACK IN VNCServerST "HOST" THREAD
- virtual void queryConnection(network::Socket* sock,
- const char* userName);
-
- // SocketManager::AddressChangeNotifier interface
- // Used to keep tray icon up to date
- virtual void processAddressChange();
-
- // RegConfig::Callback interface
- // Called via the EventManager whenever RegConfig sees the registry change
- virtual void regConfigChanged();
-
- // EventHandler interface
- // Used to perform queued commands
- virtual void processEvent(HANDLE event);
-
- void getConnInfo(ListConnInfo * listConn);
- void setConnStatus(ListConnInfo* listConn);
-
- protected:
- // Perform a particular internal function in the server thread
- typedef enum {NoCommand, DisconnectClients, AddClient, QueryConnectionComplete, SetClientsStatus, GetClientsInfo} Command;
- bool queueCommand(Command cmd, const void* data, int len, bool wait=true);
- Command command;
- const void* commandData;
- int commandDataLen;
- os::Mutex* commandLock;
- os::Condition* commandSig;
- rfb::win32::Handle commandEvent;
- rfb::win32::Handle sessionEvent;
-
- // VNCServerWin32 Server-internal state
- rfb::win32::SDisplay desktop;
- rfb::VNCServerST vncServer;
- os::Mutex* runLock;
- DWORD thread_id;
- bool runServer;
- bool isDesktopStarted;
- rfb::win32::SocketManager sockMgr;
- rfb::win32::RegConfig config;
-
- ManagedListener rfbSock;
- STrayIconThread* trayIcon;
-
- QueryConnectDialog* queryConnectDialog;
- };
-
- };
-
- #endif
|