void DownloadOperation::tryCalcInputFilesSize() { FileInfoList *fil = m_toCopy; while (fil != NULL) { if (fil->getFileInfo()->isDirectory()) { StringStorage pathNoRoot; StringStorage pathToFile; fil->getAbsolutePath(&pathNoRoot, _T('/')); pathToFile.setString(m_pathToSourceRoot.getString()); if (!pathToFile.endsWith(_T('/'))) { pathToFile.appendString(_T("/")); } pathToFile.appendString(pathNoRoot.getString()); m_foldersToCalcSizeLeft++; m_sender->sendFolderSizeRequest(pathToFile.getString()); } else { m_totalBytesToCopy += fil->getFileInfo()->getSize(); } fil = fil->getNext(); } }
void VideoRegionsConfigDialog::updateUI() { StringVector *videoClasses = m_config->getVideoClassNames(); std::vector<Rect> *videoRects = m_config->getVideoRects(); StringStorage textAreaData; TCHAR endLine[3] = {13, 10, 0}; { AutoLock al(m_config); textAreaData.setString(_T("")); for (size_t i = 0; i < videoClasses->size(); i++) { textAreaData.appendString(videoClasses->at(i).getString()); textAreaData.appendString(&endLine[0]); } TCHAR buffer[32]; _ltot(m_config->getVideoRecognitionInterval(), &buffer[0], 10); m_videoRecognitionInterval.setText(buffer); } m_videoClasses.setText(textAreaData.getString()); { AutoLock al(m_config); textAreaData.setString(_T("")); for (size_t i = 0; i < videoRects->size(); i++) { Rect r = videoRects->at(i); StringStorage s; RectSerializer::toString(&r, &s); textAreaData.appendString(s.getString()); textAreaData.appendString(&endLine[0]); } } m_videoRects.setText(textAreaData.getString()); }
int RemoteViewerCore::negotiateAboutSecurityType() { m_logWriter.detail(_T("Reading list of security types...")); // read list of security types vector<UINT32> secTypes; readSecurityTypeList(&secTypes); m_logWriter.debug(_T("List of security type is read")); if (secTypes.size() == 0) { m_logWriter.warning(_T("Error in negotiate about of security: only security type is 0")); return 0; } // log information about security list StringStorage secTypeString; for (vector<UINT32>::iterator i = secTypes.begin(); i != secTypes.end(); i++) { if(i != secTypes.begin()) secTypeString.appendString(_T(", ")); StringStorage nameType; nameType.format(_T("%s (%d)"), getSecurityTypeName(*i).getString(), *i); secTypeString.appendString(nameType.getString()); } m_logWriter.detail(_T("Security Types received (%d): %s"), secTypes.size(), secTypeString.getString()); // select type security m_logWriter.debug(_T("Selecting auth-handler")); int typeSelected = selectSecurityType(&secTypes, &m_authHandlers); m_logWriter.info(_T("Security type is selected: %d"), typeSelected); if (typeSelected == SecurityDefs::TIGHT) { m_logWriter.info(_T("Tight capabilities is enable")); m_isTight = true; m_output->writeUInt8(typeSelected); m_output->flush(); initTunnelling(); return initAuthentication(); } if (m_minor >= 7) { m_output->writeUInt8(typeSelected); m_output->flush(); } return typeSelected; }
UINT64 UploadOperation::getInputFilesSize() { UINT64 totalFilesSize = 0; FileInfoList *fil = m_toCopy; while (fil != NULL) { StringStorage pathNoRoot; StringStorage pathToFile; fil->getAbsolutePath(&pathNoRoot, _T('\\')); pathToFile.setString(m_pathToSourceRoot.getString()); pathToFile.appendString(_T("\\")); pathToFile.appendString(pathNoRoot.getString()); totalFilesSize += getFileSize(pathToFile.getString()); fil = fil->getNext(); } return totalFilesSize; }
void RemoteViewerCore::authenticate() { m_logWriter.detail(_T("Negotiating about security type...")); int authenticationType = negotiateAboutSecurityType(); m_logWriter.info(_T("Authentication type accepted: %s (%d)"), getAuthenticationTypeName(authenticationType).getString(), authenticationType); if (authenticationType != 0) { m_logWriter.detail(_T("Authentication...")); if (m_authHandlers.find(authenticationType) != m_authHandlers.end()) { m_authHandlers[authenticationType]->authenticate(m_input, m_output); } else { // Security type is added automatic, but not by user. if (authenticationType != SecurityDefs::NONE) { m_logWriter.error(_T("Isn't exist authentication handler for selected security type %d"), authenticationType); throw AuthException(_T("Isn't exist authentication handler ") _T("for selected type of authentication")); } } } // get authentication result, if version 3.8 or authentication isn't None if (m_minor >= 8 || authenticationType != SecurityDefs::NONE) { UINT32 authResult = 0; if (authenticationType) { authResult = m_input->readUInt32(); m_logWriter.detail(_T("Auth result is %d"), authResult); } static const UINT32 AUTH_RESULT_OK = 0; if (!authenticationType || authResult != AUTH_RESULT_OK) { // if version 3.3 or 3.7 then server connection closed m_logWriter.message(_T("Authentication failure")); if (m_minor < 8) { throw AuthException(_T("Authentication failure")); } // if version 3.8 then try read reasonAuth. StringStorage reasonAuth; m_input->readUTF8(&reasonAuth); StringStorage errorMessage = _T("Authentication reason: "); errorMessage.appendString(reasonAuth.getString()); m_logWriter.message(_T("%s"), errorMessage.getString()); throw AuthException(errorMessage.getString()); } } }
void TvnServer::getServerInfo(TvnServerInfo *info) { bool rfbServerListening = true; { AutoLock l(&m_mutex); rfbServerListening = m_rfbServer != 0; } StringStorage statusString; bool vncAuthEnabled = m_config->isUsingAuthentication(); bool noVncPasswords = !m_config->hasPrimaryPassword() && !m_config->hasReadOnlyPassword(); bool vncPasswordsError = vncAuthEnabled && noVncPasswords; if (rfbServerListening) { if (vncPasswordsError) { statusString = StringTable::getString(IDS_NO_PASSWORDS_SET); } else { char localAddressString[1024]; getLocalIPAddrString(localAddressString, 1024); statusString.fromAnsiString(localAddressString); if (!vncAuthEnabled) { statusString.appendString(StringTable::getString(IDS_NO_AUTH_STATUS)); } } } else { statusString = StringTable::getString(IDS_SERVER_NOT_LISTENING); } UINT stringId = m_runAsService ? IDS_TVNSERVER_SERVICE : IDS_TVNSERVER_APP; info->m_statusText.format(_T("%s - %s"), StringTable::getString(stringId), statusString.getString()); info->m_acceptFlag = rfbServerListening && !vncPasswordsError; info->m_serviceFlag = m_runAsService; }
void Log::vprint(int logLevel, const TCHAR *fmt, va_list argList) { Log *instance = getInstance(); if (instance == 0) { return; } StringStorage timeString(_T("[Temporary unavaliable]")); SYSTEMTIME st; GetLocalTime(&st); timeString.format(_T("%.4d-%.2d-%.2d %.2d:%.2d:%.2d"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); const TCHAR logLevelSignature[] = _T("@!*+-: xxxxxx"); TCHAR sig = logLevelSignature[logLevel & 0x0F]; int count = _vsctprintf(fmt, argList); TCHAR *formattedString = new TCHAR[count + 1]; _vstprintf(formattedString, fmt, argList); StringStorage message; message.format(_T("[%4d] %s %c %s"), GetCurrentThreadId(), timeString.getString(), sig, formattedString); const TCHAR badCharacters[] = {13, 10, 0}; message.removeChars(badCharacters, sizeof(badCharacters) / sizeof(TCHAR)); delete[] formattedString; const TCHAR endLine[3] = {13, 10, 0}; message.appendString(endLine); instance->flushLine(logLevel, message.getString()); }
DesktopServerApplication::DesktopServerApplication(HINSTANCE appInstance, const TCHAR *commandLine) : LocalWindowsApplication(appInstance), m_clToSrvChan(0), m_srvToClChan(0), m_clToSrvGate(0), m_srvToClGate(0), m_dispatcher(0), m_updHandlerSrv(0), m_uiSrv(0), m_cfgServer(0), m_gateKickHandler(0), m_sessionChangesWatcher(0) { DesktopServerCommandLine cmdLineParser; cmdLineParser.parse(commandLine); DWORD baseSessionId = WTS::getActiveConsoleSessionId(); StringStorage pathToLog; cmdLineParser.getLogDir(&pathToLog); if (!pathToLog.endsWith(_T('\\'))) { pathToLog.appendChar(_T('\\')); } pathToLog.appendString(_T("dtserver.log")); m_log = new FileLog(pathToLog.getString(), true); Configurator::getInstance()->addListener(this); m_log->changeLevel(cmdLineParser.getLogLevel()); Log::message(_T("Log level has been changed to %d"), cmdLineParser.getLogLevel()); try { StringStorage shMemName; cmdLineParser.getSharedMemName(&shMemName); SharedMemory shMem(shMemName.getString(), 72); UINT64 *mem = (UINT64 *)shMem.getMemPointer(); HANDLE hWrite, hRead; DateTime startTime = DateTime::now(); while (mem[0] == 0) { unsigned int timeForWait = max((int)10000 - (int)(DateTime::now() - startTime).getTime(), 0); if (timeForWait == 0) { throw Exception(_T("The desktop server time out expired")); } } hWrite = (HANDLE)mem[1]; hRead = (HANDLE)mem[2]; m_clToSrvChan = new AnonymousPipe(hWrite, hRead); Log::info(_T("Client->server hWrite = %u; hRead = %u"), hWrite, hRead); hWrite = (HANDLE)mem[3]; hRead = (HANDLE)mem[4]; m_srvToClChan = new AnonymousPipe(hWrite, hRead); Log::info(_T("Server->client hWrite = %u; hRead = %u"), hWrite, hRead); m_clToSrvGate = new BlockingGate(m_clToSrvChan); m_srvToClGate = new BlockingGate(m_srvToClChan); m_dispatcher = new DesktopSrvDispatcher(m_clToSrvGate, this); m_updHandlerSrv = new UpdateHandlerServer(m_srvToClGate, m_dispatcher, this); m_uiSrv = new UserInputServer(m_srvToClGate, m_dispatcher, this); m_cfgServer = new ConfigServer(m_dispatcher); m_gateKickHandler = new GateKickHandler(m_dispatcher); m_dispatcher->resume(); m_sessionChangesWatcher = new SessionChangesWatcher(this); } catch (Exception &e) { Log::error(e.getMessage()); freeResources(); throw; } }