2012-02-29 7 views
8

In genere, il campo dell'intestazione Contatto nella richiesta Invito è inutile. Ad esempio, UAC e UAS sono in LAN diverse. Il campo Contatto può essere:In SIP, perché il campo dell'intestazione Contatto DEVE essere presente nella richiesta Invito

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

Non è possibile utilizzare il campo Contatto mentre è ancora possibile creare una finestra di dialogo. Quindi, perché il campo dell'intestazione Contatto è obbligatorio?

risposta

7

Il campo del contatto contiene l'indirizzo al quale il destinatario può raggiungere il chiamante per le richieste future. Ad esempio, è necessario in modo che il destinatario possa inviare un BYE o un re-INVITE al chiamante.

+0

Grazie. Ho fatto un test con pjprojet. Se il campo Contatto è come sopra, il BYE inviato dal callee non può raggiungere il chiamante. –

+1

Ciò potrebbe essere dovuto al fatto che il contatto è un indirizzo LAN privato. Se il tuo destinatario si trova in un'altra rete, non sarebbe in grado di raggiungerlo. Questa è una delle cose per cui i proxy SIP sono usati: siedono ai confini della rete e manipolano le intestazioni dei contatti in modo che l'altra parte possa raggiungere gli indirizzi citati. – DarkDust

+0

Grazie. Con il tuo aiuto, ho riparato il problema. –

8

L'intestazione di contatto dice dove sei (o meglio, dove il vostro User Agent è), mentre l'intestazione From dice chi sei.

È possibile che diversi dispositivi SIP siano tutti registrati sullo stesso indirizzo di registrazione (l'URI inserito nell'intestazione From).

Inoltre, le richieste di REGISTRO utilizzano le intestazioni dei contatti per mantenere il servizio di localizzazione di SIP: consentono a un agente utente di aggiornare le informazioni sulla posizione di un registrar.

(Per inciso, se Alice chiama Bob, l'intestazione Contact deve essere in una risposta 2xx in modo che Alice possa indirizzare l'ACK del 2xx su Bob. Ciò fa riferimento al commento di DarkDust su alcuni proxy SIP che manchino intestazioni di Contatto: se esso no, ti trovi nella scomoda posizione di avere una chiamata che è solo a metà stabilita: Alice pensa che la chiamata sia impostata perché ha inviato il suo ACK, ma Bob non la riceve mai. Un'alternativa a un proxy di manomissione dei contatti sta usando un B2BUA come gateway di rete, non avrebbe bisogno di manipolare l'intestazione del Contatto perché l'intestazione avrebbe puntato allo stesso B2BUA.)

In risposta ai commenti di Phoenix Luo, a causa delle carenze dell'utilizzo di IP LAN in un'intestazione di Contatto, RFC 5627 descrive una soluzione - usando glo URI dell'agente utente bally instradabile (GRUU) nell'intestazione/i di contatto.

+0

Nel progetto in cui mi sto impegnando, il proxy per il servizio di localizzazione aggiunge l'intestazione Record-route alla richiesta di invito. Quindi la chiamata può essere costruita con successo. Tuttavia, la richiesta Bye dell'UAS non può essere ricevuta dall'UCA come ha detto DarkDust. –

+0

Sì: il BYE viene inviato all'agent_user nella chiamata e quell'agent user viene identificato dall'intestazione Contact e non dall'intestazione From.Questo è il motivo per cui abbiamo dovuto inventare cose come RFC 5627 (Ottenere e utilizzare URI di URI di utente globali (GRUU) nel SIP (Session Initiation Protocol)) –

+0

Grazie. Leggerò attentamente il documento. –

Problemi correlati