static void ServerScanner_Thread_QueryMasters(struct ServerScanner *serverscanner)
{
	static const char querystring[] = "c\n";
	unsigned int i;

	for(i=0;i<serverscanner->nummasterservers;i++)
	{
		if (serverscanner->sockets[serverscanner->masterservers[i].addr.type])
		{
			Sys_Net_Send(serverscanner->netdata, serverscanner->sockets[serverscanner->masterservers[i].addr.type], querystring, 3, &serverscanner->masterservers[i].addr);
		}
	}
}
static void ServerScanner_Thread_SendQWRequest(struct ServerScanner *serverscanner, struct qwserverpriv *qwserver)
{
	static const char querystring[] = "\xff\xff\xff\xff" "status 23\n";

	qwserver->packetsendtime = Sys_IntTime();
	Sys_Net_Send(serverscanner->netdata, serverscanner->sockets[NA_IPV4], querystring, sizeof(querystring), &qwserver->pub.addr);
	if (qwserver->pub.status != QWSS_REQUESTSENT)
	{
		qwserver->pub.status = QWSS_REQUESTSENT;
		serverscanner->numqwserversscaninprogress++;
		qwserver->nextscaninprogress = serverscanner->qwserversscaninprogress;
		serverscanner->qwserversscaninprogress = qwserver;
	}
}
static void ServerScanner_Thread_SendQWPingRequest(struct ServerScanner *serverscanner, struct qwserverpriv *qwserver)
{
	unsigned long long curtime;
	static const char querystring[] = "\xff\xff\xff\xff" "k";

	curtime = Sys_IntTime();

	qwserver->packetsendtime = curtime;
	Sys_Net_Send(serverscanner->netdata, serverscanner->sockets[NA_IPV4], querystring, sizeof(querystring), &qwserver->pub.addr);

	serverscanner->numqwserverspinginprogress++;
	qwserver->nextpinginprogress = serverscanner->qwserverspinginprogress;
	serverscanner->qwserverspinginprogress = qwserver;

	serverscanner->lastpingtime = curtime;
}
Esempio n. 4
0
void NET_SendPacket(struct qw_connection *qwc, enum netsrc sock, int length, void *data, const struct netaddr *to)
{
	int ret;
	struct SysSocket *net_socket;

	if (to->type == NA_LOOPBACK)
	{
		NET_SendLoopPacket (qwc, sock, length, data, to);
		return;
	}

	net_socket = qwc->netdata->sockets[sock];
	if (net_socket == 0)
		return;

	ret = Sys_Net_Send(qwc->netdata->sysnetdata, net_socket, data, length, to);
	if (ret < 0)
	{
		Com_Printf("%s: Network error.\n", __func__);
	}
}
static void QTVR_Thread(void *arg)
{
	struct qtvr *qtvr;
	int r;
	char buf[128];
	struct netaddr serveraddr;
	struct netaddr addr;

	struct SysNetData *netdata;
	struct SysSocket *socket;

	qtvr = arg;

	netdata = Sys_Net_Init();

	if (netdata == NULL)
	{
		Com_Printf("QTVR_Thread: Sys_Net_Init failed.\n");
	}
	else
	{
		if (!NET_StringToAdr(netdata, qtvr->server, &serveraddr))
		{
			Com_Printf("QTVR_Thread: Unable to parse/resolve hoststring.\n");
		}
		else
		{
			socket = Sys_Net_CreateSocket(netdata, serveraddr.type);

			if (socket == NULL)
			{
				Com_Printf("QTVR_Create: could not create socket.\n");
			}
			else
			{
				Sys_Net_Send(netdata, socket, qtvr->request, strlen(qtvr->request), &serveraddr);

				while (!qtvr->quit)
				{
					Sys_Net_Wait(netdata, socket, 50000);

					if ((r = Sys_Net_Receive(netdata, socket, buf, sizeof(buf) - 1, &addr)) > 0)
					{
						buf[r] = 0;

						Sys_Thread_LockMutex(qtvr->mutex);
						qtvr->retval = strdup(buf);
						if (qtvr->retval == NULL)
							qtvr->status = QTVR_ERROR;
						else
							qtvr->status = QTVR_REPLY_RECIEVED;
						Sys_Thread_UnlockMutex(qtvr->mutex);

						break;
					}
				}

				Sys_Net_DeleteSocket(netdata, socket);
			}
		}

		Sys_Net_Shutdown(netdata);
	}

	if (qtvr->status != QTVR_REPLY_RECIEVED)
		qtvr->status = QTVR_ERROR;
}