2012-02-29 25 views
8

Por lo general, el campo de encabezado de contacto en la solicitud de invitación es inútil. Por ejemplo, el UAC y el UAS están en LAN diferentes. El campo de Contacto puede ser:En SIP, por qué el campo de encabezado de contacto DEBE estar presente en la solicitud de invitación

INVITE sip:[email protected] SIP/2.0 
Contact: Alice<[email protected]> 
..... 

No se utiliza el campo de Contacto mientras aún podemos crear un cuadro de diálogo. Entonces, ¿por qué el campo de encabezado de contacto es obligatorio?

Respuesta

7

El campo de contacto contiene la dirección en la que el destinatario puede comunicarse con la persona que llama para futuras solicitudes. Por ejemplo, es necesario para que el destinatario pueda enviar un BYE o una re-INVITE a la persona que llama.

+0

Gracias. Hice una prueba en pjprojet. Si el campo de Contacto es como el anterior, el BYE enviado por el destinatario no puede comunicarse con la persona que llama. –

+1

Eso podría deberse a que el Contacto es una dirección de LAN privada. Si su destinatario está en otra red, no podrá alcanzarlo. Para eso se utilizan los proxies SIP: se ubican en los límites de la red y destruyen los encabezados de los contactos para que la otra parte pueda llegar a las direcciones mencionadas. – DarkDust

+0

Gracias. Con tu ayuda, he reparado el problema. –

8

La cabecera de contacto dice donde se encuentra (o más bien, donde el agente de usuario es), mientras que el encabezado dice que eres.

Es posible que tenga varios dispositivos SIP registrados en la misma dirección de registro (el URI que coloca en el encabezado De).

Además, las solicitudes de REGISTRO usan encabezados de contacto para mantener el servicio de ubicación de SIP: permiten que un agente de usuario actualice la información de ubicación de un registrador.

(Por otro lado, si Alice llama a Bob, el encabezado de contacto debe estar en una respuesta 2xx para que Alice pueda enrutar el ACK del 2xx a Bob. Esto apunta al comentario de DarkDust sobre algunos proxies SIP que manchan los encabezados de contacto: si no, te encuentras en la incómoda posición de tener una llamada que está medio establecida: Alice cree que la llamada se configuró porque ella envió su ACK, pero Bob nunca la recibe. Una alternativa a un proxy de manipulación de contactos es usar un B2BUA. como una puerta de enlace de red; no necesitaría modificar el encabezado de contacto porque el encabezado apuntaría al propio B2BUA).

En respuesta a los comentarios de Phoenix Luo, debido a las deficiencias del uso de direcciones IP LAN en un encabezado de contacto, RFC 5627 describe una solución - usando glo URIs del agente de usuario enrutable bally (GRUUs) en el/los encabezado/s de contacto.

+0

En el proyecto que me interesa, el proxy para el servicio de ubicación agrega un encabezado Record-route a la solicitud de invitación. Entonces la llamada se puede construir con éxito. Sin embargo, el UAC no puede recibir la solicitud de adiós del UAS como lo dijo DarkDust. –

+0

Sí: el BYE se envía al _user agent_ en la llamada, y ese agente de usuario se identifica mediante el encabezado Contact, no el encabezado From.Por eso tuvimos que inventar cosas como RFC 5627 (Obtención y uso de URI de agente de usuario globalmente enrutable (GRUU) en el Protocolo de inicio de sesión (SIP)) –

+0

Gracias. Leeré el documento cuidadosamente. –

Cuestiones relacionadas