vncServer.h
上传用户:sbftbdw
上传日期:2007-01-03
资源大小:379k
文件大小:8k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. //  Copyright (C) 1997, 1998 Olivetti & Oracle Research Laboratory
  2. //
  3. //  This file is part of the VNC system.
  4. //
  5. //  The VNC system is free software; you can redistribute it and/or modify
  6. //  it under the terms of the GNU General Public License as published by
  7. //  the Free Software Foundation; either version 2 of the License, or
  8. //  (at your option) any later version.
  9. //
  10. //  This program is distributed in the hope that it will be useful,
  11. //  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. //  GNU General Public License for more details.
  14. //
  15. //  You should have received a copy of the GNU General Public License
  16. //  along with this program; if not, write to the Free Software
  17. //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  18. //  USA.
  19. //
  20. // If the source code for the VNC system is not available from the place 
  21. // whence you received this file, check http://www.orl.co.uk/vnc or contact
  22. // the authors on vnc@orl.co.uk for information on obtaining it.
  23. // vncServer.h
  24. // vncServer class handles the following functions:
  25. // - Allowing clients to be dynamically added and removed
  26. // - Propagating updates from the local vncDesktop object
  27. //   to all the connected clients
  28. // - Propagating mouse movements and keyboard events from
  29. //   clients to the local vncDesktop
  30. // It also creates the vncSockConnect and vncCORBAConnect
  31. // servers, which respectively allow connections via sockets
  32. // and via the ORB interface
  33. class vncServer;
  34. #if (!defined(_WINVNC_VNCSERVER))
  35. #define _WINVNC_VNCSERVER
  36. // Custom
  37. #include "vncCORBAConnect.h"
  38. #include "vncSockConnect.h"
  39. #include "vncHTTPConnect.h"
  40. #include "vncClient.h"
  41. #include "vncRegion.h"
  42. #include "vncPasswd.h"
  43. // Includes
  44. #include "stdhdrs.h"
  45. #include <omnithread.h>
  46. #include <list>
  47. // Define a datatype to handle lists of windows we wish to notify
  48. typedef std::list<HWND> vncNotifyList;
  49. // Some important constants;
  50. const int MAX_CLIENTS = 128;
  51. // The vncServer class itself
  52. class vncServer
  53. {
  54. public:
  55. // Constructor/destructor
  56. vncServer();
  57. ~vncServer();
  58. // Client handling functions
  59. virtual vncClientId AddClient(VSocket *socket, BOOL auth);
  60. virtual vncClientId AddClient(VSocket *socket,
  61. BOOL auth, BOOL teleport, int capability,
  62. BOOL keysenabled, BOOL ptrenabled);
  63. virtual BOOL Authenticated(vncClientId client);
  64. virtual void KillClient(vncClientId client);
  65. virtual void KillAll();
  66. virtual UINT AuthClientCount();
  67. virtual UINT UnauthClientCount();
  68. virtual void WaitUntilAuthEmpty();
  69. // Client info retrieval/setup
  70. virtual vncClient* GetClient(vncClientId clientid);
  71. virtual vncClientList ClientList();
  72. virtual void SetTeleport(vncClientId client, BOOL teleport);
  73. virtual void SetCapability(vncClientId client, int capability);
  74. virtual void SetKeyboardEnabled(vncClientId client, BOOL enabled);
  75. virtual void SetPointerEnabled(vncClientId client, BOOL enabled);
  76. virtual BOOL IsTeleport(vncClientId client);
  77. virtual int GetCapability(vncClientId client);
  78. virtual BOOL GetKeyboardEnabled(vncClientId client);
  79. virtual BOOL GetPointerEnabled(vncClientId client);
  80. virtual char* GetClientName(vncClientId client);
  81. // Let a client remove itself
  82. virtual void RemoveClient(vncClientId client);
  83. // Connect/disconnect notification
  84. virtual BOOL AddNotify(HWND hwnd);
  85. virtual BOOL RemNotify(HWND hwnd);
  86. protected:
  87. // Send a notification message
  88. virtual void DoNotify(UINT message, WPARAM wparam, LPARAM lparam);
  89. public:
  90. // Update handling, used by clients to signal the screen server
  91. virtual void RequestUpdate();
  92. // Update handling, used by the screen server
  93. virtual void TriggerUpdate();
  94. virtual void UpdateRect(RECT &rect);
  95. virtual void UpdateRegion(vncRegion &region);
  96. virtual void CopyRect(RECT &dest, POINT &source);
  97. virtual void UpdateMouse();
  98. virtual void UpdateClipText(LPSTR text);
  99. virtual void UpdatePalette();
  100. // Polling mode handling
  101. virtual void PollUnderCursor(BOOL enable) {m_poll_undercursor = enable;};
  102. virtual BOOL PollUnderCursor() {return m_poll_undercursor;};
  103. virtual void PollForeground(BOOL enable) {m_poll_foreground = enable;};
  104. virtual BOOL PollForeground() {return m_poll_foreground;};
  105. virtual void PollFullScreen(BOOL enable) {m_poll_fullscreen = enable;};
  106. virtual BOOL PollFullScreen() {return m_poll_fullscreen;};
  107. virtual void PollConsoleOnly(BOOL enable) {m_poll_consoleonly = enable;};
  108. virtual BOOL PollConsoleOnly() {return m_poll_consoleonly;};
  109. virtual void PollOnEventOnly(BOOL enable) {m_poll_oneventonly = enable;};
  110. virtual BOOL PollOnEventOnly() {return m_poll_oneventonly;};
  111. // Client manipulation of the clipboard
  112. virtual void UpdateLocalClipText(LPSTR text);
  113. // Name and port number handling
  114. virtual void SetName(const char * name);
  115. virtual void SetPort(const UINT port);
  116. virtual UINT GetPort();
  117. virtual void SetAutoPortSelect(const BOOL autoport) {
  118.     if (autoport && !m_autoportselect)
  119.     {
  120. BOOL sockconnect = SockConnected();
  121. SockConnect(FALSE);
  122. m_autoportselect = autoport;
  123. SockConnect(sockconnect);
  124.     }
  125. else
  126. {
  127. m_autoportselect = autoport;
  128. }
  129. };
  130. virtual BOOL AutoPortSelect() {return m_autoportselect;};
  131. // Password set/retrieve.  Note that these functions now handle the encrypted
  132. // form, not the plaintext form.  The buffer passwed MUST be MAXPWLEN in size.
  133. virtual void SetPassword(const char *passwd);
  134. virtual void GetPassword(char *passwd);
  135. // Remote input handling
  136. virtual void EnableInputs(BOOL enable);
  137. virtual BOOL InputsEnabled();
  138. // General connection handling
  139. virtual void SetConnectPriority(UINT priority) {m_connect_pri = priority;};
  140. virtual UINT ConnectPriority() {return m_connect_pri;};
  141. // Socket connection handling
  142. virtual BOOL SockConnect(BOOL on);
  143. virtual BOOL SockConnected();
  144. // CORBA connection handling
  145. virtual BOOL CORBAConnect(BOOL on);
  146. virtual BOOL CORBAConnected();
  147. virtual void GetScreenInfo(int &width, int &height, int &depth);
  148. // Other general settings
  149. virtual void SetAuthRequired(BOOL reqd) {m_passwd_required = reqd;};
  150. virtual BOOL AuthRequired() {return m_passwd_required;};
  151. virtual void SetLoopbackOk(BOOL ok) {m_loopback_allowed = ok;};
  152. virtual BOOL LoopbackOk() {return m_loopback_allowed;};
  153. virtual void SetLockSettings(int ok) {m_lock_on_exit = ok;};
  154. virtual int LockSettings() {return m_lock_on_exit;};
  155. // Internal stuffs
  156. protected:
  157. // Connection servers
  158. vncSockConnect *m_socketConn;
  159. vncCorbaConnect *m_corbaConn;
  160. vncHTTPConnect *m_httpConn;
  161. // The desktop handler
  162. vncDesktop *m_desktop;
  163. // General preferences
  164. UINT m_port;
  165. BOOL m_autoportselect;
  166. char m_password[MAXPWLEN];
  167. BOOL m_passwd_required;
  168. BOOL m_loopback_allowed;
  169. BOOL m_enable_inputs;
  170. int m_lock_on_exit;
  171. int m_connect_pri;
  172. // Polling preferences
  173. BOOL m_poll_fullscreen;
  174. BOOL m_poll_foreground;
  175. BOOL m_poll_undercursor;
  176. BOOL m_poll_oneventonly;
  177. BOOL m_poll_consoleonly;
  178. // Name of this desktop
  179. char *m_name;
  180. // The client lists - list of clients being authorised and ones
  181. // already authorised
  182. vncClientList m_unauthClients;
  183. vncClientList m_authClients;
  184. vncClient *m_clientmap[MAX_CLIENTS];
  185. vncClientId m_nextid;
  186. // Lock to protect the client listfrom concurrency - lock when reading/updating client list
  187. omni_mutex m_clientsLock;
  188. // Lock to protect the desktop object from concurrency - lock when updating client list
  189. omni_mutex m_desktopLock;
  190. // Signal set when a client removes itself
  191. omni_condition *m_clientquitsig;
  192. // Set of windows to send notifications to
  193. vncNotifyList m_notifyList;
  194. };
  195. #endif