**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