Как создать и отправить пока сообщение от клиента на сервер в jainsip android?

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

Я создал класс Bye Message, как это

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 код ошибки в качестве ответа. Я думаю, что пропустил текущее поле callid в пока сообщение. Я искал его, но не нашел в справке sipmanager class.pls.

1 ответ

Nidhin,

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

Например, вы можете проверить код в репозитории Mobicents restcomm-android-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

Другие вопросы по тегам