gpt4 book ai didi

c++ - 使用 Resiprocate SIP 堆栈转发 SIP 请求/响应

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:41 25 4
gpt4 key购买 nike

我需要使用 Resiprocate SIP 堆栈在 C++ 中实现 SIP 代理。代理必须始终位于 UAC 和 UAS 之间,并简单地双向转发传入的 SIP 请求和响应。

根据我对 SIP 协议(protocol)的阅读/理解,如果 SIP 代理想要位于 UAC 和 UAS 之间,它必须将其 SIP 地址注入(inject)到它正在接收的 SIP 消息的路由字段中。谁能告诉我如何在我的代理实现中添加/操作传入 SIP 消息中的路由字段?更准确地说,我需要知道的是我应该引用哪些头文件/类/句柄函数?我对 SIP 有点陌生,并且在它的源代码中以某种方式迷失了方向。提前致谢。

P.S:有人可能想知道为什么我不使用 resiprocate 自己的代理实现。这是因为我需要通过使用 SIP 堆栈 API 本身来为特殊需求开发一个轻量级原型(prototype)。原型(prototype)应该只是充当 SIP 流量中的转发器,仅此而已。

最佳答案

以下是 else block 中的工作。

  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/stack/Helper.hxx”“resip/stack/SipMessage.hxx”“resip/stack/Uri.hxx”“resip/stack/SipStack.hxx”“rutil/Logger.hxx”“rutil/ThreadIf.hxx”“resip/stack/ParserContainer.hxx”

关于c++ - 使用 Resiprocate SIP 堆栈转发 SIP 请求/响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12687299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com