El Jueves, 2 de Octubre de 2008, Jose Fernandez escribió:
Muchas gracias por responder Iñaki.
Supongo que con "no está bien definido" te refieres a que he soltado
demasiado rollo para explicar el problema. La intención era dar los
mayores detalles posibles, por lo mismo que he incluido toda la traza
sip. Intento simplificar:
Hola, realmente adjuntar la traza SIP es perfecto (en mi opinión), lo que
echaba en falta era un poco más de explicación previa, para saber qué buscar
en la traza SIP ;)
Pero ahora ya está más o menos claro.
* Escenario: GW FXO, Openser 1.1 y varios
teléfonos IP. Llamada
entrante que vía FXO (canal registrado como 9873) suena
directamente en el teléfono IP 43, y una vez atendida,
transferencia de esa llamada al teléfono IP 42.
* Problema: Se corta esa transferencia perdiéndose la comunicación
entre todos los puntos.
He notado que hay retransmisiones (INVITE's repetidos que llegan al UAS). Esto
provoca que al aceptarse uno el proxy envíe un CANCEL para cancelar el otro,
el UAS recive dicho CANCEL y cancela la primera llamada (aunque no debería
pues ya fue contestada) y envía un BYE (no debería).
Una pregunta, ¿usas "t_relay" en el script de OpenSer? Tienes que
usar "t_relay" para evitar las retransmisiones, o sea, que si el UAC envía un
INVITE, llega a OpenSer, pasa un poco de tiempo sin recibir respuesta y el
UAC repite el INVITE, entonces OpenSer debe absorver dicho INVITE repetido,
pero para ello debe haber creado una transacción. Al rutar un mensaje
con "t_relay" se crea la transacción, pero también la puedes hacer antes
ejectutando "t_newtran" cuando empiezas a procesar el mensaje.
No entiendo muy bien por qué aparece un CANCEL del FXO
al 42 después de
recibir el FXO un 200 OK de 42 al INVITE previo, ni el "no such call" al
BYE de la 43 al FXO.
No tengo demasiada experiencia y no tengo claro si la
secuencia es
correcta en una transferencia de llamada SIP. ¿La secuencia en una
transferencia correcta sería la misma?
La secuencia es más o menos correcta, yo creo que el UAS se comporta mal al
recibir 2 INVITE's iguales (retransmisiones) y un CANCEL.
Yo lo que te recomiendo es que te asegures de que OpenSer absorbe las
retransmisiones, es decir, el INVITE puede llegar varias veces a OpenSer,
pero sólo debe salir una vez de OpenSer y absorber las repeticiones.
Compruébalo haciendo más trazas SIP y comparando el "branch" del Via.
Y otra cosa, prueba a sustituir el teléfono 42 por otro modelo o softphone. Si
puedes pon un Twinkle que eso no falla ;)
--
Iñaki Baz Castillo