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; }
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; }