Пересылка SIP-запросов / ответов с использованием стека Resiprocate SIP

Мне нужно сделать реализацию SIP-прокси в C ++, используя стек SIP Resiprocate. Прокси-сервер всегда должен находиться между UAC и UAS и просто пересылать входящие SIP-запросы и ответы в двух направлениях.

Согласно моим прочтениям / пониманию протокола SIP, если прокси-сервер SIP хочет находиться между UAC и UAS, он должен ввести свой SIP-адрес в поле маршрута получаемых SIP-сообщений. Может кто-нибудь сказать мне, как я могу добавить / изменить поле маршрута во входящих сообщениях SIP в моей реализации прокси? Точнее, мне нужно знать, к каким заголовочным файлам / классам / функциям-дескрипторам я должен обращаться? Я немного новичок в SIP и повторно отвечаю на вопросы и заблудился в некотором роде в его исходном коде. Заранее спасибо.

П.С .: Можно задаться вопросом, почему я не использую собственную прокси-реализацию resiprocate. Это потому, что мне нужно разработать легкий прототип для особых нужд, просто используя сам API стека SIP. Прототип должен просто служить пересылкой в ​​трафике SIP, не более того.

1

Решение

Далее следует работа в блоке 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»

1

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

Других решений пока нет …

По вопросам рекламы [email protected]