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:

  1. Add nerves_ssdp_server to your list of dependencies in mix.exs:

    def deps do

     [{:nerves_ssdp_server, "~> 0.2.2"}]

    end

  2. 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

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