void NET_QueryAddress(char *addr_str) { net_addr_t *addr; query_target_t *target; NET_Query_Init(); addr = NET_ResolveAddress(query_context, addr_str); if (addr == NULL) { I_Error("NET_QueryAddress: Host '%s' not found!", addr_str); } // Add the address to the list of targets. target = GetTargetForAddr(addr, true); printf("\nQuerying '%s'...\n", addr_str); // Run query loop. NET_Query_QueryLoop(NET_Query_ExitCallback, NULL); // Check if the target responded. if (target->state == QUERY_TARGET_RESPONDED) { NET_QueryPrintCallback(addr, &target->data, target->ping_time, NULL); } else { I_Error("No response from '%s'", addr_str); } }
static void NET_SV_ParseHolePunch(net_packet_t *packet) { const char *addr_string; net_packet_t *sendpacket; net_addr_t *addr; addr_string = NET_ReadString(packet); if (addr_string == NULL) { NET_Log("server: error: hole punch request but no address provided"); return; } addr = NET_ResolveAddress(server_context, addr_string); if (addr == NULL) { NET_Log("server: error: failed to resolve address: %s", addr_string); return; } sendpacket = NET_NewPacket(16); NET_WriteInt16(sendpacket, NET_PACKET_TYPE_NAT_HOLE_PUNCH); NET_SendPacket(addr, sendpacket); NET_FreePacket(sendpacket); NET_ReleaseAddress(addr); NET_Log("server: sent hole punch to %s", addr_string); }
net_addr_t *NET_Query_ResolveMaster(net_context_t *context) { net_addr_t *addr; addr = NET_ResolveAddress(context, MASTER_SERVER_ADDRESS); if (addr == NULL) { fprintf(stderr, "Warning: Failed to resolve address " "for master server: %s\n", MASTER_SERVER_ADDRESS); } return addr; }
static void NET_Query_ParseMasterResponse(net_addr_t *master_addr, net_packet_t *packet) { unsigned int packet_type; query_target_t *target; char *addr_str; net_addr_t *addr; // Read the header. We are only interested in query responses. if (!NET_ReadInt16(packet, &packet_type) || packet_type != NET_MASTER_PACKET_TYPE_QUERY_RESPONSE) { return; } // Read a list of strings containing the addresses of servers // that the master knows about. for (;;) { addr_str = NET_ReadString(packet); if (addr_str == NULL) { break; } // Resolve address and add to targets list if it is not already // there. addr = NET_ResolveAddress(query_context, addr_str); if (addr != NULL) { GetTargetForAddr(addr, true); } } // Mark the master as having responded. target = GetTargetForAddr(master_addr, true); target->state = QUERY_TARGET_RESPONDED; }
net_addr_t *NET_Query_ResolveMaster(net_context_t *context) { net_addr_t *addr = NULL; // [SVE]: We don't have a master server for Veteran Edition and it would be // rude to make UDP clients show up on master.chocolate-doom.org w/o special // permission, so this has been conditionalized out for the commercial build. #ifdef ALLOW_CHOCO_MASTER_SERVER addr = NET_ResolveAddress(context, MASTER_SERVER_ADDRESS); if (addr == NULL) { fprintf(stderr, "Warning: Failed to resolve address " "for master server: %s\n", MASTER_SERVER_ADDRESS); } #endif return addr; }