示例#1
0
static qbool QTVList_Cache_File_Is_Old(void)
{
	SYSTEMTIME cache_time;
	SYSTEMTIME min_time; // minimum required time
	int diff;

	GetFileLocalTime(va("%s/%s/%s", com_basedir,
		QTVLIST_CACHE_FILE_DIR, QTVLIST_CACHE_FILE), &cache_time);

	GetLocalTime(&min_time);

	// subtract 7 days
	if (min_time.wDay > 7) {
		min_time.wDay -= 7;
	}
	else {
		// approximately 7 days in this case
		// let's not bother if a month has 28, 29, 30 or 31 days
		if (min_time.wMonth > 1) {
			min_time.wMonth -= 1;
			min_time.wDay += 22;
		}
		else {
			min_time.wYear -= 1;
			min_time.wMonth = 12;
			min_time.wDay += 22;
		}
	}

	diff = SYSTEMTIMEcmp(&cache_time, &min_time);
	return diff < 0;
}
示例#2
0
static void Precache_Source(source_data *s)
{
    int i;
    char name[1024];
    server_data *servers[MAX_SERVERS];
    int serversn = 0;

	if (s->type == type_url) {
		char *filename;
		size_t filename_size = SB_URL_To_Filename_Length(s->address.url);

		filename = Q_malloc(filename_size);
		SB_URL_to_FileName(s->address.url, filename, filename_size);
		snprintf(name, sizeof (name), "sb/cache/%s", filename);
		Q_free(filename);
	}
	else if (s->type == type_master) {
		snprintf(name, sizeof (name), "sb/cache/%d_%d_%d_%d_[%d].txt",
				s->address.address.ip[0], s->address.address.ip[1],
				s->address.address.ip[2], s->address.address.ip[3],
				ntohs(s->address.address.port));
	}
	else {
		return;
	}

	Update_Source_From_File(s, name, servers, &serversn);

	if (serversn > 0)
	{
		SYSTEMTIME tm;
		char tmp_path[MAX_OSPATH] = {0};

		snprintf(&tmp_path[0], sizeof(tmp_path), "%s/ezquake/%s", com_basedir, name);
		if (GetFileLocalTime(tmp_path, &tm))
		{
			Reset_Source(s);
			s->servers = (server_data **) Q_malloc(serversn * sizeof(server_data *));
			for (i=0; i < serversn; i++)
				s->servers[i] = servers[i];
			s->serversn = serversn;
			s->servers_allocated = serversn;

			if (s->checked)
				rebuild_servers_list = 1;

			memcpy(&s->last_update, &tm, sizeof(SYSTEMTIME));
		}
	}
}