UPnP 體系架構和基本原理 —— Linux SDK for UPnP Devices

UPnP 體系架構和基本原理 —— Linux SDK for UPnP Devices

Linux SDK for UPnP Devices

UPnP架構基於Internet和TCP/IP等成熟協議,使之實現與底層硬件無關、與開發的程序設計語言無關、與操作系統無關等特性,故整個UPnP設備的設計開發過程均可由設備製造商按照UPnP規範開發。這雖說提高開發的自由度,但也帶來重複開發和資源浪費的問題。
因此,爲了降低UPnP設備的開發成本和週期,促進UPnP的發展,2000年Intel公司開放了第一個基於Linux的採用C語言開發的開源UPnP協議棧源代碼Linux SDK for UPnP 。

基於Linux的開源UPnP協議棧體系結構

libupnp對UPnP協議規範進行抽象,包含尋址到表達的六個過程,實現了其中SSDP、GENA和SOAP等協議模塊,提供了響應的API接口。減少了開發者重複開發的工作量,降低了開發難度和開發週期。

WEB server

WEB server模塊主要處理UPnP中使用的標準HTTP GET請求。該WEB server模塊管理設備描述文檔和服務描述文檔的URL地址,當HTTP GET請求到來時提供相應的文檔數據。同時,WEB server模塊也支持對虛擬路徑的HTTP POST請求。

XML解析器

UPnP工作過程中廣泛使用了XML,設備描述文檔和服務描述文檔就是XML文檔,GENA的任何通知都採用XML來描述服務的狀態變化,SOAP的請求和響應消息也使用XML進行描述。XML解析器模塊用於對這些XML信息按照其特性進行解析處理,並提供相應的XML的API接口便於程序訪問和編寫XML文檔。

線程庫

該UPnP SDK大量採用了多線程技術來處理UPnP的衆多事件和請求,提高程序的併發能力。線程庫模塊提供一個線程池子模塊用於同一管理所有線程,提供了定時器線程子模塊用於處理訂閱事件、設備存在公告等定時事件。提供的所有線程API接口類似於POSIX的形式。

HTTP解析器

UPnP架構中使用SSDP協議發送的設備公告消息、設備搜索消息、設備離線消息等,還有使用GENA協議發送的事件訂閱消息、事件退訂消息、事件通知消息等,這些消息都需要使用HTTP協議進行封裝各自協議的頭部和方法,也需要對這些HTTP消息按各自特點進行解析。

UPnP SDK提供了HTTP解析器模塊用於處理相應的封裝和解析,默認支持HTTP/1.0的分開編碼語法而不支持HTTP/1.1版本,但接收到HTTP/1.1的信息時依然可以進行分析解碼。

微型服務器

微型服務器(Mini Server)提供了SSDP模塊、GENA模塊、SOAP模塊以及WEB Server頁面服務器所需要的公共功能。

該模塊接收所有的網絡連接,分析出請求的來源後,使用HTTP解析模塊對HTTP頭部進行分析,最後把解析完成的連接轉向相應的協議模塊中進行處理。

微型服務器需要處理的命令有:獲取描述文件的GET命令、發送控制請求的POST/M-POST命令、訂閱事件的SUBSCRIBE命令、退訂事件的UNSUBSCRIBE命令以及事件通知的NOTIFY命令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章