END_TEST START_TEST(check_Ms_BlacklistServer) { file_t *f = Fs_OpenAppend("servers-blacklist"); ck_assert_msg(f != NULL, "Failed to open servers-blacklist"); const char *test = "192.168.0.*\n"; int64_t len = Fs_Write(f, (void *) test, 1, strlen(test)); ck_assert_msg((size_t) len == strlen(test), "Failed to write servers-blacklist"); ck_assert_msg(Fs_Close(f), "Failed to close servers-blacklist"); struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); *(in_addr_t *) &addr.sin_addr = inet_addr("192.168.0.1"); addr.sin_family = AF_INET; addr.sin_port = htons(PORT_SERVER); ck_assert_msg(Ms_BlacklistServer(&addr), "Missed %s", inet_ntoa(addr.sin_addr)); *(in_addr_t *) &addr.sin_addr = inet_addr("127.0.0.1"); ck_assert_msg(!Ms_BlacklistServer(&addr), "False positive for %s", inet_ntoa(addr.sin_addr)); }
/* * @brief Returns true if the file exists, otherwise it attempts to start a download * from the server. */ _Bool Cl_CheckOrDownloadFile(const char *filename) { char cmd[MAX_STRING_CHARS]; if (cls.state == CL_DISCONNECTED) { Com_Print("Not connected\n"); return true; } if (IS_INVALID_DOWNLOAD(filename)) { Com_Warn("Refusing to download \"%s\"\n", filename); return true; } Com_Debug("Checking for %s\n", filename); if (Fs_Exists(filename)) { // it exists, no need to download return true; } Com_Debug("Attempting to download %s\n", filename); strncpy(cls.download.name, filename, sizeof(cls.download.name)); // udp downloads to a temp name, and only renames when done StripExtension(cls.download.name, cls.download.tempname); g_strlcat(cls.download.tempname, ".tmp", sizeof(cls.download.tempname)); // attempt an http download if available if (cls.download_url[0] && Cl_HttpDownload()) return false; // check to see if we already have a tmp for this file, if so, try to resume // open the file if not opened yet if (Fs_Exists(cls.download.tempname)) { // a temp file exists, resume download int64_t len = Fs_Load(cls.download.tempname, NULL); if ((cls.download.file = Fs_OpenAppend(cls.download.tempname))) { if (Fs_Seek(cls.download.file, len - 1)) { // give the server the offset to start the download Com_Debug("Resuming %s...\n", cls.download.name); g_snprintf(cmd, sizeof(cmd), "download %s %u", cls.download.name, (uint32_t) len); Net_WriteByte(&cls.net_chan.message, CL_CMD_STRING); Net_WriteString(&cls.net_chan.message, cmd); return false; } } } // or start if from the beginning Com_Debug("Downloading %s...\n", cls.download.name); g_snprintf(cmd, sizeof(cmd), "download %s", cls.download.name); Net_WriteByte(&cls.net_chan.message, CL_CMD_STRING); Net_WriteString(&cls.net_chan.message, cmd); return false; }