Хороший вопрос.
Начнем с того, что многие стеки SIP не могут реализовать TCP и поэтому не соответствуют требованиям, из раздела 18 RFC3261:
Все элементы SIP ДОЛЖНЫ реализовывать UDP и TCP. Элементы SIP МОГУТ реализовывать другие протоколы.
Asterisk - хороший тому пример.Часто утверждается, что он совместим с RFC3261, но поддержка TCP была добавлена недавно, и с ней все еще есть много ошибок. Есть лучшие продукты SIP, такие как продукты, производные от SER, которые, как я подозреваю, соответствуют RFC3261, я никогда не проверял ни один из них, но SER имел репутацию ведущего сервера SIP.
Также следует иметь в виду, что «стандарт SIP» теперь включает 8 дополнительных RFC, которые обновили или устранили исходный RFC3261. Кроме того, существует множество других RFC для расширений и исправлений для таких вещей, как NAT. Я думаю, можно с уверенностью сказать, что вряд ли будет какой-либо стек SIP, совместимый со всеми SIP RFC.
Я тоже написал стек SIP и пошел по тому же пути, что и вы; заставить его работать с устройствами, с которыми вы можете легко протестировать, а затем добавлять более эзотерические части стандарта по прошествии времени или по мере необходимости. Я даже зашел так далеко, что начал документировать, какие SIP RFC я пытаюсь реализовать.
Две конечные точки SIP могут быть SIP-совместимыми и по-прежнему не могут взаимодействовать. Таким образом, «полностью совместимого с SIP», увы, недостаточно, чтобы вы могли сказать «будет работать» без тестирования взаимодействия. Однако этого может быть достаточно, чтобы позволить вам вырезать часть из первоначального выбора.
Признаюсь, я тоже написал свой собственный стек SIP.
События SIP Interoperability Test генерируют довольно много данных взаимодействия. Например, из SIPit 25 в прошлом году мы находим следующее:
Implementations using each transport for SIP messages:
UDP 98%
TCP 83%
TLS 38% server-auth, 24% mutual-auth
SCTP 7%
DTLS 2%
36% of the implementations supported IPv6.