1个不稳定版本

0.1.0 2024年7月6日

#1112 in 网络编程

MIT/Apache

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