SSDP Server - working version provides SSDP based network discovery, and with a companion web server, may provide other functionalities.

Dependents:   X10Svr SSDP_Server

Revision:
0:f782e7bc66ad
Child:
1:def15d0b2fae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SSDP.h	Tue Jul 03 00:16:45 2018 +0000
@@ -0,0 +1,126 @@
+//
+//
+//
+
+#include "mbed.h"
+#include "rtos.h"
+
+
+/// Configuration data for the SSDP server
+///
+typedef struct {
+    char * name;        ///< pointer to the friendly name, storage managed here
+    char * ident;       ///< pointer to a unique identity number, like a mac address
+    char * ipAddr;      ///< pointer to the node IP address
+    int port;           ///< port number of the local server
+} SSDP_Config_T;
+
+
+///
+/// SSDP Server
+/// 
+/// This file documents the SSDP Server, which can be implanted into a node
+/// so that it is discoverable on Ethernet, and in Windows Network Explorer
+/// view.
+///
+/// Many basics are defined in order to satisfy the SSDP discovery process.
+/// - the hosting node has a web server running, which will serve various responses.
+/// - the hosting node shall provide a /setup.xml which satisfies the SSDP requirements.
+/// - depending on the application, many additional files may need to be supported.
+/// 
+/// @code
+///    HTTPServer svr(Server_Port, Server_Root, 15, 30, 20, 50, &pc);
+///    svr.RegisterHandler("/", RootPage);
+///    svr.RegisterHandler("/setup.xml", Setup_xml);
+///    SSDP ssdp("Friendly Node", eth.getMACAddress(), eth.getIPAddress(), Server_Port);
+///    
+///    while (1) {
+///        led4 = !led4;
+///        svr.Poll();     // non-blocking, but also not deterministic
+///        Thread::yield();
+///        if (criteria)
+///           ssdp.SetFriendlyName("New Node Name");
+///    }
+/// @endcode
+///
+class SSDP {
+public:
+    /// Constructor for the SSDP server
+    ///
+    /// @param[in] name is a pointer to a string containing the name.
+    /// @param[in] ident is a pointer to an identity string of this node, e.g. a mac address.
+    /// @param[in] ipAddr is a pointer to an IP Address string of this node.
+    /// @param[in] port is an integer port number for the local web server.
+    ///
+    SSDP(const char * name, const char * ident, const char * ipAddr, int port);
+    
+    /// Constructor for the SSDP server, as an alternate to the parameter version.
+    ///
+    /// @param[in] config is a pointer to configuration structure which contains
+    ///             the individual elements;
+    ///             - pointer to the const char * friendly name 
+    ///             - pointer to the const char * identity
+    ///             - pointer to the const char * IP Address of this node
+    ///             - port number for the web server 
+    ///
+    SSDP(const SSDP_Config_T * config);
+    
+    /// Destructor
+    ///
+    ~SSDP();
+    
+    /// Set the friendly name for this node
+    ///
+    /// @param[in] name is a pointer to a string containing the name.
+    /// @returns true if the name was set (memory was available).
+    ///
+    bool SetFriendlyName(const char * name);
+
+    /// Delete the friendly name that was assigned.
+    ///
+    /// This frees the memory that was previously allocated.
+    ///
+    void DelFriendlyName();
+
+    /// Set the identity for this node
+    ///
+    /// @param[in] ident is a pointer to a string containing the identity.
+    /// @returns true if the name was set (memory was available).
+    ///
+    bool SetIdentity(const char * ident);
+
+    /// Delete the identity that was assigned.
+    ///
+    /// This frees the memory that was previously allocated.
+    ///
+    void DelIdentity();
+
+    /// Set the IP Address for this node
+    ///
+    /// @param[in] ipAddr is a pointer to a string containing the ipAddress.
+    /// @returns true if the IP Address was set (memory was available).
+    ///
+    bool SetIPAddress(const char * ipAddr);
+
+    /// Delete the friendly IP Address that was assigned.
+    ///
+    /// This frees the memory that was previously allocated.
+    ///
+    void DelIPAddress();
+
+    /// Set the Port
+    ///
+    /// @param[in] port is the port number of the local web server.
+    /// @returns true if the port number was set.
+    ///
+    bool SetPort(int port);
+    
+private:
+
+    void StartListener();
+    void SendNotify();
+    
+    SSDP_Config_T _config;       ///< the configuration
+
+    Thread * pThr;
+};
\ No newline at end of file