Декодер кадров Netty для протокола с переменными строками на запрос?

Я новичок в Netty и пытаюсь создать простой SMTP-сервер. Проблема, с которой я столкнулся, заключается в том, что большинство команд SMTP-сервера состоят из одной строки, которая легко читается в методе messageReceived(). Однако после получения от клиента нескольких команд, состоящих из одной строки, часть «данные» электронной почты может содержать любое количество строк. Это хорошо работает с короткими электронными письмами, но более длинные электронные письма могут привести только к частичным данным. Насколько я понимаю, это связано с тем, что в данный момент у меня нет декодеров кадров.

У меня проблема в том, что однострочные команды разделяются переводом строки, но раздел «данные» состоит из любых числовых строк, оканчивающихся знаком «.». на своей линии.

Можно ли создать декодер кадров, который работает как для однострочных команд, так и для многострочных запросов, заканчивающихся специальной последовательностью символов?

Спасибо!

Дастин


person user1422475    schedule 28.05.2012    source источник


Ответы (2)


Вам не обязательно нужен один декодер для выполнения обеих задач. Вы можете создать два декодера, один для заголовков и один для части данных. После того, как вы завершили часть заголовка, получите ссылку на конвейер, удалите «декодер заголовка» и добавьте «декодер данных». После этого сбросьте конвейер до исходной конфигурации и продолжите.

person Nicholas    schedule 29.05.2012
comment
Сначала я настраиваю конвейер в обработчике, который является общим для всех входящих запросов. Если я получаю ссылку на конвейер во время обработки запроса, является ли этот конвейер специфичным для этого запроса (это означает, что я могу добавлять/удалять декодеры, не затрагивая другие запросы)? - person user1422475; 30.05.2012
comment
Вы держите пари! Нет. Нетти великолепна! - person Nicholas; 30.05.2012

Apache James использует Netty для SMTP, поэтому вы можете проверить, как они это делают: http://svn.apache.org/viewvc/james/server/trunk/protocols-smtp/src/main/java./org/apache/james/smtpserver/netty/

person Veebs    schedule 29.05.2012