+ for (masternum = 0; masternum < DPMASTER_COUNT; ++masternum)
+ if (dpmasterstatus[masternum] && dpmasterstatus[masternum] < MASTER_RX_COMPLETE)
+ break; // was queried but no EOT marker received yet
+ if (masternum >= DPMASTER_COUNT)
+ {
+ serverlist_querystage = SLIST_QUERYSTAGE_SERVERS;
+ if (net_slist_debug.integer)
+ Con_Print("^2Starting to query servers early (got EOT from all masters)\n");
+ }
+}
+
+static void NetConn_ClientParsePacket_ServerList_ParseQWList(lhnetaddress_t *masteraddress, const char *masteraddressstring, const unsigned char *data, int length)
+{
+ uint8_t masternum;
+ lhnetaddress_t testaddress;
+
+ for (masternum = 0; masternum < QWMASTER_COUNT; ++masternum)
+ if (sv_qwmasters[masternum].string[0]
+ && LHNETADDRESS_FromString(&testaddress, sv_qwmasters[masternum].string, QWMASTER_PORT)
+ && LHNETADDRESS_Compare(&testaddress, masteraddress) == 0)
+ break;
+ if (net_sourceaddresscheck.integer && masternum >= QWMASTER_COUNT)
+ {
+ Con_Printf(CON_WARN "ignoring QuakeWorld server list from unrecognised master %s\n", masteraddressstring);
+ return;
+ }
+
+ masterreplycount++;
+ qwmasterstatus[masternum] = MASTER_RX_RESPONSE;
+ if (serverlist_consoleoutput || net_slist_debug.integer)
+ Con_Printf("^5Received QuakeWorld server list from %s\n", sv_qwmasters[masternum].string);
+
+ while (length >= 6 && (data[0] != 0xFF || data[1] != 0xFF || data[2] != 0xFF || data[3] != 0xFF) && data[4] * 256 + data[5] != 0)
+ {
+ char ipstring[32];
+
+ dpsnprintf (ipstring, sizeof (ipstring), "%u.%u.%u.%u:%u", data[0], data[1], data[2], data[3], data[4] * 256 + data[5]);
+ if (serverlist_consoleoutput && developer_networking.integer)
+ Con_Printf("Requesting info from QuakeWorld server %s\n", ipstring);
+
+ if (!NetConn_ClientParsePacket_ServerList_PrepareQuery(PROTOCOL_QUAKEWORLD, ipstring, false))
+ break;
+
+ // move on to next address in packet
+ data += 6;
+ length -= 6;
+ }
+
+ // Unlike in NetConn_ClientParsePacket_ServerList_ParseDPList()
+ // we can't start to query servers early here because QW has no EOT marker.