2个不稳定版本
0.2.0 | 2022年7月7日 |
---|---|
0.1.0 | 2020年2月18日 |
983 in 网络编程
160KB
3K SLoC
Crate upnp-rs
一个提供基本通用即插即用(UPnP)协议实现的Rust crate。
实现了UPnP设备架构(UDA)的核心协议,特别是控制点用于搜索设备和设备用于通知设备和服务可用性的发现协议。
UPnP技术允许设备无缝连接,并简化家庭和企业环境中的网络实现 — 开放连接基金会。
用法
将以下内容添加到您的Cargo.toml
;目前此crate没有可选功能。
upnp-rs = "0.2"
API
主要客户端接口是提供search
和notify
功能的discovery
模块。随着时间的推移,将完成description
模块,用于解析和生成设备描述消息。以下图表显示了库的基本结构,其中两个API模块分别依赖于HTTPMU/HTTPU和SOAP的实现。
,--------, discover ,--------, advertise ,--------,
| |--------->| disco. |<------------------| |
| Client | '--------' | Server |
| API | understand : ,--------, describe | API |
| |------------------>| descr. |<---------| |
'--------' : '--------' '--------'
: :
: V
: ,--------,
: | SOAP |
: '--------'
: :
V :
,--------, :
| HTTPMU | :
'--------' :
: :
V V TCP/UDP
,---------------------------------------------------,
示例
use upnp_rs::SpecVersion;
use upnp_rs::ssdp::search::*;
let mut options = Options::default_for(SpecVersion::V10);
options.search_target = SearchTarget::RootDevices;
match search_once(options) {
Ok(responses) => {
println!("search returned {} results.", responses.len());
for (index, response) in responses.iter().enumerate() {
println!("{}: {:#?}", index, response);
}
}
Err(error) => {
println!("search failed with error: {:#?}", error);
}
}
命令行
可以使用命令行工具upnp
使用SSDP API执行基本操作。这些主要用于测试,但搜索命令可以用于通用发现。
命令的一般形式是network-options command command-options,如下所示。
upnp 0.2.0
UPnP simple qery/discovery tool.
USAGE:
upnp [FLAGS] [OPTIONS] <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-6, --use-ipv6 Use IPv6 instead of the default v4
--version Prints version information
-v, --verbose The level of logging to perform, from off to trace; the default is off
OPTIONS:
--interface <interface> The network interface name to bind to; the default is all
-V, --spec-version <spec-version> The UPnP version to use, 1.0, 1.1, or 2.0; the default is 1.0
SUBCOMMANDS:
help Prints this message or the help of the given subcommand(s)
listen Listen for device notifications
search Issue a multicast search to find devices
interface
这是本地网络接口的名称,例如en0
。
$ upnp search --help
upnp-search 0.2.0
Issue a multicast search to find devices
USAGE:
upnp search [OPTIONS]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-d, --domain <domain> A domain to use in constructing device and service type targets; the default
is the UPnP domain
-w, --max-wait <max-wait> The maximum wait time, in seconds, for devices to respond to multicast; the
default is 2
-s, --search-target <search-target> The UPnP search target (all, root, device:{id}, device-type:{id}, service-
type:{id}); the default is root
变更
版本0.2.0
- 重写了错误处理,以拥有更多离散的错误和更好的报告。
- 从
log
和env_logger
迁移到tracing
和tracing_subscriber
。 - 升级了依赖项,特别是报告存在漏洞的
pnet
。 - 将所有协议常量移动到
syntax
模块。 - 使用crate
os_version
进行平台检测。 - 添加了构建文件并调整了工作流程以获得干净的Windows构建。
版本0.1.0
- 能够发出多播非缓存搜索命令,并带有解析结果。
- 发送多播设备通知的能力。
- 使用命令行工具
upnp
发出测试命令。
待办事项
- 完成搜索结果的解析。
- 支持监听通知。
- 支持获取设备详情。4. 支持发送通知。
依赖项
~8–22MB
~332K SLoC