Example #1
0
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;
    }
}
Example #2
0
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;
    }
}