std::string ResolveIgniteHome(const std::string& path) { // 1. Check passed argument. if (IsValidDirectory(path)) return path; // 2. Check environment variable. std::string home = GetEnv(IGNITE_HOME); if (IsValidDirectory(home)) return home; // 3. Check current work dir. DWORD curDirLen = GetCurrentDirectoryA(0, NULL); if (!curDirLen) return std::string(); FixedSizeArray<char> curDir(curDirLen); curDirLen = GetCurrentDirectoryA(curDir.GetSize(), curDir.GetData()); if (!curDirLen) return std::string(); std::string curDirStr(curDir.GetData()); return ResolveIgniteHome0(curDirStr); }
///////////////////////////////////////////////////////// // Read settings : // Parse the settings table and call ReadKey ///////////////////////////////////////////////////////// BOOL Tftpd32ReadSettings (void) { int Ark, Rc=TRUE; char szCurDir[_MAX_PATH]; for (Ark=0 ; Ark< SizeOfTab (tTftpd32Entry) ; Ark++) ReadKey ( TFTPD32_MAIN_KEY, tTftpd32Entry[Ark].szEntry, tTftpd32Entry[Ark].pValue, tTftpd32Entry[Ark].nBufSize, tTftpd32Entry[Ark].nType, szTftpd32IniFile ); if (sSettings.uServices == TFTPD32_NONE) sSettings.uServices = TFTPD32_ALL_SERVICES; // field WorkingDirectory : // try env variable then szBaseDir and current dir if ( GetEnvironmentVariable (TFTP_DIR, szCurDir, sizeof szCurDir) != 0 && IsValidDirectory ( szCurDir ) ) GetFullPathName ( szCurDir, sizeof sSettings.szWorkingDirectory, sSettings.szWorkingDirectory, NULL ); else if ( IsValidDirectory ( sSettings.szBaseDirectory ) ) GetFullPathName ( sSettings.szBaseDirectory, sizeof sSettings.szWorkingDirectory, sSettings.szWorkingDirectory, NULL ); else GetCurrentDirectory ( sizeof sSettings.szWorkingDirectory, sSettings.szWorkingDirectory ); // release for the Australian Department of defence #ifdef BAE_SYSTEMS_LEN_WHITE sSettings.uServices = TFTPD32_TFTP_SERVER; #endif return Rc; } // Tftpd32ReadSettings
/** * Helper function for Ignite home resolution. * Goes upwards in directory hierarchy and checks whether certain * folders exist in the path. * * @param path Path to evaluate. * @return res Resolved directory. Empty string if not found. */ std::string ResolveIgniteHome0(const std::string& path) { if (!IsValidDirectory(path)) return std::string(); // Remove trailing slashes, otherwise we will have an infinite loop. size_t last = path.find_last_not_of("/\\ "); if (last == std::string::npos) return std::string(); std::string path0(path, 0, last + 1); if (LooksLikeBinaryReleaseHome(path0) || LooksLikeSourceReleaseHome(path0)) return path0; // Evaluate parent directory. size_t slashPos = path0.find_last_of("/\\"); if (slashPos == std::string::npos) return std::string(); std::string parent(path0, 0, slashPos); return ResolveIgniteHome0(parent); }
/** * Checks if the path looks like source release home directory. * Internally checks for presence of core source directory. * @return @c true if the path looks like binary release home directory. */ bool LooksLikeSourceReleaseHome(const std::string& path) { static const char* PROBE_CORE_SOURCE = "\\modules\\core\\src\\main\\java\\org\\apache\\ignite"; std::string coreSourcePath = path + PROBE_CORE_SOURCE; return IsValidDirectory(coreSourcePath); }
/** * Checks if the path looks like source release home directory. * Internally checks for presence of core source directory. * @return @c true if the path looks like binary release home directory. */ bool LooksLikeSourceReleaseHome(const std::string& path) { static const char* PROBE_CORE_SOURCE = "/modules/core/src/main/java/org/apache/ignite"; std::string coreSourcePath = path + PROBE_CORE_SOURCE; return IsValidDirectory(coreSourcePath); }
std::string ResolveIgniteHome(const std::string& path) { // 1. Check passed argument. if (IsValidDirectory(path)) return path; // 2. Check environment variable. std::string home = GetEnv(IGNITE_HOME); if (IsValidDirectory(home)) return home; // 3. Check current work dir. FixedSizeArray<char> curDir(1024 * 16); char* res = getcwd(curDir.GetData(), curDir.GetSize()); if (!res) return std::string(); std::string curDirStr(curDir.GetData()); return ResolveIgniteHome0(curDirStr); }
int udt_main(int argc, char** argv) { if(argc == 1) { PrintHelp(); return 0; } bool fileMode = false; const char* const inputPath = argv[argc - 1]; if(udtFileStream::Exists(inputPath) && udtPath::HasValidDemoFileExtension(inputPath)) { fileMode = true; } else if(!IsValidDirectory(inputPath)) { fprintf(stderr, "Invalid file/folder path.\n"); return 1; } bool recursive = false; Config config; for(int i = 1; i < argc - 1; ++i) { s32 localMaxThreads = 1; s32 localProtocol = (s32)udtProtocol::Invalid; const udtString arg = udtString::NewConstRef(argv[i]); if(udtString::StartsWith(arg, "-p=") && arg.GetLength() >= 4 && StringParseInt(localProtocol, arg.GetPtr() + 3)) { if(localProtocol == 68) { config.OutputProtocol = udtProtocol::Dm68; } else if(localProtocol == 91) { config.OutputProtocol = udtProtocol::Dm91; } } else if(udtString::Equals(arg, "-r")) { recursive = true; } else if(udtString::StartsWith(arg, "-o=") && arg.GetLength() >= 4 && IsValidDirectory(argv[i] + 3)) { config.CustomOutputFolder = argv[i] + 3; } else if(udtString::StartsWith(arg, "-t=") && arg.GetLength() >= 4 && StringParseInt(localMaxThreads, arg.GetPtr() + 3) && localMaxThreads >= 1 && localMaxThreads <= 16) { config.MaxThreadCount = (u32)localMaxThreads; } } if(config.OutputProtocol == udtProtocol::Invalid) { fprintf(stderr, "Invalid or unspecified output protocol number.\n"); return 1; } if(fileMode) { if(!IsValidConversion((udtProtocol::Id)udtGetProtocolByFilePath(inputPath), config.OutputProtocol)) { fprintf(stderr, "Unsupported conversion.\n"); return 1; } udtFileInfo fileInfo; fileInfo.Name = udtString::NewNull(); fileInfo.Path = udtString::NewConstRef(inputPath); fileInfo.Size = 0; return ConvertMultipleDemos(&fileInfo, 1, config) ? 0 : 1; } udtFileListQuery query; query.InitAllocators(64); query.FileFilter = &KeepOnlyCompatibleDemoFiles; query.FolderPath = udtString::NewConstRef(inputPath); query.Recursive = recursive; query.UserData = &config; GetDirectoryFileList(query); if(query.Files.IsEmpty()) { fprintf(stderr, "No compatible demo file found.\n"); return 1; } return ConvertMultipleDemos(query.Files.GetStartAddress(), query.Files.GetSize(), config) ? 0 : 1; }
static int ProcessMsg (SOCKET s, const struct S_ConsoleMsg *pmsg) { struct LL_TftpInfo *pTftp; int uServices; LogToMonitor ("TFTPd console receive msg %d\n", pmsg->type); switch (pmsg->type) { case C_CONS_KILL_TRF : LOG (1, "transfer %d must be killed", pmsg->u.kill.dwTransferId); for ( pTftp=pTftpFirst ; pTftp!=NULL && pTftp->tm.dwTransferId != pmsg->u.kill.dwTransferId ; pTftp = pTftp->next ); if (pTftp != NULL) { nak (pTftp, ECANCELLED); pTftp->st.ret_code=TFTP_TRF_STOPPED; } break; case C_TFTP_TERMINATE : LogToMonitor ("terminating TFTP service\n"); tThreads[TH_TFTP].gRunning = FALSE; WakeUpThread (TH_TFTP); break; case C_DHCP_TERMINATE : LogToMonitor ("terminating DHCP service\n"); tThreads[TH_DHCP].gRunning = FALSE; // wake up DHCP thread WakeUpThread (TH_DHCP); break; case C_TERMINATE : LogToMonitor ("stopping services\n"); TerminateWorkerThreads (FALSE); // keep management threads break; case C_SUSPEND : LogToMonitor ("suspending services\n"); TerminateWorkerThreads (TRUE); // keep management threads break; case C_START : LogToMonitor ("starting services\n"); StartMultiWorkerThreads (TRUE); break; case C_DHCP_RRQ_SETTINGS : LogToMonitor ("sending DHCP settings\n"); SendMsg (s, C_DHCP_RPLY_SETTINGS, & sParamDHCP, sizeof sParamDHCP); break; case C_TFTP_RRQ_SETTINGS : LogToMonitor ("sending TFTP settings\n"); SendMsg (s, C_TFTP_RPLY_SETTINGS, & sSettings, sizeof sSettings); break; case C_DHCP_WRQ_SETTINGS : LogToMonitor ("storing new DHCP settings\n"); DHCPSaveConfig ( & pmsg->u.dhcp_settings ); break; case C_TFTP_WRQ_SETTINGS : LogToMonitor ("storing new TFTP settings\n"); {static struct S_RestartTable sRestart; sRestart.newservices = pmsg->u.tftp_settings.uServices; sRestart.oldservices = sSettings.uServices; sRestart.flapservices = 0; if ( sSettings.Port != pmsg->u.tftp_settings.Port || lstrcmp (sSettings.szTftpLocalIP, pmsg->u.tftp_settings.szTftpLocalIP )!=0 ) sRestart.flapservices |= TFTPD32_TFTP_SERVER; // restart syslog if its settings log has changed if ( sSettings.uServices & TFTPD32_SYSLOG_SERVER && ( sSettings.bSyslogPipe != pmsg->u.tftp_settings.bSyslogPipe || strcmp(sSettings.szSyslogFile,pmsg->u.tftp_settings.szSyslogFile)!= 0 ) ) sRestart.flapservices |= TFTPD32_SYSLOG_SERVER; sSettings = pmsg->u.tftp_settings; if ( IsValidDirectory ( pmsg->u.tftp_settings.szBaseDirectory ) ) lstrcpyn ( sSettings.szWorkingDirectory, pmsg->u.tftp_settings.szBaseDirectory, sizeof sSettings.szWorkingDirectory ); _beginthread ( Tftpd32UpdateServices, 0, (void *) & sRestart ); Tftpd32SaveSettings (); } break; case C_TFTP_RESTORE_DEFAULT_SETTINGS : LogToMonitor ("restore default settings\n"); Tftpd32DestroySettings (); break; case C_TFTP_CHG_WORKING_DIR : LogToMonitor ("changing working directory to <%s>\n", pmsg->u.working_dir); if ( IsValidDirectory ( pmsg->u.working_dir ) ) lstrcpyn ( sSettings.szWorkingDirectory, pmsg->u.working_dir, sizeof sSettings.szWorkingDirectory ); break; case C_RRQ_WORKING_DIR : LogToMonitor ("sending working directory <%s>\n", sSettings.szWorkingDirectory); SendMsg (s, C_REPLY_WORKING_DIR, sSettings.szWorkingDirectory, 1 + lstrlen (sSettings.szWorkingDirectory) ); break; case C_DELETE_ASSIGNATION : LogToMonitor ("deleting DHCP entry %X\n", pmsg->u.del_lease.ip); { struct in_addr addr; BOOL dummy; addr.s_addr = pmsg->u.del_lease.ip; DHCPDestroyItem ( DHCPSearchByIP ( & addr, &dummy ) ); } break; case C_RRQ_GET_SERVICES : LogToMonitor ("sending running services\n"); uServices = GetRunningThreads (); SendMsg (s, C_REPLY_GET_SERVICES, & uServices, sizeof uServices ); break; case C_RRQ_GET_INTERFACES : LogToMonitor ("sending IP interfaces"); AnswerIPList (); break; case C_RRQ_DIRECTORY_CONTENT : LogToMonitor ("sending Directory content"); SendDirectoryContent (); break; case C_TFTP_GET_FULL_STAT : LogToMonitor ("sending Directory content"); ConsoleTftpGetStatistics (); break; default : LogToMonitor ("Service received unknown message %d\n", pmsg->type); break; } return 1; } // ReadMsg