RTC 用戶端需 XML 字串描述裝置、使用者、提供者、SIP 伺服器設定:
HRESULT CSIPLogin::CreateXMLProvision(LPSTR szURI, LPSTR szSIPIP,
LPSTR szTransport, BSTR* bstrBuf) {
// ... 省略變數宣告 ...
wsprintf(szBuf,
_T("")
_T(" ")
_T("")
_T(" ")
_T(" ")
_T(" ")
_T(" ")
_T("")
_T(" "),
szURIBuf, szRealm,
szSIPIP, szTransport, bBasicAuth ? _T("auth=\"basic\"") : _T(""),
szSIPIP, szTransport, bBasicAuth ? _T("auth=\"basic\"") : _T(""));
*bstrBuf = SysAllocString(szBuf);
return S_OK;
}
關鍵元素:user (URI/realm)、sipsrv role="proxy" (會話類型)、sipsrv role="registrar" (註冊)。Basic 認證需 TLS 傳輸。
// 取得 Presence 介面
IRTCClientPresence* pPresence = NULL;
hr = m_pClient->QueryInterface(IID_IRTCClientPresence, (void**)&pPresence);
// 新增好友
IRTCBuddy* pBuddy = NULL;
hr = pPresence->AddBuddy(bstrURI, bstrName, NULL, VARIANT_TRUE, NULL, 0, &pBuddy);
SAFE_RELEASE(pPresence);
if (SUCCEEDED(hr)) {
UpdateBuddyList(pBuddy); // 更新 UI
SAFE_RELEASE(pBuddy);
}
IRTCBuddy 介面提供好友 URI、名稱、狀態、持久類型、私有資料存取。
IRTCClientProvisioning* pProv = NULL;
m_pClient->QueryInterface(IID_IRTCClientProvisioning, (void**)&pProv);
pProv->DisableProfile(); // 從 SIP 伺服器登出
SAFE_RELEASE(pProv);
RTC API 結合 SIP 伺服器,透過 XML 佈建、Presence 好友清單、觀察者機制,可建置完整即時通訊協作工具 (PC-PC、PC-Phone、IM)。部署於支援超執行緒的 Pentium 4/XP SP1 環境,能充分發揮多核心效能,保障多任務下的通訊品質。