Nerves.SSDPServer
Simple Server for the <u>S</u>imple <u>S</u>ervices <u>D</u>iscovery <u>P</u>rotocol
SSDP allows devices on LAN to announce themselves and their services to other devices.
Installation
If available in Hex, the package can be installed as:
Add nerves_ssdp_server to your list of dependencies in
mix.exs:def deps do
[{:nerves_ssdp_server, "~> 0.2.2"}]end
Ensure nerves_ssdp_server is started before your application:
def application do
[applications: [:nerves_ssdp_server]]end
Usage
In SSDP, every service needs to define a USN (unique service name), and a ST (service type). That's the minimum required to publish a service. With that info, it's as simple as this:
alias Nerves.SSDPServer
SSDPServer.publish "my_unique_service_name", "my-service-type"Publishing custom fields
Other parameters you might specify for the second parameter to publish are included as fields of the published service. For instance, you can do..
alias Nerves.SSDPServer
@ssdp_fields [
location: "http://localhost:3000/myservice.json",
server: "MyServerName",
"cache-control": "max-age=1800"
]
SSDPServer.publish "my-service-name", "my-service-type", @ssdp_fields
You can call publish to publish multiple services, each with a unique USN, but you can only publish each USN once, as per the SSDP spec.
The nerves-project-org:service:cell:1 service type
- LOCATION if present, specifies a URL to grab a cell description
References
Here is are some links with background information about SSDP.
http://www.w3.org/TR/discovery-api/#simple-service-discovery-protocol-ssdphttp://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.0-20080424.pdf