LGSL и Counter-Strike: Source
В мониторинге заметил странную особенность, у некоторых CSS серверов напрочь не хотела отображаться страница с подробной информацией.
Разобраться дошли руки только сейчас. Все оказалось в том что сервера отвечали сжатыми данными (BZip), а LGSL их не очень правильно воспринимал.
Если быть более точным то, LGSL стандартно принимает все пакеты, обнаруживает по первому пакету что это 4й тип (BZip данные) и режет, тут то собака и зарыта. От серверов чаще всего приходило 2 пакета, начало и продолжение. А LGSL воспринимал это как 2 разных пакета и обрезал в начале по 18 байт. Хотя если пакет "продолжение" у него нужно обрезать 10 байт.
Не буду дальше продолжать и углубляться в мат. часть предоставлю сразу исправления:
Открыть: ./lgsl_files/lgsl_protocol.php
Найти:
1 | elseif ($packet_type == 4) { $packet_order = ord($packet[9]); $packet = substr($packet, 18); } |
Заменить на:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | elseif ($packet_type == 4) { $packet_order = ord($packet[9]); if ($packet_order == 0) { list(, $packet_checksum) = unpack('V', substr($packet, 14, 4)); // CRC32 checksum $packet = substr($packet, 18); } else { $packet = substr($packet, 10); } } |
Найти:
1 | $buffer = bzdecompress($buffer); |
Добавить ниже:
1 2 3 4 5 | if (crc32($buffer) != $packet_checksum) { $server['e']['bzip2'] = "unavailable"; $lgsl_need['e'] = FALSE; return TRUE; } |
Закрыть и загрузить на сервер.
Все.

rostov114@mail.ru