http://www.plutinosoft.com/platinum
http://blog.csdn.net/lancees/article/details/9178385
Note that Platinum SDK links with Neptune C++ Runtime
UpnP 包含一下五个基本部分/阶段(Phases):
1、发现(Discovery):这是第一阶段,控制点搜索设备和服务,类似的,设备广播他
所能提供的服务通告。
2、描述(Description):一旦控制点发现了他感兴趣的设备或服务,他将请求该设备提
供该设备本身、其他组件成员设备以及他们提供的服务的完整描述。
3、控制(Control):本阶段允许控制点通过改变设备的状态来控制设备上提供的一个或
多个服务。
4、事件(Eventing):本阶段允许控制点与其感兴趣的服务状态保持同步,控制点向事
件服务器订阅一个特定的服务,当该服务状态改变时,接收事件通告。
5、表示(Presentation):表示阶段允许设备保持一份文档,该文档采用标准 HTML 语言
编写,他可以是该设备的一个用户界面。
1.1.1、发现(Discovery)
在发现阶段,控制点采用 SSDP(简单服务发现协议:Simple Service Discovery
Protocol)发现设备和服务而设备采用 SSDP 向控制点宣告他们的存在。SSDP 采用 HTTP 的
一种变体以 UDP 多播的方式来进行广播,并采用另一种 HTTP 变体通过 UDP 单播来进行应
答。
一个设备可能包含其他设备,每个设备都有他自己的服务。设备采用其类型和一个唯一
的标志符来进行标识。服务则用他们的类型来标识。
为了搜索网络上的设备或服务,控制点使用 UDP 多播包向地址 239.255.255.250:1900 发送
HTTP 的 M-SEARCH 命令。任何网络上服务控制点搜索条件的设备发回一个 UDP 单播进行
应答,该应答中包含了指向其描述文档(参加 1.1.2 节)的 URL 地址。如果一个控制点收到
一个或多个可接受的应答,他将转入描述阶段(description phase).
一个控制点发出一个搜索请求时,该请求在 SSDP 头中包含了他愿意等待的时间长度。匹配
的设备将在响应之前随机等待一段时间(原因?),该时间介于 0 和控制点指示的时间之间。如果控制点
在他的搜索时间超时之前没有收到任何应答,他就认为当前网络上没有匹配的设备。
设备没必要等待控制点来搜索他们的服务。他们可以采用向 239.255.255.250:1900 多播地址发
送 SSDP 的 NOTIFY 命令来宣告他们的设备可用性。当控制点获得该 NOTIFY 多播,他们就可以
使用标准的 HTTP GET 命令来向 NOTIFY 消息中提供的 URL 地址发出请求以获得设备的描述文
档。设备必须在他们的服务不可用时发出一个通告信息。
1.1.2、描述(Description)
当控制点定位一个服务后他希望了解更多,因而他将请求描述文档。描述是一个
XML 文档用来描述一个设备,包括:
● 制造商信息,版本,其他。
● 可被设备采用的图标的 URL 地址。
● 嵌入式设备列表。
● 设备提供的服务列表。
想得到关于描述文档的格式的更多信息,请参见文档《Universal Plug and Play
Device Architecture》(《通用即插即用设备架构》)。
控制点采用基于TCP的HTTP来请求描述文档。控制点执行标准的HTTP GET命令(与检索
Web页面类似)。在服务器端,设备运行一个标准的HTTP服务--可以是完全的Web服务器如
Apache也可以是迷你服务器。描述文档中的很多条目都是URL地址。这些条目也使用HTTP/TCP
检索。
1.1.3、控制(Control)
一旦一个控制点发现了一个设备并且检索到他的描述文档,他可能需要控制该设备包含的
一个或多个服务。简单对象访问协议(SOAP:Simple Object Access Protocol)允许一个访
问点查询或改变服务状态表中的元素。SOAP使用基于TCP传输HTTP的POST和M-POST命令。
SOAP使用XML来说明采取的活动。控制点如描述文档里指定的那样为服务创建XML文档并将
其提交给控制URL。控制点能请求服务状态表中的当前值并改变他们。
在服务器端,控制服务器等待控制请求。控制服务器是一个实现了SOAP协议的类似于HTTP
服务器的服务器。一个设备能运行多于一个控制服务器,这取决于设备提供的服务的组合。
1.1.4、事件(Eventing)
一个控制点发现一个设备并检索到他的描述后,他能保持设备提供的服务的状态信息。感
兴趣的控制点为特定服务订阅了从描述文档中发现的设备事件提醒服务URL。一个事件提醒在
任何服务状态改变的时候发送给控制点,即使这次改变是由该控制点产生的。
订阅和退订请求使用HTTP/TCP连接到事件URL,该URL包含在服务的描述文档中。在订阅时,
控制点指定一个事件提醒的URL。事件以HTTP/TCP方式到达为服务注册的URL。事件提醒包含
一个小型的XML文档,该文档描述了实际的事件,如服务状态表的改变。
在服务器端,一个事件服务器等待订阅和退订请求。事件服务器是一个类HTTP服务器的实
现通用事件提醒架构协议(GENA:General Event Notification Architecture)的服务器。
一个设备将可能根据设备提供的服务的组合(情况)必须运行多于一个的事件服务器。
1.1.5、表示(Presentation)
由于设备需要或支持用户交互,在表示阶段一个控制点能下载一个为设备描述用户界面的
HTML文档。这是一个能提供一种控制或状态显示的标准HTML文档。
如检索描述文档一样,检索表示文档的协议也是基于TCP的HTTP协议。控制点使用描述文档
中包含的表示URL来请求表示文档。不是所有设备都拥有表示文档也不是所有控制点能够显示
包含复杂HTML对象如框架,嵌入式Java applets等的表示文档。
http://blog.csdn.net/lancees/article/details/8789678
http://blog.csdn.net/lancees/article/details/8951679