SIP через TCP + конвертировать в UDP, чтобы общаться с SIP Phone

На моем Ubuntu 12.04 установлен linphone. Коллега хотел бы протестировать SIP-телефон Windows, который, по его словам, использует SIP поверх TCP, а не UDP.

Мне пришло в голову, что я мог бы создать 20-центовую программу C ++, которая имеет два потока, один для стороны UDP, один для стороны TCP, который просто получает один протокол и отправляет его другому. Поскольку часть UDP будет только на Linux, я сомневаюсь, что будут какие-то проблемы с дейтаграммами и потоками, и SIP в любом случае не особенно «потоковый».

Будет ли это работать или есть какая-то злобность протокола, о которой я не знаю. Используется ли SIP через TCP тот же SIP, который обычно передается по UDP? Есть ли известное C ++ решение для этого?

Я искал возможные решения, и Socat это возможно, но это GPL, и это предназначено для встроенного проекта ОСО.

Любые дополнительные советы или предложения будут приветствоваться.

1

Решение

Похоже, что Linphone поддерживает SIP через TCP (что предусмотрено RFC 3261).

http://www.linphone.org/eng/features/

И да, это те же SIP-сообщения по сети.

2

Другие решения

Ответ на ваш первоначальный вопрос заключается в том, что нет, вы не сможете просто «передать» TCP SIP-пакеты в ваш UDP-сокет. SIP включает тип транспорта в заголовок Via, который используется для определения сетевого пути для передачи ответов. В дополнение к этому для диалоговой передачи ваш SIP-сервер должен будет генерировать новые SIP-запросы, предназначенные для TCP-клиента, и ему потребуются некоторые настройки или механизм, чтобы заставить их отправлять эти запросы в ваш «канал», которые затем необходимо будет проанализировать. запрос SIP, чтобы определить, куда должен быть отправлен пакет.

В общем, это было бы в лучшем случае очень хрупкое решение, а в худшем — довольно сломанное. Было бы намного быстрее и проще найти SIP-сервер / клиент, который поддерживает TCP, как это делает большинство из них в наши дни, и на самом деле это то, что вы сделали и сделали.

2