![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
evkwarrior |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 15.3.2007 Репутация: нет Всего: 1 |
ДОброго времени суток, уважаемые форумчане
Возникла такая проблема: необходимо разработать шаблон (а точнее формат шаблона) для описания протоколов прикладного уровня (http, smtp и т.д.). в шаблоне должно находиться полное описание протокола (элементы, их характеристики и условия, налагаемые для них) к примеру, для протокола http шаблон должен включать примерно следующую инфу: стартовая строка (метод - uri - версия) заголовки (запросные заголовки (accept, referer и т.д), ответные заголовки, и т.д.) content-body + к этому для каждого элемента протокола условия его применения (запросные заголовки тогда, когда метод Get или post). фишка в том, что шаблон должен быть универсальным и способным описать любой протокол (как бинарный, так и текстовый) программа, обрабатывающая шаблон, не должна ничего знать о том, шаблон какого протокола она обрабатывает. причем важнее больше придумать формат шаблона (метод описания данных). я никогда с подобным не сталкивался, и эта задача ставит меня в ступор. я не прошу придумать что-то за меня, а просто хочу спросить совета: может, кто-то сталкивался с чем-то подобным (разработка шаблонов описания протоколов или файловых форматов) и может поделиться опытом, или кто-то знает, где копать на эту тему, где почитать. разработка планируется на C++ в QT или Visual Studio 2008 очень буду признателен, если кто-то поможет |
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 2 Всего: 23 |
Может быть это тебе поможет или подскажет направление мысли
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
какого рода обработка имеется ввиду ? в чем выражается результат этой обработки ? показать в виде некой иерархии составляющие протокола ? |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Я правильно понимаю, что нужен просто мегауниверсальный парсер? Описывать тривиально - описываешь список токенов и определяешь токен "весь поток данных". Описание - список из групп термов. Термы - определяем просто допустимый диапазон символов и их количество или же конкретные варианты. Проблема возникает в случае, если формат данных (в той или иной степени) тяжело описать декларативно. Но.. это уже из области экзотики (если делать парсер на разумном виде, без мегапроверок и конкретизаций). Немного сумбурно, но.. в целом верно ))
|
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
evkwarrior, ASN.1
|
|||
|
||||
evkwarrior |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 15.3.2007 Репутация: нет Всего: 1 |
спасибо всем, кто откликнулся)
попробую конкретизировать задачу, а точнее зайти с другой стороны. в итоге должен быть конструктор с 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 |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
например винда, даже для расскладки хранит dll, а не некое описание -
так и Вам имхо вместо изобретения шаблона описания, лучше продумать плагинную систему, возможно Вам будет удобно также прикрутить какой нибудь скриптовый язык для динамичного расширения возможностей плагина. ![]() |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
ИМХО очень очень...... сложно разработать универсальную штуку. ибо протоколы упомянутые топикстартером тривиальные, а есть еще всякого рода МЭКи где "черт ногу сломит" не говоря уже об всяких MMS, TASE и тд и тп.
Топикстартеру: делай то что сейчас нужно, не пытайся охватить все! |
|||
|
||||
evkwarrior |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 15.3.2007 Репутация: нет Всего: 1 |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
'некоторые последовательности' можно описать Конечным Автоматом. Условия для переходов между состояниями могут извлекаться из дешифрованных (шаблонами) данных.
Для описания самих шаблонов можно привлечь например XML Schema |
|||
|
||||
evkwarrior |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 15.3.2007 Репутация: нет Всего: 1 |
добавлю.
на другом форуме столкнулся с проблемой непонимания задачи. Мне нужно придумать универсальный ФОРМАТ шаблона, а не универсальный шаблон. шаблонов будет много, для каждого протокола. т.е. универсальный протокол описания протоколов) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |