Windows Mobile 設備上的連接管理器 (Connection Manager) 是網絡訪問的核心協調者,屏蔽了 GPRS/WiFi/VPN/撥號等異構網絡的複雜性。本文深入剖析其內部原理:PDP 上下文約束、OMA 配置建模、映射表路由、連接請求仲裁與狀態機流轉。
連接管理器用抽象的元網絡表示網絡終點(如 Internet、企業網、Walled Garden),由 GUID 標識。配置通過 OMA Client Provisioning XML 下發:
| 配置節點 | 用途 | 關鍵參數 |
|---|---|---|
| CM_Networks | 定義元網絡 | GUID、描述名稱 |
| CM_GPRSEntries | GPRS 接入點 | APN、用戶/密碼、目標元網絡 GUID |
| CM_WiFiEntries | WiFi 配置 | SSID、加密、目標元網絡 |
| CM_VPNEntries | VPN 通道 | 源/目標元網絡、伺服器地址 |
| CM_ProxyEntries | 代理伺服器 | 源/目標元網絡、代理地址/類型 |
| CM_Mappings | URL → 元網絡映射表 | Pattern、目標元網絡 GUID、優先級 ID |

<wap-provisioningdoc>
<characteristic type="CM_Mappings">
<characteristic type="501"> <parm name="Pattern" value="*://*/*.3gp"/> <parm name="Network" value="{D3B2...}"/> </characteristic>
<characteristic type="610"> <parm name="Pattern" value="*://*.operator.*"/> <parm name="Network" value="{7022...}"/> </characteristic>
<characteristic type="570425344"> <parm name="Pattern" value="*://*.*/*"/> <parm name="Network" value="{436E...}"/> </characteristic> // 默認 Internet
<characteristic type="587202560"> <parm name="Pattern" value="*://*/*"/> <parm name="Network" value="{A118...}"/> </characteristic> // 默認 Work
</characteristic>
</wap-provisioningdoc>
ConnMgrMapURL 按 ID 升序遍歷,首個匹配 Pattern (通配符 *) 的條目獲勝。*://*.operator.*/* 匹配所有協議、含 .operator. 域名的 URL。// 1. URL 解析元網絡
ConnMgrMapURL(url, &destGuid, NULL);
// 2. 構建連接請求
CONNMGR_CONNECTIONINFO info = {0};
info.cbSize = sizeof(info);
info.guidDestNet = destGuid;
info.dwFlags = CONNMGR_FLAG_PROXY_HTTP; // 支援 HTTP 代理
info.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE; // 用戶交互優先級
info.hWnd = hWnd;
info.uMsg = WM_USER + 101; // 狀態變更回調消息
// 3. 發起異步連接
ConnMgrEstablishConnection(&info, &hConn);
// 4. 消息循環處理狀態
switch (status) {
case CONNMGR_STATUS_CONNECTED: /* 成功 */; ConnMgrReleaseConnection(hConn, 1); break;
case CONNMGR_STATUS_CONNECTIONFAILED: /* 失敗 */; break;
// ... 其他瞬時狀態
}
dwFlags:代理支援聲明(CONNMGR_FLAG_PROXY_HTTP 等),影響路徑選擇。dwPriority:仲裁核心,USERINTERACTIVE > BACKGROUND > IDLE;語音通話擁有最高 VOICE 優先級可搶佔所有連接。bExclusive:獨佔模式,阻止連接共享(安全場景慎用)。仲裁觸發點:新請求、優先級變更、請求釋放、網絡資源變化(如基站切換)。
資源分配邏輯:
WAITINGFORRESOURCE。bExclusive 影響)。狀態流轉:IDLE → CONNECTING → (CONNECTED | FAILED | CANCELED | DISABLED | AUTHFAILED)。CONNECTED 亦為瞬時狀態,應用需主動 Release 釋放資源。
ConnMgrMapURL 解析元網絡,保證跨運營商/地區兼容性。USERINTERACTIVE,後台同步用 BACKGROUND。CONNMGR_FLAG_PROXY_HTTP,讓連接管理器選擇支援代理的路徑。uMsg 回調,及時釋放連接避免洩漏。RELEASE 後自動重試。