UPNP

子车成和
2023-12-01

upnp-inspector - Python UPnP framework analyser

 

UPnP协议即通用即插即用英文是Universal Plug and Play,缩写为UPnP。UPnP规范基于TCP/IP协议和针对设备彼此间通讯而制订的新的Internet协议

UPnP 的应用范围非常大,以致足够可以实现许多现成的、新的及令人兴奋的方案,包括家庭自动化、打印图片处理音频 / 视频娱乐、厨房设备、汽车网络和公共集会场所的类似网络。它可以充分发挥 TCP/IP 和网络技术的功能,不但能对类似网络进行无缝连接,而且还能够控制网络设备及在它们之间传输信息。在 UPnP 架构中没有设备驱动程序,取而代之的是普通协议。

 

服务

设备执行用户请求的控制过程,可划分成一个个很小的阶段或单位,每个单位就称为一个服务。每一个服务,对外都表现为具体的行为和模式,而行为和模式又可以用状态和变量值进行描述。

其它设备服务,也是用这样思路来描述和定义的,一个设备也可以被定义多个服务。不论是设备的定义信息和服务的描述信息,都保存在一个XML文件中,这个文件也是UPnP协议构成的一部分。当设备建立和使用服务的时候,XML文件可以与它们进行关联。

XML文件中还有一个很关键的“状态表”,状态表可进一步分为“服务状态表”和“事件状态表”。整个UPnP设备运 行的全过程内,状态表贯穿始终,当设备状态改变的时候,例如发生参数变化或状态刷新的时候,立即就在“状态表”中反映出来。如控制服务器在接收到设置时间 的行为请求时,就立即执行请求(对时操作),并给出响应,同时更新状态表中的有关数据。相应地,事件服务器负责向对此事件感兴趣的设备公布所发生的状态改 变。

控制指针

在UPnP网络中,用户请求设备执行的控制是通过控制指针实现的,控制指针首先是一个有能力控制别的设备的控制者,还要具有在网络中 “发现”控制目标的能力。在发现(控制目标)之后,控制指针应当:
①取得设备的描述信息并得到所关联的服务列表。
②取得相关服务的描述。
③调用控制服务行为。
④确定服务的事件 “源”,不论何时,只要服务状态发生改变,事件服务器会立即向控制指针发送一个事件信息。
 

工作过程

UPnP在控制指针和被控制设备之间提供通讯功能。而网络介质、TCP/IP协议、HTTP仅提供基本的连接和IP地址分配。整个工作过程需要处理六个方面的内容,即设备寻址、发现设备、对设备的描述、设备控制、设备事件、设备表达。

UPnP的工作流程:设备加入网络后通过设备寻址就 可自动获得IP地址,通过设备发现,控制点就可知道网络上存在哪些设备,通过设备描述控制点就可知道设备详细信息以及设备提供哪些服务,通过设备控制控制 点可以使用设备的服务,通过设备事件设备就可以将其状态变化及时告诉给感兴趣的控制点,通过设备表达控制点可以用浏览器察看设备状态和控制设备。通过上述 的六个方面,UPnP设备可以做到在“零配置”的前提下提供了联网设备之间的自动发现、自动声明、“直接”信息交换和互操作等功能,真正实现“设备即插即用”。

UPnP所用到的主要协议还有:SSDP(Simple Service Discovery Protocol 简单服务发现协议)、 GENA(Generic Event Notification Architecture 通用事件通知结构)、SOAP(Simple Object Access Protocol 简单对象访问协议)、XML(Extensible Markup Language 可扩张 标记语言)。采用IP协议来保证UPnP独立与 网络传输的物理介质,SOAP协议来保证UPnP设备具有互操作能力,XML来对设备和服务进行统一的描述,HTTP协议来进行UPnP设备的信息交互。采用这些现存的、广泛应用的协议能减少开发UPnP设备的工作量,使UPnP设备更好地融入现有网络。
 
 

我们在做DLNA开发的时候都是用现有的upnp开源框架,upnp官网地址是:

http://upnp.org/

相关SDK地址为http://upnp.org/sdcps-and-certification/resources/sdks/

 

官方教程:
https://wiki.gnome.org/GUPnP/
GUPnP is an elegant, object-oriented open source framework for creating UPnP devices and control points, written in C using GObject and libsoup.
 

The GUPnP framework consists of the following libraries:

  • GSSDP implements resource discovery and announcement over SSDP.
  • GUPnP implements the UPnP specification: resource announcement and discovery, description, control, event notification, and presentation (GUPnP includes basic web server functionality through libsoup). GUPnP does not include helpers for construction or control of specific standardized resources (e.g. MediaServer); this is left for higher level libraries utilizing the GUPnP framework.

  • GUPnP-AV is a collection of helpers for building AV (audio/video) applications using GUPnP.
  • GUPnP-DLNA is a small utility library that aims to ease the DLNA-related tasks such as media profile guessing, transcoding to a given profile, etc.
 
 

Documentation

 

 

vala(百科)
Vala是一种新的编程语言,其目标是为GNOME开发者提供现代化的编程语言功能,同时没有额外的运行时要求,并且相对于C语言编写的应用程序和库,无 需使用不同的ABI。Vala是基于GNOME的GObject系统,提供了那种你期望的类功能。与Scala一样,在语言级别上,它具有与Java Beans的get*()和set*()等同的属性,但是,对于属性更改通知和监听器(listener),它也能够提供了语言级别上的支持。它不具备很 强的XML处理能力,只是一个迷你型的解析器,不过看起来它的确具有很好的Unicode功能( 字符串 为UTF-8,string.getch()可返回16位的unichar字符。)在功能级别上,Vala与Java最大的不同之处应该是对象回收 (de-allocation)的引用计数系统(reference-counting),相对于Java的GC,这一系统能够提供更多确定的实时行为, 不过也为某些编程错误打开了一扇窗户。在这个时代,Vala的另一个古怪之处在于,对于阵列访问不进行边界检查,所以它比Java对规则的要求更为严格 (不过可以推测,比C语言要宽松很多)。

 

 
https://wiki.gnome.org/LibSoup

libsoup

 

About

libsoup is an HTTP client/server library for GNOME. It uses GObjects and the glib main loop, to integrate well with GNOME applications, and also has a synchronous API, for use in threaded applications.

Features include:

  • Both asynchronous (GMainLoop and callback-based) and synchronous APIs

  • Automatically caches connections
  • SSL Support using GnuTLS
  • Proxy support, including authentication and SSL tunneling
  • Client support for Digest, NTLM, and Basic authentication
  • Server support for Digest and Basic authentication
  • Client and server support for XML-RPC
 
 
 类似资料:

相关阅读

相关文章

相关问答