Si un proxy/registrar recibe un REGISTER sin Contact y no hay ningún
binding en ese registrar para ese AOR, ¿el 200OK generado por el proxy
debería incluir algún Contact?, ¿se debería generar en ese caso un
200OK o un mensaje de error?.
Gracias.
Saludos
JesusR.
Creo que encabezas el top de preguntas sin respuesta ;-)
Sinceramente, no estoy seguro.
En el RFC3261, el proceso para hacer un fetch de un binding termina con:
RFC3261, Section 10.3- Step 8:
The registrar returns a 200 (OK) response. The response MUST contain
Contact header field values enumerating all current bindings.
Esta es mi interpretación: si el AoR realmente pertenece al dominio de
ese registrar, el registrar debe retornar un 200 OK con los bindings:
si hay uno, uno; si hay dos, dos; si no hay ninguno, ninguno. ¿Podría
ir vacío ese contact?
A ver que opinan los demás.
Saludos,
--
Victor Pascual Ávila
En Twinkle puedo pulsar un botoncito que me genera un REGISTER sin Contact y
obtiene, de OpenSer en este caso, un 200 OK indicando todos los bindings
registrados para ese AoR del To.
Incluso me atrevería a decir (aunque después de las respuestas de Victor y
Miguel no me atrevo) que el RFC3261 contempla la posibilidad de enviar un
REGISTER sin Contact precisamente para el propósito que describo: que un
cliente sepa cuántos bindings tiene registrados su AoR.
Espera que lo busco....
--
Iñaki Baz Castillo
¡Bingo!:
10.2.3 Fetching Bindings
A success response to any REGISTER request contains the complete list
of existing bindings, regardless of whether the request contained a
Contact header field. If no Contact header field is present in a
REGISTER request, the list of bindings is left unchanged.
Aunque ahora entiendo que la pregunta de Jesús es el caso de que el AoR no
tenga ningún binding registrado. En ese caso, al menos OpenSer devuelve
un "200 OK" sin cabecera Contact. ¿Y por qué no devuelve una cabecera Contact
vacía? sencillamente porque no es válida según la gramática BNF de SIP. Un
Contact tiene que tener uno o más URI's o un sólo asterisco.
En este caso (AoR no registrado) Twinkle interpreta correctamente el 200 OK
sin Contact que devuelve el proxy y muestra un mensaje (no estás registrado).
Saludos.
--
Iñaki Baz Castillo
Y otra cosa (al margen de mis otras respuestas):
Yo entiendo que no tendría sentido que el proxy devolviese un error, porque
¿cuál sería apropiado? un 404 indica que la dirección de RURI no existe o que
el servidor no sabe nada (esto es falso puesto que es la URI del registrar
que es quien responde).
Yo creo que la respuesta debe ser siempre el listado de bindings registrados
para ese AoR del "To", haya o no haya alguno registrado (y si no hay ninguno
no se envía "Contact" vacío pues sería erróneo).
Yo creo que encaja, ¿no?
--
Iñaki Baz Castillo
2008/9/10 Victor Pascual Ávila <victor.pas...@gmail.com>:
> En el RFC3261, el proceso para hacer un *fetch de un binding* termina con:
Se llama "fetching bindings" :-)
--
Victor Pascual Ávila
Aquí Openser creo que se está saltando un MUST:
2008/9/10 Victor Pascual Ávila <victor.pas...@gmail.com>:
> The registrar returns a 200 (OK) response. The response MUST contain
> Contact header field values enumerating all current bindings.
¿Estás seguro que un contact no puede ir vacío?
> 2008/9/10 Victor Pascual Ávila <victor.pas...@gmail.com>:
> > The registrar returns a 200 (OK) response. The response MUST contain
> > Contact header field values enumerating all current bindings.
Ops, cierto... hay un MUST... pero es incongruente ya que un Contact no puede
estar vacío.
> ¿Estás seguro que un contact no puede ir vacío?
Completamente:
Contact = ( "Contact" / "m" ) HCOLON
( STAR / (contact-param *(COMMA contact-param)))
contact-param = (name-addr / addr-spec) *( SEMI contact-params)
Es más, lo he verificado en el parser que he hecho (que respeta el BNF al
99,9% XD).
PD: Jesús, ¿y si seguimos el hilo en sip-implementators? yo creo que
hay "chicha" ya que si no hay ningún binding registrado el "200 OK" no puede
contener un Contact y sin embargo ese "Must contain Contact" lo desvirtúa
todo...
--
Iñaki Baz Castillo
¿Y si metemos un contact con un hostpart tipo 0.0.0.0?
--
Victor Pascual Ávila
Hombre, para eso casi prefiero un nuevo:
draft-update-register
XD
--
Iñaki Baz Castillo
Primero, gracias por todas las respuestas... pregunto poco pero cuando
pregunto... :)
> El Jueves, 11 de Septiembre de 2008, Victor Pascual Ávila escribió:
>> 2008/9/10 Iñaki Baz Castillo <i...@aliax.net>:
>>> En ese caso, al menos OpenSer devuelve
>>> un "200 OK" sin cabecera Contact. ¿Y por qué no devuelve una
>>> cabecera
>>> Contact vacía? sencillamente porque no es válida según la
>>> gramática BNF
>>> de SIP. Un Contact tiene que tener uno o más URI's o un sólo
>>> asterisco.
>>
>> Aquí Openser creo que se está saltando un MUST:
>
>> 2008/9/10 Victor Pascual Ávila <victor.pas...@gmail.com>:
>>> The registrar returns a 200 (OK) response. The response MUST
>>> contain
>>> Contact header field values enumerating all current bindings.
>
> Ops, cierto... hay un MUST... pero es incongruente ya que un Contact
> no puede
> estar vacío.
Tengo un equipo que hace eso, envía el REGISTER sin Contact... pero no
he podido cazar qué responder el proxy cuando no hay ningún binding
(no tengo el equipo a mano hasta el viernes).
> PD: Jesús, ¿y si seguimos el hilo en sip-implementators? yo creo que
> hay "chicha" ya que si no hay ningún binding registrado el "200 OK"
> no puede
> contener un Contact y sin embargo ese "Must contain Contact" lo
> desvirtúa
> todo...
Claro!... ya puedes enviar otro bug de la 3261!! :)
Saludos
JesusR.
------------------------------------
Jesus Rodriguez
VozTelecom Sistemas, S.L.
jes...@voztele.com
http://www.voztele.com
Tel. 902360305
-------------------------------------
Es cierto, RFC 3261 permite hacer un "fetch" de los contactos
registrados, y la manera de hacerlo es mandar un REGISTER sin Contact.
La pregunta inicial era: que pasa si ese AOR no tiene ningun contacto
registrado? Se sigue mandando un 200 OK? Con o sin Contact? Lo que
comentabamos era que lo mas logico en ese caso es responder con un 200
OK que contiene un Contact vacio.
/M.A.
Yo opino, ante la pregunta inicial, que en caso de que el AOR no tenga
bindings, se le debe de responder con un 200 sin Contact, ya que como bien ha
apuntando Iñaki, gramaticalmente un Contact no puede ser nulo.
Al final todo esto lleva a que ese caso concreto (AOR consultando bindings y
respuesta 0 bindings) no está contemplado en el RFC3261, lo que ha hecho que
en el caso concreto de OpenSer se hayan decantado por implementarlo
devolviendo un 200 sin Contact.
El RFC no lo deja claro, pero yo lo veo como una respuesta lógica, el UAC al
recibir el 200 sin Contact deduce que no está registrado (tal como contesta
Twinkle).
--
Raúl Alexis Betancor Santana
Dimensión Virtual S.L.
Y todo esto nos muestra un bug del RFC3261 como apunta Victor:
The registrar returns a 200 (OK) response. The response MUST contain
Contact header field values enumerating all current bindings.
Ya que en el caso que nos ocupa no hay bindings, por lo que el Contact estaría
vacío (que no es válido según BNF) por lo que ese MUST genera jaleo.
--
Iñaki Baz Castillo
https://lists.cs.columbia.edu/pipermail/sip-implementors/2008-September/020311.html
2008/9/11 Iñaki Baz Castillo <i...@aliax.net>:
>
--
Victor Pascual Ávila
Vaya vaya... ¿no tendrías que haber añadido la cabecera "History-Info" en el
nuevo correo que has mandado a sip-implementors?
¡Qué buen apunte!
Vaya pifia en el RFC 3261, ¿no?
--
Iñaki Baz Castillo
Buen catch!
¿Qué tiene más sentido: aceptar un Contact con zero valores o
simplemente no incluirlo?
--
Victor Pascual Ávila
Yo diría que no incluirlo, ya que de permitir Contact vacío sería la única
cabecera de ese tipo que lo permite (ni From, ni To, ni Route, ni PAI...
permiten vacío).
Además, un cambio en el BNF puede ser terrible a estas alturas ¿no?
--
Iñaki Baz Castillo
¿nos movemos allí entonces todo el "Spanish-SIP-Death-Team"? :)
--
Iñaki Baz Castillo
Enviado, vaya jaleo estamos montando:
http://www.ietf.org/mail-archive/web/sip/current/msg24683.html
Tema iniciado también en s...@ietf.org:
http://www.ietf.org/mail-archive/web/sip/current/msg24683.html
¡A por ellos! XD
--
Iñaki Baz Castillo
Es obvio que sí que estás poniendo al cabecera Contact puesto que ahí la tienes.
--
Iñaki Baz Castillo
<i...@aliax.net>
Es muy sencillo, haz una captura SIP de lo que le está llegando al
servidor, una captura del REGISTER que le llega, independientemente de
lo que teóricamente tú le estás diciendo que tenga o no.
> Pero luego en contact solo me devuelve lo mismo q sale en el servidor
> de anonymus@.....
> Entonces no se si es que hay que poner algun otro dato en alguna
> cabecera. Si no, sabeis de alguna otra manera para saber quien esta
> registrado en el servidor de registro?.
Para saber los contacts registrados para un AoR sólo hay que mandar un
REGISTER con dicho AoR en el To y sin cabecera Contact.
A ver, yo envio un register sin cabecera contact. (o eso creo,
enviarlo sin cabecera contact, que es?. no poner
sc.setHeader("contact",loquesea), no?. Porque yo eso no lo pongo.
La realidad es que te está enviando un Contact así que no obtendrás
como respuesta el listado de usuarios registrados para ese AoR.
AoR es la dirección usuaio@dominio para el que haces la consulta. En
el caso de un REGISTER lo que cuenta es el AoR que figura en el To
(sobre esa dirección es sobre la que haces la consulta).
> pero en esto que envia de respuesta en contact, deberian de aparecerme
> los usuarios registrados en el servidor,no?.
No, porque tu REGISTER *sí* tenía un Contact y no debería tenerlo.
> Es que yo lo envio sin poner la cabecera contact
> Contact <sip:anon...@192.168.1.35:5161;transport=udp>
Esto es una cabecera Contact.
> pero en esto que envia de respuesta en contact, deberian de aparecerme
> los usuarios registrados en el servidor,no?.
Ten en cuenta que vas a obtener los contacts registrados para un
determinado AOR, no para todos.
Saludos,
--
Victor Pascual Ávila