1个不稳定版本
0.1.0 | 2024年7月6日 |
---|
#1112 in 网络编程
28KB
526 行
SSDP
这是SSDP的RFC草案实现,但应与较新的UPnP兼容。
随时欢迎贡献。
计划功能
- 发送
M-SEARCH
请求 - 响应
M-SEARCH
请求 - 存储所有响应
M-SEARCH
请求的服务列表 - 当服务启动时发送ALIVE
- 当服务关闭时发送BYEBYE
- 接受任何顺序的标题(目前只支持预定义顺序的标题)
示例
服务
要启动一个监听并响应M-SEARCH
请求的服务,请执行以下操作
let desc = ServiceDescription {
usn_uri: "uuid:83760048-2d32-4e48-854f-f63a8fa9fd09".to_string(), // TODO get from db
service_type_uri: "AccessTime:Multicast".to_string(),
expiration: 100,
location: "https://127.0.0.1/api/v1/adopt".to_string(), // TODO get a servername from conf
};
let service = Service::new(desc);
service.listen(MulticastAddr::Loopback).await;
客户端
客户端发送一个M-SEARCH
请求并存储所有响应服务的列表。
let log = LogConfig{
syslog_server: None,
syslog_port: None,
syslog_protocol: None,
log_level: Some("trace".to_string()),
};
log.initialize_logger();
let client = Client::default();
client
.discover("uuid:83760048-2d32-4e48-854f-f63a8fa9fd09".to_string(), MulticastAddr::Loopback, "AccessTime:Multicast".to_string())
.await?;
现在您可以使用client.get_services()
方法获取所有响应服务的Vec<ServiceDescription>
。
许可证
这只是一个为另一个项目设置的配置,所以您可以随意使用。因此,您可以自由选择以下选项
贡献
除非您明确表示,否则根据Apache-2.0许可证定义,您提交的任何贡献都应如上所述双重许可,不附加任何额外条款或条件。
依赖关系
~3–11MB
~113K SLoC