在前面 Auto-IP 的步驟之後,接下來就是 uPnP 通訊過程摘要。看完這段之後,後面會先看看 uShare, djmount 的源碼,以便了解其運作,再來研究 libupnp, 對照著這邊的步驟說明,這樣對整個 uPnP 的運作應該就會有較清楚的理解。
步驟一: Discovery(SSDP, 參考右圖)
狀況一:加入 Device
如下圖,當加入 Device 時,Device 應該發出 "Advertisement" 到 239.255.255.250:1900 公告週知。
狀況二:加入 Control Point.
如下圖,當有個 control point 裝置加入網路時,應該向現有網路廣播 "Search Request",裡頭會含該控制點感興趣的裝置種類,並因而取得相關裝置的回應(有可能多台)。若控制點想知道更多資訊,可以送含 Presentation 要求的 discovery 訊息出去,後面會討論。
有一點比較特別的是,若裝置正常離開此一家庭網路,應該送出「revoke」要求的 discovery 訊息來取消它先前廣播出去的資訊,此一步驟類似註冊與取消註冊。不過若無此正常步驟,控制點也應該定時更新。同理,若裝置的網址變動,亦應該公右週知。因此每一資訊應該含有「有效期限」資訊,相同的,控制點在有效期限過後應該更新之。
此外,若裝置或控制點有多個網路介面,應該同時對所有網路介面廣播,而且廣播訊息應該指定該網路介面的網址在 LOCATION 表頭中。當然像 TTL(default=4) 也不能少。而對於正常 IP(非 Auto-IP)應該附帶 IGMP Join 以便讓 multicast 封包穿越 Routers
步驟二:Description
如下圖,控制點在取得裝置(URL)後,可以透過該 URL 取得裝置描述檔,當然裝置要回應控制點的要求。若控制點對裝置較內部(詳細)的服務有興趣,這樣的交談可以採多次進行,控制點先取得裝置初步的 Device Description 後,再次取得進階的 Service Description.
步驟三:Control(SOAP)
如下圖,控制點可以在取得描述檔後,得知裝置提供的服務與動作,進而對裝置進行控制,其中至少包括「動作」要求,及變數的取得(或設定)要求。
步驟四:Eventing(GENA)
控制點先對感興趣的裝置做 "Subscribe" 動作,則該裝置狀態有改變時,會發出事件通知,利用 GENA 傳送 XML 內容給訂閱的控制點,該控制點因而可以即時得知最新狀態。如下圖,當 PDA 訂閱電視狀態後,從 PC 下 Power ON TV 動作後,電視在開機後應該通知 PDA 它最新的狀態。當然適當狀況下也應該取消訂閱動作。
步驟五:Presentation
如下圖,若裝置有提供控制頁面(Remote UI),則控制點可以直接瀏覽該頁面進而取得資訊或控制。
0 意見:
張貼留言