SSDP Server - working version provides SSDP based network discovery, and with a companion web server, may provide other functionalities.
Dependents: X10Svr SSDP_Server
SSDP.h
- Committer:
- WiredHome
- Date:
- 2018-07-03
- Revision:
- 0:f782e7bc66ad
- Child:
- 1:def15d0b2fae
File content as of revision 0:f782e7bc66ad:
// // // #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; };