首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Jain Sip - Sip注册?

Android Jain Sip - Sip注册?
EN

Stack Overflow用户
提问于 2010-02-09 20:01:54
回答 2查看 5.6K关注 0票数 2

我目前在Android上使用Jain Sip,我正在尝试让SIP注册工作。

我可以将注册SIP消息组合在一起,但在发送消息之后,它似乎只是被发送回我的应用程序,并且我的应用程序的processRequest()方法正在运行。

下面是我使用的代码:

代码语言:javascript
运行
复制
 public void init(TextView tv) throws Exception {
    SipFactory sipFactory = null;
    sipStack = null;
    sipFactory = SipFactory.getInstance();
    sipFactory.setPathName("gov.nist");
    Properties properties = new Properties();
    properties.setProperty("javax.sip.OUTBOUND_PROXY", getLocalIpAddress()+":8002" + "/"
            + ListeningPoint.UDP);
    properties.setProperty("javax.sip.STACK_NAME", "Sip Test");
    // Create SipStack object
    sipStack = sipFactory.createSipStack(properties);
    tv.setText("sipStack = " + sipStack);
    headerFactory = sipFactory.createHeaderFactory();
    addressFactory = sipFactory.createAddressFactory();
    messageFactory = sipFactory.createMessageFactory();
    lp = sipStack.createListeningPoint(getLocalIpAddress(),
            8002, ListeningPoint.UDP);


    sipProvider = sipStack.createSipProvider(lp);
    sipOnOffFlag = true;
    tv.append("\n jain sip stack started on " + getLocalIpAddress() + ":" + myPort + "/" + ListeningPoint.UDP);
    sipProvider.addSipListener(this);   


    String fromName = "019078020";
    String fromSipAddress = "216.234.148.28";
    String fromDisplayName = "Donal";

    String toSipAddress = "216.234.148.28";
    String toUser = "16784732970";
    String toDisplayName = "Server";

    // create >From Header
    SipURI fromAddress = addressFactory.createSipURI(fromName,
            getLocalIpAddress());

    Address fromNameAddress = addressFactory.createAddress(fromAddress);
    fromNameAddress.setDisplayName(fromDisplayName);
    FromHeader fromHeader = headerFactory.createFromHeader(
            fromNameAddress, null);

    // create To Header
    SipURI toAddress = addressFactory
            .createSipURI(toUser, toSipAddress);
    Address toNameAddress = addressFactory.createAddress(toAddress);
    toNameAddress.setDisplayName(toDisplayName);
    ToHeader toHeader = headerFactory.createToHeader(toNameAddress,
            null);

    // create Request URI
    SipURI requestURI = addressFactory.createSipURI(toUser,
            "216.234.148.28");

    // Create ViaHeaders

    List<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
    String ipAddress = lp.getIPAddress();
    ViaHeader viaHeader = headerFactory.createViaHeader(ipAddress,
            lp.getPort(),
            lp.getTransport(), null);

    // add via headers
    viaHeaders.add(viaHeader);

    // Create ContentTypeHeader
    ContentTypeHeader contentTypeHeader = headerFactory
            .createContentTypeHeader("application", "sdp");

    // Create a new CallId header
    CallIdHeader callIdHeader = sipProvider.getNewCallId();

    // Create a new Cseq header
    CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1L,
            Request.REGISTER);

    // Create a new MaxForwardsHeader
    MaxForwardsHeader maxForwards = headerFactory
            .createMaxForwardsHeader(70);

    // Create the request.
    Request request = messageFactory.createRequest(requestURI,
            Request.REGISTER, callIdHeader, cSeqHeader, fromHeader,
            toHeader, viaHeaders, maxForwards);
    // Create contact headers

    SipURI contactUrl = addressFactory.createSipURI(fromName, getLocalIpAddress());
    contactUrl.setPort(8002);
    contactUrl.setLrParam();

    // Create the contact name address.
    SipURI contactURI = addressFactory.createSipURI(fromName, getLocalIpAddress());
    contactURI.setPort(sipProvider.getListeningPoint(lp.getTransport())
            .getPort());

    Address contactAddress = addressFactory.createAddress(contactURI);

    // Add the contact address.
    contactAddress.setDisplayName(fromName);

    contactHeader = headerFactory.createContactHeader(contactAddress);
    request.addHeader(contactHeader);

    // You can add extension headers of your own making
    // to the outgoing SIP request.
    // Add the extension header.
    Header extensionHeader = headerFactory.createHeader("Expires",
        "0");
    request.addHeader(extensionHeader);


    Log.d("SIP", "" + request.toString());
    // Create the client transaction.
    registerTid = sipProvider.getNewClientTransaction(request);

    // send the request out.
    registerTid.sendRequest();

    dialog = registerTid.getDialog();
}

所以消息可以正常构建,但是当sendRequest()运行时,它似乎不会被发送到服务器,而是返回到我的应用程序,并且运行应用程序的processRequest方法。

我应该对inviteTid或对话框做一些额外的事情吗?

我是否需要创建一个套接字或其他东西来发送请求?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-09 17:47:41

使用以下代码

代码语言:javascript
运行
复制
// create Request URI
SipURI requestURI = addressFactory.createSipURI(toUser,
        "216.234.148.28");

您的SIP消息URI将如下所示

代码语言:javascript
运行
复制
REGISTER sip:216.234.148.28 SIP/2.0

现在,"216.234.148.28“是目的IP地址(您的请求将被发送到的地址)。

从线条上

代码语言:javascript
运行
复制
String fromName = "019078020";
String fromSipAddress = "216.234.148.28";
String fromDisplayName = "Donal";

看起来"216.234.148.28“是你的ip地址。所以你既是源又是目标。尝试获取系统的pcap或打印此值。

票数 2
EN

Stack Overflow用户

发布于 2012-10-21 13:57:03

这可能是由于您的请求URI造成的。您的请求URI与您的发件人URI的值相同。可能是您声明的IP地址是您的本地地址。尝试提供正在端口5060上侦听SIP的远程IP地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2228827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档