> SIP A llama a SIP B
> SIP B deja onHOLD a SIP A
> SIP B reinvita a SIP A
>
> SIP A no escucha a SIP B por un tiempo aleatoreo, pero el sonido
> vuelve.
¿Pero durante esos instantes B sí que escucha a A?
> Lo que me llama la atencion, es que ANDA, pero hay un tiempo
> aleatoreo, a veces largo a veces corto para que vuelva el sonido del
> que atendio al que llamo.
Monitoriza con tcpdump (por ejemplo) el RTP. Como tienes canreinvite=no
Asterisk está en medio todo el rato, por lo que:
SIP A llama a SIP B
SIP B deja onHOLD a SIP A
SIP B reinvita a SIP A
Monitoriza cuándo B empieza a enviar RTP de nuevo a Asterisk. ¿Lo hace justo
después del re-INVITE? ¿tarda un rato? Si tarda un rato es problema del UA.
~~~~~~ uso de NGREP (captura traza SIP) ~~~~~~
En el servidor Asterisk:
~$ ngrep -d any -P ' ' -W byline -T port 5060
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
Iñaki Baz Castillo
i...@in.ilimit.es
Tu problema me suena, y en mi caso era que un determinado softphone
(Bria) cortaba la llamada cuando estaba on hold, por 'supuesta'
inactividad RTP...
--
Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."
----------------------------------------------------------------
http://www.saghul.net/
Alguno de los dos UAC está detrás de un NAT ¿?, puede que el router de turno
haya cerrado el puerto por inactividad durante el hold.
--
Saludos.
Raúl Alexis Betancor Santana
Dimensión Virtual S.L.
Haz la misma prueba con todos los tfnos y softphones que puedas, con la misma
configuración (sin STUN, sin RTP keepalive, sin nada "raro").
Si sólo falla un modelo ya sabes ;)
Haz una captura SIP limpia (mira abajo en mi firma) de un caso y el otro.
Seguramente habrá alguna diferencia en el SDP que hace que uno de los
softphones se indigeste.
Nada que se salga del estandar.
> 2) Sua: From: <sip:
> 70...@192.168.2.16>;tag=13d3e978589d400681e919603af8c7eb
> Xlite: From: <sip:
> 70...@192.168.2.16:5000;rinstance=8317a2c7c570e6d5>;tag=3551f305
>
> Punto similar al de arriba, xlite le agrega el puerto 5000 y sua
> nada.
Idem, nada raro
> 3) Sua: Contact: <sip:192.168.2.16:5060;transport=UDP>
> Xlite: Contact: <sip:
> 70...@192.168.2.16:5000;rinstance=8317a2c7c570e6d5>
>
> Aqui la diferencia se ve clara, ademas del puerto, sua define el
> transporte y xlite otra cosa :s
Tampoco nada raro.
> 4) Sua: CSeq: 2705444 INVITE
> Xlite: CSeq: 2 INVITE
>
> En este punto sua, siempre manda un numero aleatoreo y xlite
> siempre el 2. (en el ack sua manda numeroAleatoreo + 1 y xlite siempre
> 3)
Sigue estando ok.
En lo de xlite no hay codecs, lo que hay es un telephone-event
> Y una diferencia por ahi importante es
> a=rtcp:4001 IN IP4 192.168.2.16 de sua contra c=IN IP4 0.0.0.0
> de xlite
Eso es simplemente porque el Xlite ha puesto al otro UAC en Hold, cuando se
pone a alguien en Hold, se manda esa IP 0.0.0.0
> Estas son las diferencias mas importantes que he notado. Si alguien le
> quiere echar un ojo a los archivos completos, les dejo el link porque
> no se como hacer para subirlos.
>
> www.aplay.com.ar/xlite.txt1
> www.aplay.com.ar/sua.txt1
>
> (le puse txt1 asi no lo interpreta el explorador, que deforma todo
> el formato)
Esos archivos sirve de poco, sino explicas como y donde has capturado ese
tráfico.
A ver .. si tu esquema es:
UAC A <-> Asterisk <-> UAC B
Estando A y B en la misma red (para simplificar y olvidarnos de temas de NAT),
haz la captura en el asterisk, pon a capturar, haz una llamada en la que
reproduzcas el problema, corta la captura y envíala, así se podrá ver lo que
manda A a Asterisk para el Invite Incial, el Invite de Asterisk a B, y toda
la operativa de on-Hold y re-Invite cuando la hagas.
Esto es B diciendole a Asterisk que ponga a A en hold (no es correcto decirlo
así .. pero ese es el efecto obtenido)
Asterisk contestando a B que Ok a su Hold (que en realidad es un re-invite)
> <------------>
> -- Started music on hold, class 'default', on SIP/7034-08223f18
^^^^ Se supone que Asterisk a puesto a A a escuchar "el lago de los
cisnes" ;-)
> localhost*CLI>
> <--- SIP read from 192.168.2.16:5060 --->
> ACK sip:aste...@192.168.2.166 SIP/2.0
> Via: SIP/2.0/UDP
> 192.168.2.16:5060;rport;branch=z9hG4bKPjb422d58761cf4392a17e92b001c1be84
> Max-Forwards: 70
> From: <sip:70...@192.168.2.16>;tag=1249adc7c5794458a147147689d22a1c
> To: "7034|3827" <sip:aste...@192.168.2.166>;tag=as2d7e847b
> Call-ID: 54c1a2da11aec810...@192.168.2.166
> CSeq: 1041373769 ACK
> Content-Length: 0
B ACKea el 200 de Asterisk
> <------------->
> --- (8 headers 0 lines) ---
> localhost*CLI>
> <--- SIP read from 192.168.2.16:5060 --->
> ACK sip:aste...@192.168.2.166 SIP/2.0
> Via: SIP/2.0/UDP
> 192.168.2.16:5060;rport;branch=z9hG4bKPj88e371a89f9641cab7b0bee3602ddad8
> Max-Forwards: 70
> From: <sip:70...@192.168.2.16>;tag=1249adc7c5794458a147147689d22a1c
> To: "7034|3827" <sip:aste...@192.168.2.166>;tag=as2d7e847b
> Call-ID: 54c1a2da11aec810...@192.168.2.166
> CSeq: 1041373769 ACK
> Content-Length: 0
Umm .. retransmisión de un ACK .. buff .. ese UAC no está fino, los ACK no se
retransmiten, son terminación de dialogo.
> <------------->
> --- (8 headers 0 lines) ---
> Really destroying SIP dialog
> '1206af0d43c15acd...@192.168.2.166' Method: INVITE
Lo que tienes a continuación y que elimino para simplificar es NOTIFY's del
MWI de Asterisk a A y B
> CUANDO APRIETO REINVITE
>
> Retransmitting #3 (no NAT) to 192.168.2.67:5060:
> NOTIFY sip:70...@192.168.2.67:5060;transport=UDP SIP/2.0
> Via: SIP/2.0/UDP 192.168.2.166:5060;branch=z9hG4bK0ad35202;rport
> From: "asterisk" <sip:aste...@192.168.2.166>;tag=as02076c56
> To: <sip:70...@192.168.2.67:5060;transport=UDP>
> Contact: <sip:aste...@192.168.2.166>
> Call-ID: 2f184c8b217d8fa7...@192.168.2.166
> CSeq: 102 NOTIFY
> User-Agent: Asterisk PBX
> Max-Forwards: 70
> Event: message-summary
> Content-Type: application/simple-message-summary
> Content-Length: 93
>
> Messages-Waiting: no
> Message-Account: sip:aste...@192.168.2.166
> Voice-Message: 0/0 (0/0)
Jejej .. el re-INVITE empieza ahora .. lo de antes era otro notify.
^^^
B ha mandado su re-INVITE para que Asterisk le vuelva a conectar con A
> <------------->
> --- (13 headers 18 lines) ---
> Sending to 192.168.2.16 : 5060 (NAT)
UMMMM .... ^^^^ algo raro ... ese NAT sobra, se supone que estan todos en la
misma red, pero tampoco debería de pasar nada.
^^^ Asterisk acepta el re-INVITE de B
> <------------>
> -- Stopped music on hold on SIP/7034-08223f18
> localhost*CLI>
> <--- SIP read from 192.168.2.16:5060 --->
> ACK sip:aste...@192.168.2.166 SIP/2.0
> Via: SIP/2.0/UDP
> 192.168.2.16:5060;rport;branch=z9hG4bKPj2ceb245fe2494f698e8dd3e9473950a9
> Max-Forwards: 70
> From: <sip:70...@192.168.2.16>;tag=1249adc7c5794458a147147689d22a1c
> To: "7034|3827" <sip:aste...@192.168.2.166>;tag=as2d7e847b
> Call-ID: 54c1a2da11aec810...@192.168.2.166
> CSeq: 1041373770 ACK
> Content-Length: 0
^^^^ B ACKea a Asterisk
> <------------->
> --- (8 headers 0 lines) ---
> localhost*CLI>
> <--- SIP read from 192.168.2.16:5060 --->
> ACK sip:aste...@192.168.2.166 SIP/2.0
> Via: SIP/2.0/UDP
> 192.168.2.16:5060;rport;branch=z9hG4bKPj22ca683cf2e2432997d2df8fe999ab2f
> Max-Forwards: 70
> From: <sip:70...@192.168.2.16>;tag=1249adc7c5794458a147147689d22a1c
> To: "7034|3827" <sip:aste...@192.168.2.166>;tag=as2d7e847b
> Call-ID: 54c1a2da11aec810...@192.168.2.166
> CSeq: 1041373770 ACK
> Content-Length: 0
En serio .. esto es un mal rollo, ¿dobles ACKeos? .. eso no es correcto. Pero
tampoco deberían de afectar a nada.
> <------------->
> --- (8 headers 0 lines) ---
> Retransmitting #5 (no NAT) to 192.168.2.16:5060:
> NOTIFY sip:70...@192.168.2.16:5060;transport=UDP SIP/2.0
> Via: SIP/2.0/UDP 192.168.2.166:5060;branch=z9hG4bK2181f96e;rport
> From: "asterisk" <sip:aste...@192.168.2.166>;tag=as7944bc29
> To: <sip:70...@192.168.2.16:5060;transport=UDP>
> Contact: <sip:aste...@192.168.2.166>
> Call-ID: 5019270247b9b78d...@192.168.2.166
> CSeq: 102 NOTIFY
> User-Agent: Asterisk PBX
> Max-Forwards: 70
> Event: message-summary
> Content-Type: application/simple-message-summary
> Content-Length: 93
>
> Messages-Waiting: no
> Message-Account: sip:aste...@192.168.2.166
> Voice-Message: 0/0 (0/0)
Mas Notify de MWI
> Muchas gracias.
A ver .. este dialogo no tiene nada raro, NADA.
Te ha faltado incluir todo el dialogo de A con Asterisk y viceversa.
En esta prueba que has hecho ...
-¿A escuchó la música?
-¿A dejó de escuchar la música cuando recuperaste la llamada desde B?
Después de recuperar B la llamada:
-¿A escuchaba a B?
-¿B escuchaba a A?
Saludos,
Ramses
>-----Mensaje original-----
>De: aster...@googlegroups.com
>[mailto:aster...@googlegroups.com] En nombre de elguillote
>Enviado el: viernes, 20 de junio de 2008 1:36
>Para: asterisk-es
>Asunto: [Asterisk-ES] Re: Hold - Reinvite
Raúl, te equivocas, en ese SDP sí hay un codec (el G711U-ULAW-PCMU). Los
codecs se exponen en orden en la línea "m" con su identificador numérico:
G729 (18)
alaw (8)
ulaw (0)
además de DTMF out-of-band (RFC2833) (101)
En el caso que nos ocupa:
m=audio 5002 RTP/AVP 0 101
Lo que pasa es que muchos teléfonos añaden líneas no imprescindibles para cada
codec:
a=rtpmap:0 PCMU/8000
pero no son necesarias.
Saludos.
Hola, ¿por qué dices que no es correcto? Está usando la opción "a=sendonly"
definida en el RFC 3264:
5.1 Unicast Streams
If the offerer wishes to only send media on a stream to its peer, it
MUST mark the stream as sendonly with the "a=sendonly" attribute.
Buena observación, ¿y para qué puñetas reenvía el ACK? ¿espera recibir algo?
Pero si el peer está configurado con NAT sale eso (si no me equivoco).
Sí que es raro sí...
Tiene toda la pinta. Estamos hablando de que el terminal escucha audio unos
segunditos tras el re-INVITE y pierde el audio durante 30-60 segundos y luego
lo vuelve a recuperar. Yo apuesto por el terminal.
Umm .. pillado .. so me pasa por leer rápido, de todas formas, siendo un
reinvite, más bien habría que interpretarlo como realmente lo hacen los UAC,
que es .. IP = 0.0.0.0 .... no te mando RTP
> Lo que pasa es que muchos teléfonos añaden líneas no imprescindibles para
> cada codec:
> a=rtpmap:0 PCMU/8000
> pero no son necesarias.
Ya, ya ... no es obligatorio exponer el mapping, aunque si recomendable
Porque me refería a que técnicamente no es un "On-HOLD" es un "No me envíes
mas RTP"
La cosa es que no es un terminal, creo que es un UAC que han desarrollado con
pjsip, por lo menos es lo que yo deduzco del useragent
Bueno pero eso es precisamente lo coloquialmente conocido como "on-Hold" ¿no?
En este caso, como no hay firmware de por medio, ¿podría ser la versión del
PJSUA?
Saludos,
Ramses
>-----Mensaje original-----
>De: aster...@googlegroups.com
>[mailto:aster...@googlegroups.com] En nombre de elguillote
>Enviado el: viernes, 20 de junio de 2008 13:54
>Para: asterisk-es
>Asunto: [Asterisk-ES] Re: Hold - Reinvite
>
>
No había leído su respuesta, gracias Ramses por el apunte, desde luego que no
me refiero al modelo del Windows XDDD
Saludos,
Ramses
>-----Mensaje original-----
>De: aster...@googlegroups.com
>[mailto:aster...@googlegroups.com] En nombre de elguillote
>Enviado el: miércoles, 25 de junio de 2008 0:14
>Para: asterisk-es
>Asunto: [Asterisk-ES] Re: Hold - Reinvite
>
>