2013-10-25 3 views
0

мне нужно реализовать следующий поток с использованием SIP-сервлет:Java SIP сервлет, как отправить СМОТРИТЕ сообщение

1) Мой SIP Servlet должны поймать INVITE сообщения 2) Посмотрите на SIP в заголовке, и если он соответствует некоторым pattern Мне нужно возвратить сообщение REFER.

Я Google, и нашел это руководство (Basic Transfer): www.dialogic.com/webhelp/IMG1010/10.5.1/WebHelp/sip_rfr_calltrans.htm

Как я правильно понял, то этот поток выглядит сильфоном : 1) USERA отправить INVITE сообщение для SIP App 2) SIP-App должен отправить 200 OK назад 3) UserA посылает ACK сообщение 4) SIP-приложение отправить REFER сообщение для UserA 5) UserA должен послать назад 202Accepted и чем NOTIFY

My enviroment:

1) mss-2.0.0.FINAL-jboss-as-7.1.2.Final в качестве SIP-прокси-сервер 127.0.0.1:5080

2) [email protected]: 5060 --- MicroSIP (http://www.microsip.org/)

3) [email protected]: 5090 --- Zoiper_Free_2.41

DAR Файл:

INVITE :("org.call.forwarding.CallForward", "ДАР: От",» ORIGINATING "," "," NO_ROUTE "," 0 ")

REGISTER :(" org.call.forwarding.CallForward "," DAR: From "," ORIGINATI «NO», «0»)

SUBSCRIBE: ")

OPTIONS :(" org.call.forwarding.CallForward " "DAR: От", "составляемых", "", "NO_ROUTE", "0")

УВЕДОМИТЬ :(" орг. «0»)

REFER :(«org.call.forwarding.CallForward», «DAR: From», «DAR: From», «ORIGINATING», «», «NO_ROUTE», «0») , "ORIGINATING", "", "NO_ROUTE", "0")

Fro m [email protected] Я звоню в [email protected]

Так мой исходный код выглядит как ниже: 1) Ловля INVITE пакет и сделать 200 OK ответ:

@Override 
protected void doInvite(SipServletRequest request) throws Exception { 
    // Pattern match logic ommited  
    SipServletResponse response = request.createResponse(SipServletResponse.SC_OK); 
    String str = response.toString(); 
    response.send() 
} 

INVITE sip:[email protected]:5080 SIP/2.0 
Via: SIP/2.0/UDP 192.168.0.17:5060;rport=5060;branch=z9hG4bKPjb1570e34df4c442093af6fb2fa238667;received=127.0.0.1 
Max-Forwards: 70 
From: "user3" <sip:[email protected]>;tag=87be8901c4e242fbb5c696d90d0ec068 
To: <sip:[email protected]> 
Contact: "user3" <sip:[email protected]:5060;ob> 
Call-ID: 983d9572c4a541d49566699b3edec1e0 
CSeq: 22256 INVITE 
Allow: PRACK,INVITE,ACK,BYE,CANCEL,UPDATE,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,OPTIONS 
Supported: replaces,100rel,timer,norefersub 
Session-Expires: 1800 
Min-SE: 90 
User-Agent: MicroSIP/3.3.21 
Content-Type: application/sdp 
Content-Length: 673 

И мой ответ: 200 OK Respnose как ниже:

SIP/2.0 200 OK 
To: <sip:[email protected]>;tag=25395207_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e 
Via: SIP/2.0/UDP 192.168.0.17:5060;rport=5060;branch=z9hG4bKPjb1570e34df4c442093af6fb2fa238667;received=127.0.0.1 
CSeq: 22256 INVITE 
Call-ID: 983d9572c4a541d49566699b3edec1e0 
From: "user3" <sip:[email protected]>;tag=87be8901c4e242fbb5c696d90d0ec068 
Contact: <sip:127.0.0.1:5080> 
Content-Length: 0 

Тогда Я пытаюсь обработать пакет ACK и создать пакет REFER:

@Override 
protected void doAck(SipServletRequest request) throws ServletException, IOException {   
    String ack = request.toString(); 
    logger.info("Got ASK!!!: " + request.toString()); 
    SipFactory sipFactory = (SipFactory) getServletContext().getAttribute(SIP_FACTORY);   
    SipApplicationSession appSession = request.getApplicationSession(); 
    SipServletRequest refer = sipFactory.createRequest(appSession, "REFER", 
                 sipFactory.createURI("sip:[email protected]:5080"), // from           sipFactory.createURI("sip:[email protected]:5090")); // to 
    refer.addHeader("Refer-To", "sip:[email protected]:5080"); 
    refer.addHeader("Referred-By", "sip:[email protected]:5080"); 
    logger.info("!!!!!!!!!!!THIS IS REFER: \n" + refer.toString()); 
    String strRefer = refer.toString(); 
    refer.send();    
} 

ACK sip:127.0.0.1:5080 SIP/2.0 
Via: SIP/2.0/UDP 192.168.0.17:5060;rport=5060;branch=z9hG4bKPje03842cfb4104d379db989f2d77a871a;received=127.0.0.1 
Max-Forwards: 70 
From: "user3" <sip:[email protected]>;tag=87be8901c4e242fbb5c696d90d0ec068 
To: <sip:[email protected]>;tag=25395207_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e 
Call-ID: 983d9572c4a541d49566699b3edec1e0 
CSeq: 22256 ACK 
Content-Length: 0 

, и мой СМОТРИТЕ пакет:

REFER sip:[email protected]:5090 SIP/2.0 
Call-ID: [email protected] 
CSeq: 1 REFER 
From: <sip:[email protected]:5080>;tag=14387494_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e 
To: <sip:[email protected]:5090> 
Max-Forwards: 70 
Contact: <sip:[email protected]:5080> 
Refer-To: <sip:[email protected]:5080> 
Referred-By: <sip:[email protected]:5080> 
Content-Length: 0 

Затем я вижу в лог-файл ПЫТАЮТСЯ сообщение:

SIP/2.0 100 Trying 
Via: SIP/2.0/UDP 127.0.0.1:5080;branch=z9hG4bK8479416b-da5c-4dca-baef- f9b7db279b9e_da1be872_1872624593941 
To: <sip:[email protected]:5090> 
From: <sip:[email protected]:5080>;tag=14387494_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e 
Call-ID: [email protected] 
CSeq: 1 REFER 
Content-Length: 0 

И после ~ 30 секунд я вижу, что Microsip шоу "Не Приемлемое" сообщение:

SIP/2.0 408 Request timeout 
To: <sip:[email protected]:5090>;tag=37903989_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e 
Via: SIP/2.0/UDP 127.0.0.1:5080;branch=z9hG4bK8479416b-da5c-4dca-baef-f9b7db279b9e_da1be872_1872624593941 
CSeq: 1 REFER 
Call-ID: [email protected] 
From: <sip:[email protected]:5080>;tag=14387494_da1be872_8479416b-da5c-4dca-baef-f9b7db279b9e 
Contact: <sip:127.0.0.1:5080> 
Content-Length: 0 

Может ли любое тело объяснить: что случилось с этим парнем ??? Еще один момент, который взорвал мой мозг: в некоторых случаях после отправки сообщения 200 OK (когда я обрабатывал INVITE) я немедленно возвращал сообщение BYE перед ACK ... Почему это происходит?

ответ

0

Похоже, что в вашем заголовке REFER ваш Contact и CallID не связывается с вашими исходными сообщениями ACK и 200OK. Вот почему вы получаете 100 попыток, потому что нет никакого сообщения, ожидающего какого-либо ответа.

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

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