Мне нужно сделать реализацию SIP-прокси в C ++, используя стек SIP Resiprocate. Прокси-сервер всегда должен находиться между UAC и UAS и просто пересылать входящие SIP-запросы и ответы в двух направлениях.
Согласно моим прочтениям / пониманию протокола SIP, если прокси-сервер SIP хочет находиться между UAC и UAS, он должен ввести свой SIP-адрес в поле маршрута получаемых SIP-сообщений. Может кто-нибудь сказать мне, как я могу добавить / изменить поле маршрута во входящих сообщениях SIP в моей реализации прокси? Точнее, мне нужно знать, к каким заголовочным файлам / классам / функциям-дескрипторам я должен обращаться? Я немного новичок в SIP и повторно отвечаю на вопросы и заблудился в некотором роде в его исходном коде. Заранее спасибо.
П.С .: Можно задаться вопросом, почему я не использую собственную прокси-реализацию resiprocate. Это потому, что мне нужно разработать легкий прототип для особых нужд, просто используя сам API стека SIP. Прототип должен просто служить пересылкой в трафике SIP, не более того.
Далее следует работа в блоке else.
void insertRouteField(SipMessage * received)
{
ErrLog ( << "***********************************\n");
NameAddr& to = received->header(h_To);
ErrLog ( << "To Field: " << to.uri().toString());
NameAddr& from = received->header(h_From);
ErrLog ( << "From Field: " << from.uri().toString() );
ParserContainer<NameAddr>& rRoutes = received->header(h_RecordRoutes);
if(!rRoutes.empty())
{
NameAddr& frontRRoute = rRoutes.front();
ErrLog ( << "rRoutes: " << frontRRoute.uri().toString());
ErrLog ( << "***********************************\n");
}
else
{
NameAddr route;
route.uri().scheme() = "sip";
route.uri().user() = "proxy";
route.uri().host() = SipStack::getHostname();
route.uri().port() = 5070;
route.uri().param(p_transport) = Tuple::toData(mTransport);
rRoutes.push_front(route);
NameAddr& frontRRoute = rRoutes.front();
ErrLog ( << "rRoute: " << frontRRoute.uri().toString());
ErrLog ( << "***********************************");
}
}
Фильтры заголовков, на которые вы можете посмотреть:
«Resip / стеки / Helper.hxx» «resip / стеки / SipMessage.hxx» «resip / стеки / Uri.hxx» «resip / стеки / SipStack.hxx» «рутил / Logger.hxx» «рутил / ThreadIf.hxx» «resip / стек / ParserContainer.hxx»
Других решений пока нет …