| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > универсальный шаблон для описания протоколов |
| Автор: evkwarrior 7.12.2009, 11:41 |
| ДОброго времени суток, уважаемые форумчане Возникла такая проблема: необходимо разработать шаблон (а точнее формат шаблона) для описания протоколов прикладного уровня (http, smtp и т.д.). в шаблоне должно находиться полное описание протокола (элементы, их характеристики и условия, налагаемые для них) к примеру, для протокола http шаблон должен включать примерно следующую инфу: стартовая строка (метод - uri - версия) заголовки (запросные заголовки (accept, referer и т.д), ответные заголовки, и т.д.) content-body + к этому для каждого элемента протокола условия его применения (запросные заголовки тогда, когда метод Get или post). фишка в том, что шаблон должен быть универсальным и способным описать любой протокол (как бинарный, так и текстовый) программа, обрабатывающая шаблон, не должна ничего знать о том, шаблон какого протокола она обрабатывает. причем важнее больше придумать формат шаблона (метод описания данных). я никогда с подобным не сталкивался, и эта задача ставит меня в ступор. я не прошу придумать что-то за меня, а просто хочу спросить совета: может, кто-то сталкивался с чем-то подобным (разработка шаблонов описания протоколов или файловых форматов) и может поделиться опытом, или кто-то знает, где копать на эту тему, где почитать. разработка планируется на C++ в QT или Visual Studio 2008 очень буду признателен, если кто-то поможет |
| Автор: SenkraD 7.12.2009, 11:59 |
| Может быть http://www.eventhelix.com/realtimemantra/patterncatalog/protocol_layer.htm тебе поможет или подскажет направление мысли |
| Автор: Любитель 9.12.2009, 02:34 |
| Я правильно понимаю, что нужен просто мегауниверсальный парсер? Описывать тривиально - описываешь список токенов и определяешь токен "весь поток данных". Описание - список из групп термов. Термы - определяем просто допустимый диапазон символов и их количество или же конкретные варианты. Проблема возникает в случае, если формат данных (в той или иной степени) тяжело описать декларативно. Но.. это уже из области экзотики (если делать парсер на разумном виде, без мегапроверок и конкретизаций). Немного сумбурно, но.. в целом верно )) |
| Автор: chaos 9.12.2009, 10:44 |
| evkwarrior, http://ru.wikipedia.org/wiki/ASN.1 |
| Автор: evkwarrior 9.12.2009, 19:16 |
| спасибо всем, кто откликнулся) попробую конкретизировать задачу, а точнее зайти с другой стороны. в итоге должен быть конструктор с GUI. выбираем "открыть шаблон", открываем и нам отображается дерево. Каждый уровень этого дерева - это некоторое поле. причём надо ещё продумать некоторые контейнеры, содержащие внутри себя несколько полей. нажимаем на какое-нибудь поле или контейнер и где-то отображается информация о допустимых значениях для него, из которых можно выбрать. меняем значение - дерево перерисовывается с учётом условий на различные поля. и где-то внизу - окно с hex-дампом. соответственно выбор определённого поля или контейнера приводит к выделению в hex-дампе причастных к нему данных. при этом надо учесть возможность добавления полей (где это предусмотрено протоколом, например заголовки для http), понятно, что дерево открывается с минимумом данных и пользователь в процессе работы формирует полноценный файл или пакет для отправки. проблема в том, что для протоколов мало описать только поля. надо описать ещё и алгоритм взаимодействия. необходимо, чтобы сформированное в конструкторе можно было ещё и отправить по сети. некоторые протоколы описывают сеансы, некоторую последовательность действий между подключением и отключением как быть с некоторыми последовательностями действий - хрен знает. например для ftp: >открыли порт 21 <ждем 220 >user "login" <if 331 continue else repeat >pass "pass" <if 230 continue else repeat >command <wait for answer ......... >quit вот. с другой стороны, последовательность действий можно вынести из шаблона. а в шаблоне описать только возможные пакеты для отправки. и вообще, может для данной задачи бессмысленно делать универсальную программу-обработчик и универсальный шаблон?? но тогда придётся с каждым новым форматом или протоколом переписывать прогу, и так до бесконечности или сделать 2 шаблона - только данные и условия и сам алгоритм? как быть? |
| Автор: mes 9.12.2009, 22:54 |
| например винда, даже для расскладки хранит dll, а не некое описание - так и Вам имхо вместо изобретения шаблона описания, лучше продумать плагинную систему, возможно Вам будет удобно также прикрутить какой нибудь скриптовый язык для динамичного расширения возможностей плагина. |
| Автор: chaos 10.12.2009, 09:20 |
| ИМХО очень очень...... сложно разработать универсальную штуку. ибо протоколы упомянутые топикстартером тривиальные, а есть еще всякого рода МЭКи где "черт ногу сломит" не говоря уже об всяких MMS, TASE и тд и тп. Топикстартеру: делай то что сейчас нужно, не пытайся охватить все! |
| Автор: evkwarrior 10.12.2009, 13:19 | ||
я ни разу не сталкивался с плагинной системой. может подскажете, с чего начать? есть ли что-то готовое в данной области? |
| Автор: xvr 10.12.2009, 13:41 |
| 'некоторые последовательности' можно описать Конечным Автоматом. Условия для переходов между состояниями могут извлекаться из дешифрованных (шаблонами) данных. Для описания самих шаблонов можно привлечь например XML Schema |
| Автор: evkwarrior 10.12.2009, 15:16 |
| добавлю. на другом форуме столкнулся с проблемой непонимания задачи. Мне нужно придумать универсальный ФОРМАТ шаблона, а не универсальный шаблон. шаблонов будет много, для каждого протокола. т.е. универсальный протокол описания протоколов) |