2010-02-09 22 views
1

J'utilise actuellement Jain Sip sur Android et j'essaie d'obtenir un enregistrement SIP.Android Jain Sip - Enregistrement Sip?

Je peux mettre le message SIP d'enregistrement ensemble bien mais après avoir envoyé le message il semble juste être renvoyé à mon application et ma méthode d'applications processRequest() est exécutée.

Voici le code que je utilise:

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(); 
} 

Ainsi, le message est construit ok mais quand sendRequest() est lancé, il ne semble pas obtenir envoyé au serveur, mais plutôt revenir à ma demande et la méthode processRequest des applications est exécutée.

Dois-je faire quelque chose de plus avec InviteTid ou la boîte de dialogue?

Ai-je besoin de créer un socket ou quelque chose pour envoyer la requête?

+1

Vous définissez le proxy pour être vous-même? – nos

+0

de ce morceau de code - properties.setProperty ("javax.sip.OUTBOUND_PROXY", getLocalIpAddress() + ": 5070" + "/" \t \t \t \t + ListeningPoint.UDP); ? Dois-je le configurer pour être le serveur? –

+0

Si vous voulez faire de la publicité comme réponse, je l'accepterai comme réponse correcte –

Répondre

1

En utilisant ce code

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

Votre message SIP URI ressemblera

REGISTER sip:216.234.148.28 SIP/2.0 

maintenant "216.234.148.28" est l'adresse IP de destination (où votre demande sera envoyée).

A partir des lignes

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

Il ressemble à "216.234.148.28" est votre adresse IP. Donc vous êtes la source et la cible à la fois. Essayez d'obtenir pcap de votre système ou imprimer cette valeur.

1

Il peut se produire en raison de votre demande URI. Votre URI de requête a la même valeur que votre adresse URI. Peut être l'adresse IP que vous avez indiquée est votre adresse locale. Essayez de fournir une adresse IP à distance qui écoute SIP sur le port 5060.