Esempio n. 1
0
qboolean NET_OpenSocket(struct qw_connection *qwc, enum netsrc socknum, enum netaddrtype type)
{
	if (qwc->netdata->sockets[socknum])
		Sys_Net_DeleteSocket(qwc->netdata->sysnetdata, qwc->netdata->sockets[socknum]);

	qwc->netdata->sockets[socknum] = Sys_Net_CreateSocket(qwc->netdata->sysnetdata, type);

	if (qwc->netdata->sockets[socknum])
		return true;

	return false;
}
Esempio n. 2
0
void NET_ServerConfig (struct qw_connection *qwc, qboolean enable)
{
	int i, port;

	if (enable)
	{
		if (qwc->netdata->sockets[NS_SERVER] == 0)
		{
#warning Command line arguments are baaaaaad.
            /*
			port = 0;
			i = COM_CheckParm ("-port");
			if (i && i < com_argc)
				port = atoi(com_argv[i+1]);
                */
            port = 27666;
			if (!port)
				port = PORT_SERVER;

			qwc->netdata->sockets[NS_SERVER] = Sys_Net_CreateSocket(qwc->netdata->sysnetdata, NA_IPV4);
			if (qwc->netdata->sockets[NS_SERVER] == 0)
			{
				Com_Printf ("WARNING: Couldn't allocate server socket.\n");
			}
			else
			{
				if (!Sys_Net_Bind(qwc->netdata->sysnetdata, qwc->netdata->sockets[NS_SERVER], port))
				{
					Com_Printf("WARNING: Unable to bind server socket to port.\n");
				}
				else
				{
					return;
				}

				Sys_Net_DeleteSocket(qwc->netdata->sysnetdata, qwc->netdata->sockets[NS_SERVER]);
				qwc->netdata->sockets[NS_SERVER] = 0;
			}
		}
	}
	else
	{
		if (qwc->netdata->sockets[NS_SERVER] != 0)
		{
			Sys_Net_DeleteSocket(qwc->netdata->sysnetdata, qwc->netdata->sockets[NS_SERVER]);
			qwc->netdata->sockets[NS_SERVER] = 0;
		}
	}
}
static void ServerScanner_Thread_OpenSockets(struct ServerScanner *serverscanner)
{
	unsigned int i;
	enum netaddrtype addrtype;

	for(i=0;i<serverscanner->nummasterservers;i++)
	{
		addrtype = serverscanner->masterservers[i].addr.type;

		if (addrtype == NA_LOOPBACK)
			continue;

		if (serverscanner->sockets[addrtype] == 0)
			serverscanner->sockets[addrtype] = Sys_Net_CreateSocket(serverscanner->netdata, addrtype);

		if (serverscanner->sockets[addrtype] == 0)
			serverscanner->numvalidmasterservers--;
	}
}
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;
}