首先告訴大家代碼塊在哪裏,註冊的核心在RegisterAgent類中的函數register(int time)中,註冊的核心是:
-
//Create message re (modified by mandrajg)
-
Message req = MessageFactory.createRegisterRequest(sip_provider,
-
target, target, new NameAddress(user_profile.contact_url), qvalue, icsi);
-
- req.setExpiresHeader(new ExpiresHeader(String.valueOf(expire_time)));
註冊稍微簡單一點,因爲只是需要客戶端和服務器進行綁定就行了,註冊在SIP協議中稱作登記服務,再向服務提供商進行註冊的時候,服務提供商都會給我們一個URL,這個URL在Sipdroid中被封裝在SipURL中的,這個URL寫的格式如下:
sip:[email protected],用戶名+主機名。
登陸服務過程中的具體流程如下:
程序啓動便自動進行初始化,在初始化的過程中,每隔一段的時間,客戶端這邊就要發送Register信息給服務器,Register中的信息包含了服務提供商分配給當前用戶的SIP URI(通俗點說,SIP URI 就是客戶端的標識,這個標識是必須是唯一的)
服務器通過獲得當前用戶的URI便可以綁定這個用戶,然後寫到一個數據庫中,在SIP協議中,這個叫做定位服務(location server)
發送的請求的格式如下:
F1 REGISTER Bob -> Registrar
REGISTER sip:registrar.biloxi.com SIP/2.0
Via: SIP/2.0/UDP bobspc.biloxi.com:5060;branch=z9hG4bKnashds7
Max-Forwards: 70
To: Bob <sip:[email protected]>
From: Bob <sip:[email protected]>;tag=456248
Call-ID: 843817637684230@998sdasdh09
CSeq: 1826 REGISTER
Contact: <sip:[email protected]>
Expires: 7200
Content-Length: 0
註冊會在2小時後超時。註冊服務器迴應一個200OK,返回的信息包含如下:
F2 200 OK Registar -> Bob
SIP/2.0 200 OK
Via: SIP/2.0/UDP bobspc.biloxi.com:5060;branch=z9hG4bKnashds7
;received=192.0.2.4
To: Bob <sip:[email protected]>;tag=2493k59kd
From: Bob <sip:[email protected]>;tag=456248
Call-ID: 843817637684230@998sdasdh09
CSeq: 1826 REGISTER
Contact: <sip:[email protected]>
Expires: 7200
Content-Length: 0
這裏面涉及到很多參數,但是在RFC3261中都有詳細的介紹,但是比較的分散,詳見:SIP中涉及到的協議之-RFC3261
第二篇將給大家介紹下,發送的註冊消息體裏面的每個參數所代表的意義.