function server_query_frontlines($ip, $port, $q_port, $request) { global $server_timeout; $q_port = empty($q_port) ? 5478 : $q_port; @set_time_limit(2); $fp = @fsockopen("udp://" . $ip, $q_port, $errno, $errstr, $server_timeout); if ($request == "players") { fwrite($fp, "ÿÿÿÿW"); $challenge_packet = fread($fp, 4096); if (!$challenge_packet) { return FALSE; } $challenge_code = substr($challenge_packet, 5, 4); } if ($request == "players") { fwrite($fp, "ÿÿÿÿU{$challenge_code}"); } else { fwrite($fp, "ÿÿÿÿFLSQ"); } $buffer = fread($fp, 4096); if (!$buffer) { return FALSE; } if ($request == "info") { $buffer = substr($buffer, 6); // REMOVE PACKET HEADER $data['hostname'] = cut_string($buffer); $data['mapname'] = cut_string($buffer); $data['gamemod'] = strtolower(cut_string($buffer)); $data['gametype'] = cut_string($buffer); $data['players'] = _unpack(cut_byte($buffer, 1), "C"); $data['maxplayers'] = _unpack(cut_byte($buffer, 1), "C"); return $data; } if ($request == "players") { $buffer = substr($buffer, 4); // REMOVE PACKET HEADER $response_type = cut_byte($buffer, 1); $returned = ord(cut_byte($buffer, 1)); $player = array(); $player_key = 0; while ($buffer) { $player[$player_key]['pid'] = ord(cut_byte($buffer, 1)); $player[$player_key]['name'] = cut_string($buffer); $player[$player_key]['score'] = _unpack(cut_byte($buffer, 4), "N"); $player[$player_key]['time'] = _time(_unpack(strrev(cut_byte($buffer, 4)), "f")); $player[$player_key]['ping'] = _unpack(cut_byte($buffer, 2), "n"); $player[$player_key]['uid'] = _unpack(cut_byte($buffer, 4), "N"); $player[$player_key]['team'] = ord(cut_byte($buffer, 1)); $player_key++; } $player = array_reverse($player); return $player; } }
function server_query_halflife2($ip, $port, $q_port, $request) { global $server_timeout; $q_port = empty($q_port) ? $port : $q_port; $fp = @fsockopen("udp://{$ip}", $port, $errno, $errstr, $server_timeout); if (!$fp) { return FALSE; } stream_set_timeout($fp, 1, 0); stream_set_blocking($fp, true); if ($request == "players") { fwrite($fp, "ÿÿÿÿU"); $tmp = fread($fp, 4096); if (!$tmp) { fclose($fp); return FALSE; } $challengenumber = substr($tmp, 5, 4); } if ($request == "info") { $challenge = "ÿÿÿÿTSource Engine Query"; } if ($request == "players") { $challenge = "ÿÿÿÿU" . $challengenumber; } fwrite($fp, $challenge); $buffer = fread($fp, 4096); fclose($fp); $buffer = trim(substr($buffer, 4)); if (!trim($buffer)) { return FALSE; } if ($request == "info") { $tmp = substr($buffer, 2); $tmp = explode("", $tmp); $place = strlen($tmp[0] . $tmp[1] . $tmp[2] . $tmp[3]) + 8; $data['gamemod'] = $tmp[2]; $data['hostname'] = $tmp[0]; $data['mapname'] = $tmp[1]; $data['players'] = ord($buffer[$place]); $data['maxplayers'] = ord($buffer[$place + 1]); $data['password'] = ord($buffer[$place + 5]); $data['datatype'] = $buffer[0]; $data['version'] = ord($buffer[1]); $data['description'] = $tmp[3]; $data['botplayers'] = ord($buffer[$place + 2]); $data['server_type'] = $buffer[$place + 3]; $data['server_os'] = $buffer[$place + 4]; $data['server_bots'] = ord($buffer[$place + 2]); $data['server_secure'] = ord($buffer[$place + 6]); return $data; } if ($request == "players") { unset($player_key); $buffer = substr($buffer, 2); $player_key = 0; while ($buffer) { $player[$player_key]['id'] = ord(cut_byte($buffer, 1)); $player[$player_key]['name'] = cut_string($buffer); $player[$player_key]['score'] = @_unpack(cut_byte($buffer, 4), "l"); $player[$player_key]['time'] = _time(@_unpack(cut_byte($buffer, 4), "f")); $player_key++; } return $player; } }