resiprocate閱讀心得

**Address-of-Record****:Address-of-Record(AOR)是一個SIP或SIPS URI,它指向帶位置服務(wù)的一個域,位置服務(wù)可以將一個URI與另一個URI(可能找到用戶的URI)映射。典型的,通過注冊來填寫位置服務(wù)。通常認為AOR是用戶的“公開地址”。(sip proxy中查找用戶用的)

**ome Domain****:此域為SIP用戶提供服務(wù)。典型的,它通常是注冊的記錄地址中URI中出現(xiàn)的域。

**Registrar****:注冊員是服務(wù)器,它接收REGISTER請求,并把從請求中接收的信息放入其所在的域的位置服務(wù)中

**SIPTransaction****:SIP事務(wù)在客戶端和服務(wù)器之間發(fā)生,包含從客戶端向服務(wù)器端發(fā)送的第一個請求到服務(wù)器端向客戶端發(fā)送的最后一個響應(yīng)(非1xx)間的所有消息。如果請求是INVITE而最后的響應(yīng)不是2xx,那么事務(wù)也包含響應(yīng)的ACK。INVITE請求的2xx響應(yīng)的ACK是一個獨立的事務(wù)。

**Transaction User(TU)****:傳輸層上的協(xié)議處理層。事務(wù)用戶包括UAC核心、UAS核心和代理核心。

**Call-ID** Call-ID頭字段作為集合一系列消息的唯一標(biāo)識符。在對話中,每個UA 發(fā)送的所有請求和響應(yīng)中,Call-ID 必須是一樣的。UA 的每個注冊中,它應(yīng)該是一樣的。

在UAC 創(chuàng)建的對話外的新請求中,如果不是特定方法行為覆蓋的,UAC選擇的Call-ID頭字段必須是在時間和空間上全球唯一的標(biāo)識符。所有的SIPUA必須有一種方法來保證其他UA 不會產(chǎn)生它們產(chǎn)生的Call-ID頭字段。注意,當(dāng)在特定的失效響應(yīng)后,重發(fā)請求以修正請求時(如,認證挑戰(zhàn)),重的請求將不作為新的請求,因此不需要新的Call-ID 頭字段;

推薦在生成Call-ID 時,使用密碼學(xué)上的隨機標(biāo)識符(RFC 1750 [11])。執(zhí)行時可以使用這種格式“l(fā)ocalid@host”。Call-ID 是區(qū)分大小寫的,并且逐字節(jié)比較的。

使用密碼學(xué)上的隨機標(biāo)識符提供了會話截獲保護,并減少了Call-ID 沖突的可能性。

對于選擇請求的Call-ID 頭字段的值,不需要規(guī)章界面或用戶界面

**CSeq** CSeq頭字段是用作識別和指示事務(wù)的。它由序列號和方法組成。此方法必須和請求相匹配。對于對話外的非REGISTER 請求,此序列號是任意的。此序列號的值必須是值小于2~31 的32 位的無符號整數(shù)。只要遵循上述原則,客戶端就可以隨意地使用一種機制來選擇CSeq 頭字段值。

refer:訪問一個URL或者URL資源,URL可以是另外一個UA,可以是個網(wǎng)頁。如果返回2xx,之后要發(fā)送Notify,來發(fā)送訪問url或者url資源的結(jié)果

target指的是Contact

---

DUM模塊

---

EncryptionManager:應(yīng)該是給發(fā)送/接收的消息的消息體進行加解密的,保證sip body的安全性,暫時不用管.

HandleManager用來管理Handled,Handled和handle id是松耦合關(guān)系。

AppDialog:將一個Dialog和一個handle綁定到一起,注意,handle和dialog id不一樣,handle是自動生成,遞增的,dialog id是可以設(shè)置改變的。

AppDialogSet:生成一個AppDialog,其他的好像沒啥卵用。

AppDialogSetFactory:生成一個AppDialogSet,更沒什么卵用,搞得那么復(fù)雜。

BaseCreator:生成一個sip request message.

BaseUsage:繼承于Handled,有一個DialogUsageManager成員變量,從這個類繼承出來的類有了handle和處理消息的能力,所以,這個類稱為BaseUsage(基本有用,不再是廢柴類)

DialogUsage:繼承自BaseUsage,Dialog作為成員變量,所以可以獲取到dialog的各種信息,并且這個類中有一個內(nèi)嵌內(nèi)DialogUsageSendCommand,所可以發(fā)送DialogUsageSendCommand消息,可以同時發(fā)送SipMessage和DialogUsageSendCommand,

Message:有一個TransactionUser成員變量

TransactionUser:一個sip事務(wù),有一個Fifo隊列和一個擁堵算法CongestionManager,一個RuleList,一個DomainMatcher。有了Fifo,就可以post,get sip message了?。?!

CertMessage:繼承自Message,好像用處不大,加密消息的時候有用到

ChallengeInfo:間接繼承自Message,成員變量有Failed,ChallengeRequired和transactionId,應(yīng)該是server向client Challenge的時候用到

ClientAuthExtension:客戶端接受Challenge時候的處理,但是奇怪的是這個類沒有實現(xiàn),導(dǎo)致這個類現(xiàn)在貌似沒什么卵用,在ClientAuthManager通過ClientAuthDecorator類中調(diào)用了此類

ClientAuthManager:處理服務(wù)端發(fā)送過來的Challenge,作為客戶端向服務(wù)起發(fā)起請求,接收Challange時候用到。(關(guān)注此類)

InviteSession:繼承自DialogUsage,包含了本地和遠端的sdp,對端支持的sip方法,編碼,語言,mime type,user agent,發(fā)送reinvite(比如,在音頻會話建立成功之后又想加入視頻),這個類就是發(fā)送invite session相關(guān)的消息,和處理invite session相關(guān)的回應(yīng)

包含的方法:

requestOffer:向遠端發(fā)送一個reinvite,來請求一個sdp

provideOffer:向遠端發(fā)送一個包含sdp的invite請求,或者包含sdp的ack(看InviteSession現(xiàn)在的狀態(tài))

provideAnswer:向遠端發(fā)送一個ack

end:發(fā)送一個bye

reject:發(fā)送一個status code的response

sessionRefresh和targetRefresh:優(yōu)先發(fā)送Update,如果自己或者對端不支持此方法,則發(fā)送一個reinvite

refer:發(fā)送一個refer

info:發(fā)送一個info(比如通話過程中發(fā)送用戶的撥號)

message:用戶間的短消息通信(比如IM消息)

dispatch:處理sip消息

dispatchConnected:調(diào)用dum的mInviteSessionHandler, dum的mInviteSessionHandler可以有上層開發(fā)者實現(xiàn),通過這種辦法就實現(xiàn)了對sip消息請求的處理

ClientInviteSession:繼承自InviteSession,

dispatch一方面可以dispatch消息,另外一方面可以dispatch timer

ServerInviteSession:繼承自InviteSession

ClientOutOfDialogReq:非dialog消息(register, publish, pager消息)

ApplicationMessage:應(yīng)用層的message,非sip message

Dialog:有兩種情況有dialog,invite和subscribe,Dialog用來記錄對話的信息(call ID, contact, remoteTarget, local name等,并把各種消息分發(fā)到各個地方InvisionSession, ServerSubscription,ClientSubscription等),在Dialog中創(chuàng)建了InviteSession

DialogEventStateManager:管理DialogEventState,這個類最重要的用途應(yīng)該是回調(diào)了DialogEventHandler,讓應(yīng)用層用戶有機會處理trying, eraly, processeding, confirmed等dialog消息

DialogSet:管理Dialog,除此之外,好像也做了很多東西,分發(fā)各種消息(register,subscribe等 ),不過貌似都沒被調(diào)用

DialogUsage:里面有個Dialog的成員變量,沒咋搞明白這個類的意義,難道XXUsage這種類都是提供給上層用戶用的嗎?

DialogUsageManager:大名鼎鼎的DUM,從fifo中取出消息,發(fā)給各個處理的handle,DialogUsageManager調(diào)用SipStack的send從而向SipStack的fifo中傳數(shù)據(jù),同時 DialogUsageManager又向SipStack注冊了自己(因為DialogUsageManager繼承自TransactionUser),所以SipStack可以向DialogUsageManager 的fifo中發(fā)送數(shù)據(jù),從而實現(xiàn)了DialogUsageManager和SipStack之間的數(shù)據(jù)傳遞?。?!

DumThread:不停的從dum的fifo中取出消息,調(diào)用dum的internalProcess來進行處理,

UserProfile和MasterProfile:傳入?yún)f(xié)議棧的配置,決定了協(xié)議棧的能力

DumTimeout:是一個application message,表明各種(register,subscribe,cancel等)超時

KeepAliveManager:用來定時發(fā)送心跳sip消息的,不過發(fā)送的是option,不是register,28181要求發(fā)送register

ServerAuthManager:貌似是服務(wù)端處理challage的(待確定)

ServerRegistration:繼承自NonDialogUsage,server用來處理客戶端注冊的類

UserAuthInfo:貌似存儲了簽名時候用到的一些信息

BaseCreator:最重要的功能:用來生成一個initial request

---

Sip Stack模塊

---

Aor:從一個url中解析出來scheme,user,host,port的

BasicNonceHelper:生成/解析nonce

Contents:sip message的body

SipStack:核心類,

setEnumDomains:設(shè)置domain

TransactionControllerThread:接收sip 網(wǎng)絡(luò)消息的線程

StackThread:sip協(xié)議棧的線程

ConnectionManager:管理這tcp,udp的接收,發(fā)送

Transport

pushRxMsgUp方法:把接收到的sip消息放入fifo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容