Я работаю на прокси-сервере для 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?
Спасибо!
// Эрик Йоханссон