From: Constantin Kaplinsky Date: Thu, 18 May 2006 11:08:21 +0000 (+0000) Subject: Merged the changes from branch/merge-with-vnc-4.1.1, revisions 520:558. X-Git-Tag: v0.0.90~384^2~312 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8d9f5139332ca8509ab84601c53634d361ab4a2d;p=tigervnc.git Merged the changes from branch/merge-with-vnc-4.1.1, revisions 520:558. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@559 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- 8d9f5139332ca8509ab84601c53634d361ab4a2d diff --cc rfb/VNCSConnectionST.cxx index e7bc09f0,37fb7447..fe60e431 --- a/rfb/VNCSConnectionST.cxx +++ b/rfb/VNCSConnectionST.cxx @@@ -31,11 -32,11 +32,11 @@@ static LogWriter vlog("VNCSConnST") VNCSConnectionST::VNCSConnectionST(VNCServerST* server_, network::Socket *s, bool reverse) - : sock(s), reverseConnection(reverse), server(server_), - image_getter(server->useEconomicTranslate), + : SConnection(server_->securityFactory, reverse), sock(s), server(server_), + updates(false), image_getter(server->useEconomicTranslate), drawRenderedCursor(false), removeRenderedCursor(false), pointerEventTime(0), accessRights(AccessDefault), - startTime(time(0)) + startTime(time(0)), m_pFileTransfer(0) { setStreams(&sock->inStream(), &sock->outStream()); peerEndpoint.buf = sock->getPeerEndpoint(); @@@ -44,25 -46,7 +46,14 @@@ setSocketTimeouts(); lastEventTime = time(0); - // Initialise security - CharArray sec_types_str; - if (reverseConnection) - sec_types_str.buf = rfb::Server::rev_sec_types.getData(); - else - sec_types_str.buf = rfb::Server::sec_types.getData(); - std::list sec_types = parseSecTypes(sec_types_str.buf); - std::list::iterator i; - for (i=sec_types.begin(); i!=sec_types.end(); i++) { - addSecType(*i); - } - + // Add this client to the VNCServerST + if (server->m_pFTManager != NULL) { + SFileTransfer *pFT = server->m_pFTManager->createObject(sock); + if (pFT != NULL) { + m_pFileTransfer = pFT; + } + } + server->clients.push_front(this); } diff --cc winvnc/VNCServerWin32.cxx index 5b2adbe8,8d681c22..3b0e1a0a --- a/winvnc/VNCServerWin32.cxx +++ b/winvnc/VNCServerWin32.cxx @@@ -39,11 -38,6 +39,9 @@@ static LogWriter vlog("VNCServerWin32") const TCHAR* winvnc::VNCServerWin32::RegConfigPath = _T("Software\\TightVNC\\WinVNC4"); - const UINT VNCM_REG_CHANGED = WM_USER; - const UINT VNCM_COMMAND = WM_USER + 1; - ++// FIXME: Move into an .h file? +extern const UINT VNCM_FT_DOWNLOAD; + static IntParameter http_port("HTTPPortNumber", "TCP/IP port on which the server will serve the Java applet VNC Viewer ", 5800); @@@ -134,7 -69,8 +73,10 @@@ VNCServerWin32::VNCServerWin32( // Register the desktop's event to be handled sockMgr.addEvent(desktop.getUpdateEvent(), &desktop); + // Register the queued command event to be handled + sockMgr.addEvent(commandEvent, this); ++ + vncServer.setFTManager((rfb::SFileTransferManager *)&m_FTManager); } VNCServerWin32::~VNCServerWin32() { @@@ -165,74 -166,20 +172,22 @@@ int VNCServerWin32::run() DWORD result = 0; try { - // - Create some managed listening sockets - ManagedListener rfb(&sockMgr, &vncServer); - ManagedListener http(&sockMgr, httpServer); + vlog.debug("Entering message loop"); - // - Continue to operate until WM_QUIT is processed + // - Run the server until we're told to quit MSG msg; - do { - // -=- Make sure we're listening on the right ports. - rfb.setPort(port_number, localHost); - http.setPort(http_port, localHost); - - // -=- Update the Java viewer's web page port number. - httpServer->setRFBport(rfb.sock ? port_number : 0); - - // -=- Update the TCP address filter for both ports, if open. - CharArray pattern; - pattern.buf = hosts.getData(); - if (!localHost) { - rfb.setFilter(pattern.buf); - http.setFilter(pattern.buf); - } - - // - If there is a listening port then add the address to the - // tray icon's tool-tip text. - { - const TCHAR* prefix = isServiceProcess() ? - _T("VNC Server (Service):") : _T("VNC Server (User):"); - - std::list addrs; - if (rfb.sock) - rfb.sock->getMyAddresses(&addrs); - else - addrs.push_front(strDup("Not accepting connections")); - - std::list::iterator i, next_i; - int length = _tcslen(prefix)+1; - for (i=addrs.begin(); i!= addrs.end(); i++) - length += strlen(*i) + 1; - - TCharArray toolTip(length); - _tcscpy(toolTip.buf, prefix); - for (i=addrs.begin(); i!= addrs.end(); i=next_i) { - next_i = i; next_i ++; - TCharArray addr = *i; // Assumes ownership of string - _tcscat(toolTip.buf, addr.buf); - if (next_i != addrs.end()) - _tcscat(toolTip.buf, _T(",")); - } - trayIcon.setToolTip(toolTip.buf); - } - - vlog.debug("Entering message loop"); - - // - Run the server until the registry changes, or we're told to quit - while (sockMgr.getMessage(&msg, NULL, 0, 0)) { - if (msg.hwnd == 0) { - if (msg.message == VNCM_REG_CHANGED) - break; - if (msg.message == VNCM_COMMAND) - doCommand(); - if (msg.message == VNCM_FT_DOWNLOAD) - m_FTManager.processDownloadMsg(msg); - } - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - } while ((msg.message != WM_QUIT) || runServer); + int result = 0; + while (runServer) { + result = sockMgr.getMessage(&msg, NULL, 0, 0); + if (result < 0) + throw rdr::SystemException("getMessage", GetLastError()); + if (!isServiceProcess() && (result == 0)) + break; ++ if (msg.message == VNCM_FT_DOWNLOAD) ++ m_FTManager.processDownloadMsg(msg); + TranslateMessage(&msg); + DispatchMessage(&msg); + } vlog.debug("Server exited cleanly"); } catch (rdr::SystemException &s) { diff --cc winvnc/VNCServerWin32.h index 9cc0f1ed,f05f2c70..579a6a0b --- a/winvnc/VNCServerWin32.h +++ b/winvnc/VNCServerWin32.h @@@ -26,10 -26,9 +26,10 @@@ #include #include #include +#include #include #include - //#include + #include namespace winvnc { @@@ -94,11 -110,17 +111,18 @@@ rfb::Thread* hostThread; bool runServer; bool isDesktopStarted; - JavaViewerServer* httpServer; - rfb::win32::RegistryReader config; + JavaViewerServer httpServer; rfb::win32::SocketManager sockMgr; + rfb::win32::RegConfig config; + + ManagedListener rfbSock; + ManagedListener httpSock; + STrayIconThread* trayIcon; + + //rfb::SSecurityFactoryStandard securityFactory; + QueryConnectDialog* queryConnectDialog; + rfb::win32::SFileTransferManagerWin32 m_FTManager; }; };