Длина String8 (ListOfCARD8) в протоколе X11 - PullRequest
2 голосов
/ 02 марта 2010

Я работаю на прокси-сервере для X11, который также будет выполнять некоторые небольшие манипуляции с данными (глубина цвета, водяные знаки и некоторые другие) для определенных данных. У меня установлено и работает соединение, и я манипулирую ip-сервером в соединении по 177 / UDP, чтобы клиент правильно подключался через прокси-сервер, а не вызывал сервер. Другими словами, у меня есть полнофункциональный прокси-сервер, который передает данные через порт 6000 от клиента к серверу.

То, что я сейчас пытаюсь сделать, - это проанализировать поток данных и определить начало и тип каждого сообщения, чтобы отсеять данные, которые я просто передам, от данных, которыми я должен манипулировать. Однако я очень рано наткнулся на эту загадку.

Данные, которые я получаю от клиента, представляют собой один байт с метеорологом (в моем случае 'B', но я поддерживаю оба), за которыми следуют 2 байта для основной версии (3) и 2 байта для минорной версии (11). Обе они обозначены CARD16 в спецификации протокола (http://tools.ietf.org/html/rfc1013). Далее следует AuthorizationName, означающий тип используемой авторизации типа STRING8. STRING8 обозначается в документах как LISTOFCARD8, что означает список 8-разрядных целых чисел без знака.

Вот в чем проблема: я не знаю, как долго LISTOFCARD8. Снип из спецификации: «Размер поля длины может варьироваться (это не обязательно того же размера, что и FOO), в некоторых случаях может быть неявным, и не полностью указан в этом документе. ".

Фактические данные, которые я получил, начиная с байта 5 и далее в потоке данных, равны 0 0 12 0 10 0 0, а затем фактический поток данных (строка ASCII "MIT-MAGIC-COOKIE-1"). Я не могу определить допустимую длину строки из байтов, предшествующих ей, и сама строка не завершается нулем.

Итак, на мой вопрос, если он еще не сталкивался: как я могу определить длину ListOfFOO или, более конкретно, ListOfCARD8, как указано в RFC 1013?

Спасибо! // Эрик Йоханссон

1 Ответ

1 голос
/ 02 марта 2010

RFC 1013 - это никогда не используемая, давно устаревшая предварительная версия спецификации протокола X11, которую следует записать перед чтением и никогда не использовать.

Правильная текущая спецификация протокола X11 может быть найдена в http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.html или http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.pdf

...