12.1.1 UAS behavior
當UAS對請求返回響應時(shí),響應消息中攜帶了創(chuàng )建dialog消息(例如,INVITE響應的2xx),UAS必須從請求中拷貝所有Record-Route 頭值到響應消息中(包括URIs,URI參數和任何 Record-Route 頭參數,無(wú)論這些參數對UAS是已知還是未知參數),而且必須保持這些參數的順序。此UAS必須對響應添加一個(gè)Contact頭,這個(gè)Contact頭包含一個(gè)地址,UAS將會(huì )在dialog(包括INVITE中ACK的2xx響應)中的后續請求聯(lián)系此地址。一般來(lái)說(shuō),此URL的主機消息是此IP地址,或者主機的FQDN。在Contact頭中提供的URI必須是一個(gè)SIP或者SIPS URL。
如果在初始化了dialog的請求中的Request-URI或者top Record-Route 頭中的值域中包含SIPS URI,如果沒(méi)有Record-Route頭域,如果有任何值或者Contact頭的話(huà),響應中的Contact頭必須是一個(gè)SIP URL。此URL應該支持一個(gè)全局范圍(也就是說(shuō),在消息中,同樣的URL可以使用在此dialog外部)。同樣的方式,在INVITE中的Contact頭域中的URL使用范圍也不能被局限于此dialog中。因此,它可以針對UAC的消息中,甚至于也可以使用在此dialog外部。
UAS然后構建dialog狀態(tài)。在dialog生命周期內,此狀態(tài)必須被持續維護。
如果請求是通過(guò)TLS發(fā)送過(guò)來(lái)的,并且Request-URI包含一個(gè)SIPS URI,“secure”設置為T(mén)RUE。
路由組必須設置到請求的Record-Route頭的URL列表中,按照順序處理,并且保留所有的URL參數值。如果在請求中沒(méi)有出現Record-Route頭,路由組必須設置為空。這個(gè)路由組,甚至是空的路由組將會(huì )在dialog的后續請求中覆蓋任何已存在的路由組設置。遠端目的地地址必須設置為從此請求的Contact頭獲得的URL地址。
遠端序列號必須設置為請求中CSeq的序列號。本地序列號必須為空。Dialog ID中的呼叫身份組件必須設置為請求中的Call-ID值。Dialog ID中的本地標簽組件必須設置為此請求的相應響應中的TO域中的標簽值(總是要包含一個(gè)tag標簽),dialog ID中的遠端標簽組件必須設置為從請求中From域獲得的標簽值。UAS必須準備接收一個(gè)在From域中無(wú)tag標簽的請求,這樣的環(huán)境中,此標簽tag被認為是一個(gè)空值的標簽。
這樣的處理方式為了支持向后兼容,兼容RFC 2543規范,在RFC2543中,tags不是強制使用的。
遠端的URL必須設置為從From獲得的URI,本地URL必須設置為從To中獲得的URL。
12.1.2 UAC Behavior
當UAC發(fā)送了一個(gè)請求,此請求能夠創(chuàng )建dialog(例如發(fā)送的INVITE),UAC必須在請求的Contact頭中提供一個(gè)支持全局范圍的SIP或SIPS URL(同樣的SIP URL可以使用在dialog的外部環(huán)境中)。如果請求中含有Request-URI值或路由中的最頂部的 Route頭中帶一個(gè)SIPS URI,那么Contact頭必須包含一個(gè)SIPS URI。
當UAC收到了一個(gè)響應,此響應創(chuàng )建一個(gè)dialog,它構建了這個(gè)dialog的狀態(tài)。dialog狀態(tài)必須被維持在dialog生命周期內。
如果此請求是通過(guò)TLS發(fā)送,并且Request-URI包含一個(gè)SIPS URI,“secure”
Flag設置為T(mén)RUE。
路由組必須設置到響應的Record-Route頭的URL列表中,按照順序處理,并且保留所有的URL參數值。如果在響應中沒(méi)有出現Record-Route頭,路由組必須設置為空。這個(gè)路由組甚至是空的路由組將會(huì )在dialog的后續請求中覆蓋任何已存在的路由組設置。遠端目的地地址必須設置為從此請求的Contact頭獲得的URL地址。
本地序列號必須設置為請求中CSeq的序列號。遠端序列號必須為空(當遠端UA在dialog中發(fā)送一個(gè)請求時(shí),遠端序列號才能被創(chuàng )建)。Dialog ID中的呼叫身份組件必須設置為請求中的Call-ID值。Dialog ID中的本地標簽組件必須設置為此請求的相應響應中的From域中的標簽值(總是要包含一個(gè)tag標簽),dialog ID中的遠端標簽組件必須設置為從響應中To域獲得的標簽值。UAC必須準備接收一個(gè)在To域中無(wú)tag標簽的響應,這樣的環(huán)境中,此標簽tag被認為是一個(gè)空值的標簽。
這樣的處理方式為了支持向后兼容,兼容RFC 2543規范,在RFC 2543中,tags不是強制使用的。
遠端的URL必須設置為從To獲得的URI,本地URL必須設置為從From中獲得的URL。