2015-10-12 2 views
1

Я пробовал пример jainsip в Mobicents restcomm-android-sdk.Its работал для меня, но я не могу создать сообщение bye с клиентской стороны должным образом.Как создать и отправить сообщение Bye с клиента на сервер в jamesip android?

Я создал класс Bye сообщений как этого

public class Bye { 

public Request MakeRequest(SipManager sipManager) throws ParseException, 
     InvalidArgumentException { 

    AddressFactory addressFactory = sipManager.addressFactory; 
    SipProvider sipProvider = sipManager.sipProvider; 
    MessageFactory messageFactory = sipManager.messageFactory; 
    HeaderFactory headerFactory = sipManager.headerFactory; 
    // Create addresses and via header for the request 
    Address fromAddress = addressFactory.createAddress("sip:" 
      + sipManager.getSipProfile().getSipUserName() + "@" 
      + sipManager.getSipProfile().getRemoteIp()); 
    fromAddress.setDisplayName(sipManager.getSipProfile().getSipUserName()); 
    Address toAddress = addressFactory.createAddress("sip:" 
      + sipManager.getSipProfile().getSipUserName() + "@" 
      + sipManager.getSipProfile().getRemoteIp()); 
    toAddress.setDisplayName(sipManager.getSipProfile().getSipUserName()); 

    Address contactAddress = sipManager.createContactAddress(); 
    ArrayList<ViaHeader> viaHeaders = sipManager.createViaHeader(); 
    URI requestURI = addressFactory.createAddress(
      "sip:" + sipManager.getSipProfile().getRemoteEndpoint()) 
      .getURI(); 
    // Build the request 
    CallIdHeader callIdHeader = sipManager.sipProvider.; 
    final Request request = messageFactory.createRequest(requestURI, 
      Request.BYE, sipProvider.getNewCallId(), 
      headerFactory.createCSeqHeader(1l, Request.BYE), 
      headerFactory.createFromHeader(fromAddress, "c3ff411e"), 
      headerFactory.createToHeader(toAddress, null), viaHeaders, 
      headerFactory.createMaxForwardsHeader(70)); 

    // Add the contact header 
    request.addHeader(headerFactory.createContactHeader(contactAddress)); 
    ExpiresHeader eh = headerFactory.createExpiresHeader(300); 
    request.addHeader(eh); 
    // Print the request 
    System.out.println(request.toString()); 
    return request; 
    // Send the request --- triggers an IOException 
    // sipProvider.sendRequest(request); 
    // ClientTransaction transaction = sipProvider 
    // .getNewClientTransaction(request); 
    // Send the request statefully, through the client transaction. 
    // transaction.sendRequest(); 

} 
} 

Назовите это из класса SipManager в

public void disconnectCall() throws NotInitializedException { 
    // TODO Auto-generated method stub 
    if (!initialized) 
     throw new NotInitializedException("Sip Stack not initialized"); 
    this.sipManagerState = SipManagerState.BYE; 
    Bye byeRequest = new Bye(); 
    Request r=null ; 
    try{ 
    r = byeRequest.MakeRequest(this);//byeRequest.MakeRequest(SipManager.this); 

     final ClientTransaction transaction = this.sipProvider 
       .getNewClientTransaction(r); 
     Thread thread = new Thread() { 
      public void run() { 
       try { 
        transaction.sendRequest(); 
       } catch (SipException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     thread.start(); 
    } catch (TransactionUnavailableException e) { 
     e.printStackTrace(); 
    }catch (InvalidArgumentException e) { 
     e.printStackTrace(); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

} 

Я получил 481 код ошибки, как response.I думает, что я пропустил текущее поле callid в сообщении bye. Я искал его, но не нашел из справки sipmanager class.pls.

ответ

3

Nidhin,

BYE сообщения всегда в диалоге SIP, так что вам не придется создавать новое сообщение с нуля. Вместо этого вам просто нужно получить диалог, который вы хотите завершить, создать запрос типа BYE и отправить его. JAIN позаботится обо всем остальном.

Для примера, вы можете проверить код на Mobicents restcomm-андроида-SDk репо, метод sendByeClient():

https://github.com/Mobicents/restcomm-android-sdk/blob/master/sipua/src/main/java/org/mobicents/restcomm/android/sipua/impl/SipManager.java#L931

Пожалуйста, имейте в виду, что пример JAIN SIP устарел примером Messenger, который использует SDK Restcomm Android Client, который предлагает более простой API. Вот его код для справки:

https://github.com/Mobicents/restcomm-android-sdk/tree/master/Examples/restcomm-messenger

 Смежные вопросы

  • Нет связанных вопросов^_^