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

时间:2012-10-02 08:58:00

标签: c++ sip

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

根据我对SIP协议的解读/理解,如果SIP代理想要位于UAC和UAS之间,则必须将其SIP地址注入其正在接收的SIP消息的路由字段中。任何人都可以告诉我如何在代理实现中的传入SIP消息中添加/ manupulate路由字段?更确切地说,我需要知道的是我应该参考哪些头文件/类/句柄函数?我是SIP和resiprocate的新手,并且在源代码中迷失了方向。提前谢谢。

P.S:我不知道为什么我不使用resiprocate自己的代理实现。这是因为我需要通过使用SIP堆栈API本身来开发满足特殊需求的轻量级原型。原型应该只是作为SIP流量中的转发器,仅此而已。

1 个答案:

答案 0 :(得分: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”