/** * @brief * @sa Qcommon_Init * @sa Sys_Quit * @note Don't call anything that depends on cvars, command system, or any other * subsystem that is allocated in the mem pools and maybe already freed */ void Qcommon_Shutdown (void) { HTTP_Cleanup(); FS_Shutdown(); Cvar_Shutdown(); Cmd_Shutdown(); NET_Shutdown(); Mem_Shutdown(); Com_Shutdown(); }
int main(int argc, char* argv[]) { int idx = 1; std::string filename = ""; std::string ipaddress = ""; int port = 0; std::string trackerip = ""; int trackerport = 0; std::string hash = ""; int listenOpt = 0; if (argc < 2) { _usage(); exit(0); } while (argc > idx) { char* arg = argv[idx]; if (strlen(arg) == 2 && arg[0] == '-') { idx++; switch (arg[1]) { case 'h': printf("h : %s\n", argv[idx]); hash = argv[idx]; break; case 't': { printf("t : %s\n", argv[idx]); char* semi = strchr(argv[idx], ':'); if (semi) { *semi = 0; trackerip = argv[idx]; trackerport = atoi(semi + 1); } else { port = atoi(argv[idx]); } break; } case 'f': printf("f : %s\n", argv[idx]); filename = argv[idx]; break; case 'l': { printf("l : %s\n", argv[idx]); char* semi = strchr(argv[idx], ':'); if (semi) { *semi = 0; ipaddress = argv[idx]; port = atoi(semi + 1); } else { port = atoi(argv[idx]); } break; } case 'd': SetLogLevel(LOG_LEVEL_DEBUG); idx--; break; case 'o': listenOpt = 1; idx--; break; } idx++; } } if (trackerip.length() > 0) { if (hash.length() <= 0) { _usage(); exit(0); } if (trackerport <= 0) { _usage(); exit(0); } if (port <= 0) { _usage(); exit(0); } } else { if (port <= 0) { _usage(); exit(0); } if (filename.length() <= 0) { _usage(); exit(0); } } MetaDataSt metaData; _readConfigFile(metaData); HTTP_Startup(); PPServer ppserver; ppserver.SetPort(port); ppserver.SetIpAddress(ipaddress); ppserver.SetFileName(filename); ppserver.SetSwarmID(hash); ppserver.SetTrackerIpAddress(trackerip); ppserver.SetTrackerPort(trackerport); ppserver.SetVersion(metaData.version); ppserver.SetMinVersion(metaData.mkinVersion); ppserver.SetContentIntegrityProtectionMethod(metaData.contentIntegrityProtectionMethod); ppserver.SetMerkleHashTreeFunction(metaData.merkleHashTreeFunction); ppserver.SetLiveSignatureAlgorithm(metaData.liveSignatureAlgorithm); ppserver.SetChunkAddressingMethod(metaData.chunkAddressingMethod); ppserver.SetChunkSize(metaData.chunkSize); ppserver.SetRetryCount(metaData.retryCount); ppserver.SetKeepAliveInterval(metaData.keepAliveInterval); ppserver.SetPexReqInterval(metaData.pexReqInterval); ppserver.SetListenPortOption(listenOpt); if (!ppserver.Start()) { exit(0); } ppserver.Join(); HTTP_Cleanup(); return 0; }