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 。

UPnP 体系架构和基本原理 —— Linux SDK for UPnP Devices

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命令。