Предлагаю для поддержки множества протоколов использовать специально написанные модули.
Каждый модуль должен создаваться под конкретный протокол.
Каждый модуль должен экспортировать функции:
Код:
ITransportModule* init(const TXMLNode& config); //NULL если неправильный конфиг
void cleanup(ITransportModule* transport); //удаление ранее созданного объекта
char* error(); //возвращает текст ошибки, если init вернул NULL, иначе NULL.
ITransportModule* - интерфейс к транспорту, именно благодаря ему будет происходить сокрытие реализации протокола.
Примерный вид конфигурации:
Код:
<transport>
<tcp mode="listen">
<host>127.0.0.1</host>
...
<tcp mode="unicast">
<host>yurial.ru</host>
...
Собственно сейчас я хотел бы обсудить основные протоколы: tcp, udp, sctp и режимы их работы.
Мои предложения:
- upd/ip
- broadcast - для теста и отладки.
- detect - только обнаружение узлов в подсети
- multicast - вспомогательный протокол работы (я на него возлагаю большие надежды)
- stun - (rfc5389)
- tcp/ip
- listen - основной протокол для работы в Internet.
- unicast - основной протокол для работы в Internet (параметры списков будут обсуждаться отдельно, первоначально - явное указание).
- sctp/ip
- broadcast
- detect
- unicast
- listen
- stun
- multicast
- возможно более интеллектуальные режимы
В первую очередь, думаю, необходимо реализовать поддержку tcp/ip - обсуждение в отдельной теме.
Замечания и предложения будут вносится в этот пост, комментарии будут удаляться.