X10 Server - IOT device to leverage a collection of old X10 devices for home automation and lighting control.

Dependencies:   IniManager mbed HTTPClient SWUpdate mbed-rtos Watchdog X10 SW_HTTPServer SW_String EthernetInterface TimeInterface SSDP

X10 Server

See the X10 Server Nodebook page

Committer:
WiredHome
Date:
Wed Feb 27 18:24:32 2019 +0000
Revision:
7:16129d213e6a
Parent:
4:5da66fab599c
Child:
8:a45fe77efcc5
An improved X10 Server, now with SSDP discovery and with an integrated Web Server test interface.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 0:de1dfa2ab813 1
WiredHome 0:de1dfa2ab813 2 #include "mbed.h"
WiredHome 0:de1dfa2ab813 3
WiredHome 0:de1dfa2ab813 4 #include "EthernetInterface.h"
WiredHome 7:16129d213e6a 5 #include "SW_String.h"
WiredHome 7:16129d213e6a 6 #include "X10.h"
WiredHome 0:de1dfa2ab813 7 #include "WebPages.h"
WiredHome 7:16129d213e6a 8 #include "IniManager.h" // v20
WiredHome 7:16129d213e6a 9
WiredHome 7:16129d213e6a 10 extern INI ini;
WiredHome 7:16129d213e6a 11 extern X10Interface cm17a;
WiredHome 0:de1dfa2ab813 12
WiredHome 0:de1dfa2ab813 13 extern EthernetInterface eth;
WiredHome 0:de1dfa2ab813 14 extern const char * BUILD_DATE;
WiredHome 0:de1dfa2ab813 15 extern const char * PROG_NAME;
WiredHome 0:de1dfa2ab813 16 extern const char * My_Name;
WiredHome 0:de1dfa2ab813 17 extern const char * My_SerialNum;
WiredHome 4:5da66fab599c 18 extern int Server_Port;
WiredHome 0:de1dfa2ab813 19
WiredHome 7:16129d213e6a 20 extern bool swUpdateCheck;
WiredHome 0:de1dfa2ab813 21
WiredHome 0:de1dfa2ab813 22 // ##########################################
WiredHome 0:de1dfa2ab813 23 // This test version controls the LEDs
WiredHome 0:de1dfa2ab813 24 //
WiredHome 0:de1dfa2ab813 25 DigitalOut leds[4] = { LED1, LED2, LED3, LED4 };
WiredHome 0:de1dfa2ab813 26
WiredHome 0:de1dfa2ab813 27
WiredHome 0:de1dfa2ab813 28 static const char hdrTypeHTML_NoCache[] =
WiredHome 0:de1dfa2ab813 29 "Content-Type: text/html\r\n"
WiredHome 0:de1dfa2ab813 30 "Cache-Control: no-cache\r\n";
WiredHome 0:de1dfa2ab813 31
WiredHome 0:de1dfa2ab813 32
WiredHome 0:de1dfa2ab813 33
WiredHome 0:de1dfa2ab813 34
WiredHome 0:de1dfa2ab813 35 // The /setup.xml file
WiredHome 0:de1dfa2ab813 36 //
WiredHome 0:de1dfa2ab813 37 // sprintf(buf, SETUP_TEMPLATE, "FriendlyName", "udn_hexstring", "serialNum", "ip.ad.dr", portNum);
WiredHome 2:ca5d12560ff7 38 static const char SETUP_TEMPLATE[] =
WiredHome 0:de1dfa2ab813 39 "<?xml version=\"1.0\"?>\n"
WiredHome 0:de1dfa2ab813 40 "<root xmlns=\"urn:Belkin:device-1-0\">\n"
WiredHome 0:de1dfa2ab813 41 " <specVersion>\n"
WiredHome 0:de1dfa2ab813 42 " <major>1</major>\n"
WiredHome 0:de1dfa2ab813 43 " <minor>0</minor>\n"
WiredHome 0:de1dfa2ab813 44 " </specVersion>\n"
WiredHome 0:de1dfa2ab813 45 " <device>\n"
WiredHome 0:de1dfa2ab813 46 " <deviceType>urn:Belkin:device:controllee:1</deviceType>\n"
WiredHome 0:de1dfa2ab813 47 " <friendlyName>%s</friendlyName>\n"
WiredHome 0:de1dfa2ab813 48 " <manufacturer>Belkin International Inc.</manufacturer>\n" ///< must be "Belkin..." for Alexa discovery
WiredHome 0:de1dfa2ab813 49 " <manufacturerURL>http://www.smart-family.net</manufacturerURL>\n" ///<
WiredHome 0:de1dfa2ab813 50 " <modelDescription>Special thing</modelDescription>\n" ///<
WiredHome 0:de1dfa2ab813 51 " <modelName>Smart Node</modelName>\n" ///<
WiredHome 0:de1dfa2ab813 52 " <modelNumber>1.0.0</modelNumber>\n"
WiredHome 7:16129d213e6a 53 #if 1
WiredHome 0:de1dfa2ab813 54 " <modelURL>http://www.smart-family.net</modelURL>\n" ///< This causes it to fail to send completely
WiredHome 0:de1dfa2ab813 55 #endif
WiredHome 0:de1dfa2ab813 56 " <UDN>uuid:Socket-1_0-%s</UDN>\n"
WiredHome 0:de1dfa2ab813 57 " <serialNumber>%s</serialNumber>\n"
WiredHome 0:de1dfa2ab813 58 " <iconList>\n"
WiredHome 0:de1dfa2ab813 59 " <mimetype>jpg</mimetype>\n"
WiredHome 0:de1dfa2ab813 60 " <width>100</width>\n"
WiredHome 0:de1dfa2ab813 61 " <height>100</height>\n"
WiredHome 0:de1dfa2ab813 62 " <depth>100</depth>\n"
WiredHome 0:de1dfa2ab813 63 " <url>icon.jpg</url>\n"
WiredHome 0:de1dfa2ab813 64 " </iconList>\n"
WiredHome 0:de1dfa2ab813 65 " <presentationURL>http://%s:%d</presentationURL>\n"
WiredHome 0:de1dfa2ab813 66 #if 0
WiredHome 0:de1dfa2ab813 67 " <serviceList>\n"
WiredHome 0:de1dfa2ab813 68 " <service>\n"
WiredHome 0:de1dfa2ab813 69 " <serviceType>urn:Belkin:service:WiFiSetup:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 70 " <serviceId>urn:Belkin:serviceId:WiFiSetup1</serviceId>\n"
WiredHome 0:de1dfa2ab813 71 " <controlURL>/upnp/control/WiFiSetup1</controlURL>\n"
WiredHome 0:de1dfa2ab813 72 " <eventSubURL>/upnp/event/WiFiSetup1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 73 " <SCPDURL>/setupservice.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 74 " </service>\n"
WiredHome 0:de1dfa2ab813 75 " <service>\n"
WiredHome 0:de1dfa2ab813 76 " <serviceType>urn:Belkin:service:timesync:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 77 " <serviceId>urn:Belkin:serviceId:timesync1</serviceId>\n"
WiredHome 0:de1dfa2ab813 78 " <controlURL>/upnp/control/timesync1</controlURL>\n"
WiredHome 0:de1dfa2ab813 79 " <eventSubURL>/upnp/event/timesync1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 80 " <SCPDURL>/timesyncservice.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 81 " </service>\n"
WiredHome 0:de1dfa2ab813 82 " <service>\n"
WiredHome 0:de1dfa2ab813 83 " <serviceType>urn:Belkin:service:basicevent:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 84 " <serviceId>urn:Belkin:serviceId:basicevent1</serviceId>\n"
WiredHome 0:de1dfa2ab813 85 " <controlURL>/upnp/control/basicevent1</controlURL>\n"
WiredHome 0:de1dfa2ab813 86 " <eventSubURL>/upnp/event/basicevent1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 87 " <SCPDURL>/eventservice.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 88 " </service>\n"
WiredHome 0:de1dfa2ab813 89 " <service>\n"
WiredHome 0:de1dfa2ab813 90 " <serviceType>urn:Belkin:service:firmwareupdate:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 91 " <serviceId>urn:Belkin:serviceId:firmwareupdate1</serviceId>\n"
WiredHome 0:de1dfa2ab813 92 " <controlURL>/upnp/control/firmwareupdate1</controlURL>\n"
WiredHome 0:de1dfa2ab813 93 " <eventSubURL>/upnp/event/firmwareupdate1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 94 " <SCPDURL>/firmwareupdate.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 95 " </service>\n"
WiredHome 0:de1dfa2ab813 96 " <service>\n"
WiredHome 0:de1dfa2ab813 97 " <serviceType>urn:Belkin:service:rules:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 98 " <serviceId>urn:Belkin:serviceId:rules1</serviceId>\n"
WiredHome 0:de1dfa2ab813 99 " <controlURL>/upnp/control/rules1</controlURL>\n"
WiredHome 0:de1dfa2ab813 100 " <eventSubURL>/upnp/event/rules1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 101 " <SCPDURL>/rulesservice.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 102 " </service>\n"
WiredHome 0:de1dfa2ab813 103 " <service>\n"
WiredHome 0:de1dfa2ab813 104 " <serviceType>urn:Belkin:service:metainfo:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 105 " <serviceId>urn:Belkin:serviceId:metainfo1</serviceId>\n"
WiredHome 0:de1dfa2ab813 106 " <controlURL>/upnp/control/metainfo1</controlURL>\n"
WiredHome 0:de1dfa2ab813 107 " <eventSubURL>/upnp/event/metainfo1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 108 " <SCPDURL>/metainfoservice.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 109 " </service>\n"
WiredHome 0:de1dfa2ab813 110 " <service>\n"
WiredHome 0:de1dfa2ab813 111 " <serviceType>urn:Belkin:service:remoteaccess:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 112 " <serviceId>urn:Belkin:serviceId:remoteaccess1</serviceId>\n"
WiredHome 0:de1dfa2ab813 113 " <controlURL>/upnp/control/remoteaccess1</controlURL>\n"
WiredHome 0:de1dfa2ab813 114 " <eventSubURL>/upnp/event/remoteaccess1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 115 " <SCPDURL>/remoteaccess.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 116 " </service>\n"
WiredHome 0:de1dfa2ab813 117 " <service>\n"
WiredHome 0:de1dfa2ab813 118 " <serviceType>urn:Belkin:service:deviceinfo:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 119 " <serviceId>urn:Belkin:serviceId:deviceinfo1</serviceId>\n"
WiredHome 0:de1dfa2ab813 120 " <controlURL>/upnp/control/deviceinfo1</controlURL>\n"
WiredHome 0:de1dfa2ab813 121 " <eventSubURL>/upnp/event/deviceinfo1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 122 " <SCPDURL>/deviceinfoservice.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 123 " </service>\n"
WiredHome 0:de1dfa2ab813 124 " <service>\n"
WiredHome 0:de1dfa2ab813 125 " <serviceType>urn:Belkin:service:smartsetup:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 126 " <serviceId>urn:Belkin:serviceId:smartsetup1</serviceId>\n"
WiredHome 0:de1dfa2ab813 127 " <controlURL>/upnp/control/smartsetup1</controlURL>\n"
WiredHome 0:de1dfa2ab813 128 " <eventSubURL>/upnp/event/smartsetup1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 129 " <SCPDURL>/smartsetup.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 130 " </service>\n"
WiredHome 0:de1dfa2ab813 131 " <service>\n"
WiredHome 0:de1dfa2ab813 132 " <serviceType>urn:Belkin:service:manufacture:1</serviceType>\n"
WiredHome 0:de1dfa2ab813 133 " <serviceId>urn:Belkin:serviceId:manufacture1</serviceId>\n"
WiredHome 0:de1dfa2ab813 134 " <controlURL>/upnp/control/manufacture1</controlURL>\n"
WiredHome 0:de1dfa2ab813 135 " <eventSubURL>/upnp/event/manufacture1</eventSubURL>\n"
WiredHome 0:de1dfa2ab813 136 " <SCPDURL>/manufacture.xml</SCPDURL>\n"
WiredHome 0:de1dfa2ab813 137 " </service>\n"
WiredHome 0:de1dfa2ab813 138 " </serviceList>\n"
WiredHome 0:de1dfa2ab813 139 #endif
WiredHome 0:de1dfa2ab813 140 " </device>\n"
WiredHome 0:de1dfa2ab813 141 "</root>\n";
WiredHome 0:de1dfa2ab813 142
WiredHome 0:de1dfa2ab813 143
WiredHome 0:de1dfa2ab813 144 HTTPServer::CallBackResults Setup_xml(HTTPServer *svr, HTTPServer::CallBackType type, char * path,
WiredHome 0:de1dfa2ab813 145 const HTTPServer::namevalue *queryParams, int queryParamCount)
WiredHome 0:de1dfa2ab813 146 {
WiredHome 2:ca5d12560ff7 147 char BigBuffer[sizeof(SETUP_TEMPLATE) + 150];
WiredHome 0:de1dfa2ab813 148 HTTPServer::CallBackResults ret = HTTPServer::ACCEPT_ERROR;
WiredHome 0:de1dfa2ab813 149 switch (type) {
WiredHome 0:de1dfa2ab813 150 case HTTPServer::SEND_PAGE:
WiredHome 0:de1dfa2ab813 151 svr->header(HTTPServer::OK, "OK", hdrTypeHTML_NoCache);
WiredHome 0:de1dfa2ab813 152 sprintf(BigBuffer, SETUP_TEMPLATE,
WiredHome 0:de1dfa2ab813 153 My_Name, eth.getMACAddress(), My_SerialNum,
WiredHome 0:de1dfa2ab813 154 eth.getIPAddress(), Server_Port);
WiredHome 0:de1dfa2ab813 155 svr->send(BigBuffer);
WiredHome 0:de1dfa2ab813 156 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 0:de1dfa2ab813 157 break;
WiredHome 0:de1dfa2ab813 158 case HTTPServer::CONTENT_LENGTH_REQUEST:
WiredHome 0:de1dfa2ab813 159 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 0:de1dfa2ab813 160 break;
WiredHome 0:de1dfa2ab813 161 case HTTPServer::DATA_TRANSFER:
WiredHome 0:de1dfa2ab813 162 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 0:de1dfa2ab813 163 break;
WiredHome 0:de1dfa2ab813 164 default:
WiredHome 0:de1dfa2ab813 165 ret = HTTPServer::ACCEPT_ERROR;
WiredHome 0:de1dfa2ab813 166 break;
WiredHome 0:de1dfa2ab813 167 }
WiredHome 0:de1dfa2ab813 168 return ret;
WiredHome 0:de1dfa2ab813 169 }
WiredHome 0:de1dfa2ab813 170
WiredHome 0:de1dfa2ab813 171
WiredHome 0:de1dfa2ab813 172
WiredHome 0:de1dfa2ab813 173 HTTPServer::CallBackResults RootPage(HTTPServer *svr, HTTPServer::CallBackType type, char * path,
WiredHome 0:de1dfa2ab813 174 const HTTPServer::namevalue *queryParams, int queryParamCount)
WiredHome 0:de1dfa2ab813 175 {
WiredHome 7:16129d213e6a 176 char buf[100];
WiredHome 7:16129d213e6a 177 int count;
WiredHome 0:de1dfa2ab813 178 HTTPServer::CallBackResults ret = HTTPServer::ACCEPT_ERROR;
WiredHome 0:de1dfa2ab813 179
WiredHome 0:de1dfa2ab813 180 switch (type) {
WiredHome 0:de1dfa2ab813 181 case HTTPServer::SEND_PAGE:
WiredHome 7:16129d213e6a 182 if (0 == strcmp(svr->GetParameter("SWUpdate"),"CheckNow")) {
WiredHome 7:16129d213e6a 183 swUpdateCheck = true;
WiredHome 7:16129d213e6a 184 svr->header(HTTPServer::Found, "Found", "Location: /\r\n");
WiredHome 7:16129d213e6a 185 svr->send("\r\n");
WiredHome 7:16129d213e6a 186 break;
WiredHome 7:16129d213e6a 187 }
WiredHome 7:16129d213e6a 188 count = svr->GetParameterCount();
WiredHome 7:16129d213e6a 189 printf("Data Transfer: %d parameters\r\n", count);
WiredHome 7:16129d213e6a 190 if (count) {
WiredHome 7:16129d213e6a 191 for (int i=0; i<count; i++) {
WiredHome 7:16129d213e6a 192 const HTTPServer::namevalue * nv = svr->GetParameter(i);
WiredHome 7:16129d213e6a 193 printf(" %d: %s => %s\r\n", i, nv->name, nv->value);
WiredHome 7:16129d213e6a 194 }
WiredHome 7:16129d213e6a 195 const char * p = svr->GetParameter("House");
WiredHome 7:16129d213e6a 196 if (p && strlen(p) == 1) {
WiredHome 7:16129d213e6a 197 char cmdBuf[7]; // "HUU +6"
WiredHome 7:16129d213e6a 198 strcpy_s(cmdBuf, sizeof(cmdBuf), p);
WiredHome 7:16129d213e6a 199 p = svr->GetParameter("Unit");
WiredHome 7:16129d213e6a 200 if (p && strlen(p) >= 1 && strlen(p) <= 2) {
WiredHome 7:16129d213e6a 201 strcat_s(cmdBuf, sizeof(cmdBuf), p);
WiredHome 7:16129d213e6a 202 p = svr->GetParameter("Cmd");
WiredHome 7:16129d213e6a 203 if (p && strlen(p) >= 1 && strlen(p) <= 2) {
WiredHome 7:16129d213e6a 204 strcat_s(cmdBuf, sizeof(cmdBuf), " ");
WiredHome 7:16129d213e6a 205 strcat_s(cmdBuf, sizeof(cmdBuf), p);
WiredHome 7:16129d213e6a 206 printf("Web Command: '%s'\r\n", cmdBuf);
WiredHome 7:16129d213e6a 207 cm17a.ParseCommand(cmdBuf);
WiredHome 7:16129d213e6a 208 svr->header(HTTPServer::Found, "Found", "Location: /\r\n");
WiredHome 7:16129d213e6a 209 svr->send("\r\n");
WiredHome 7:16129d213e6a 210 break;
WiredHome 7:16129d213e6a 211 }
WiredHome 7:16129d213e6a 212 }
WiredHome 7:16129d213e6a 213 }
WiredHome 7:16129d213e6a 214 }
WiredHome 7:16129d213e6a 215
WiredHome 7:16129d213e6a 216 svr->header(HTTPServer::OK, "OK", "Content-Type: text/html\r\n");
WiredHome 7:16129d213e6a 217 svr->send("<!DOCTYPE html>\r\n<html><head><title>X10 Server Info</title></head>\r\n");
WiredHome 7:16129d213e6a 218 svr->send("<body>\r\n");
WiredHome 7:16129d213e6a 219 svr->send("<h1>X10 Server Info</h1>\r\n");
WiredHome 7:16129d213e6a 220 svr->send("<blockquote>\r\n");
WiredHome 7:16129d213e6a 221 svr->send("<table border='1'>\r\n");
WiredHome 7:16129d213e6a 222 svr->send("<tr><th><h2>Command</h2></th></tr>\r\n");
WiredHome 7:16129d213e6a 223 svr->send("<tr><td>\r\n");
WiredHome 7:16129d213e6a 224 svr->send("<form method='get'>\r\n");
WiredHome 7:16129d213e6a 225 svr->send("<table border='1'><tr><th>House</th><th>Unit</th><th>Cmd</th><th>&nbsp;</th></tr>\r\n");
WiredHome 7:16129d213e6a 226 svr->send("<tr><td align='center'><select name='House'>\r\n");
WiredHome 7:16129d213e6a 227 for (int i = 'A'; i <= 'P'; i++) {
WiredHome 7:16129d213e6a 228 snprintf(buf, 100, "<option value='%c'>%c</option>\r\n", i, i);
WiredHome 7:16129d213e6a 229 svr->send(buf);
WiredHome 7:16129d213e6a 230 }
WiredHome 7:16129d213e6a 231 svr->send("</select></td>\r\n");
WiredHome 7:16129d213e6a 232 svr->send("<td><select name='Unit'>\r\n");
WiredHome 7:16129d213e6a 233 for (int i = 1; i <= 16; i++) {
WiredHome 7:16129d213e6a 234 snprintf(buf, 100, "<option value='%d'>%d</option>\r\n", i, i);
WiredHome 7:16129d213e6a 235 svr->send(buf);
WiredHome 7:16129d213e6a 236 }
WiredHome 7:16129d213e6a 237 svr->send("</select></td>\r\n");
WiredHome 7:16129d213e6a 238
WiredHome 7:16129d213e6a 239 svr->send("<td><select name='Cmd'>\r\n");
WiredHome 7:16129d213e6a 240 for (int i = -6; i <= 7; i++) {
WiredHome 7:16129d213e6a 241 if (i < 0)
WiredHome 7:16129d213e6a 242 snprintf(buf, 100, "<option value='%+d'>%+d</option>\r\n", i, i);
WiredHome 7:16129d213e6a 243 else if (i == 0)
WiredHome 7:16129d213e6a 244 snprintf(buf, 100, "<option value='%d' selected>%d</option>\r\n", i, i);
WiredHome 7:16129d213e6a 245 else if (i == 1)
WiredHome 7:16129d213e6a 246 snprintf(buf, 100, "<option value='%d'>%d</option>\r\n", i, i);
WiredHome 7:16129d213e6a 247 else // if (i > 1)
WiredHome 7:16129d213e6a 248 snprintf(buf, 100, "<option value='%+d'>%+d</option>\r\n", i-1, i-1);
WiredHome 7:16129d213e6a 249 svr->send(buf);
WiredHome 7:16129d213e6a 250 }
WiredHome 7:16129d213e6a 251 svr->send("</select></td>\r\n");
WiredHome 7:16129d213e6a 252
WiredHome 7:16129d213e6a 253 svr->send("<td><input type='Submit' value='Send'></td>\r\n");
WiredHome 7:16129d213e6a 254 svr->send("</tr></table>\r\n");
WiredHome 7:16129d213e6a 255 svr->send("</form>\r\n");
WiredHome 7:16129d213e6a 256 svr->send("</td></tr></table>\r\n");
WiredHome 7:16129d213e6a 257 svr->send("<br/><br/><a href='/info'>info Page</a> | <a href='/setup.xml'>setup.xml</a>\r\n");
WiredHome 7:16129d213e6a 258 svr->send("</blockquote>\r\n");
WiredHome 7:16129d213e6a 259 svr->send("X10 Server, Copyright &copy; 2019 by Smartware Computing, all rights reserved.");
WiredHome 7:16129d213e6a 260 svr->send("</body></html>");
WiredHome 0:de1dfa2ab813 261 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 0:de1dfa2ab813 262 break;
WiredHome 0:de1dfa2ab813 263 case HTTPServer::CONTENT_LENGTH_REQUEST:
WiredHome 0:de1dfa2ab813 264 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 0:de1dfa2ab813 265 break;
WiredHome 0:de1dfa2ab813 266 case HTTPServer::DATA_TRANSFER:
WiredHome 0:de1dfa2ab813 267 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 0:de1dfa2ab813 268 break;
WiredHome 0:de1dfa2ab813 269 default:
WiredHome 0:de1dfa2ab813 270 ret = HTTPServer::ACCEPT_ERROR;
WiredHome 0:de1dfa2ab813 271 break;
WiredHome 0:de1dfa2ab813 272 }
WiredHome 0:de1dfa2ab813 273 return ret;
WiredHome 0:de1dfa2ab813 274 }
WiredHome 7:16129d213e6a 275
WiredHome 7:16129d213e6a 276
WiredHome 7:16129d213e6a 277 HTTPServer::CallBackResults InfoPage(HTTPServer *svr, HTTPServer::CallBackType type, char * path,
WiredHome 7:16129d213e6a 278 const HTTPServer::namevalue *queryParams, int queryParamCount)
WiredHome 7:16129d213e6a 279 {
WiredHome 7:16129d213e6a 280 char lineBuf[60];
WiredHome 7:16129d213e6a 281 char buf[4000] = "";
WiredHome 7:16129d213e6a 282 HTTPServer::CallBackResults ret = HTTPServer::ACCEPT_ERROR;
WiredHome 7:16129d213e6a 283 FILE * fh;
WiredHome 7:16129d213e6a 284
WiredHome 7:16129d213e6a 285 switch (type) {
WiredHome 7:16129d213e6a 286 case HTTPServer::SEND_PAGE:
WiredHome 7:16129d213e6a 287 svr->header(HTTPServer::OK, "OK", "Content-Type: text/html\r\n");
WiredHome 7:16129d213e6a 288 strcpy_s(buf, sizeof(buf), "<!DOCTYPE html>\r\n<html><head><title>X10 Server Info</title></head>\r\n");
WiredHome 7:16129d213e6a 289 strcat_s(buf, sizeof(buf), "<body>\r\n");
WiredHome 7:16129d213e6a 290 strcat_s(buf, sizeof(buf), "<h1>X10 Server Info</h1>\r\n");
WiredHome 7:16129d213e6a 291 strcat_s(buf, sizeof(buf), "<table border='1' width='100%'>\r\n");
WiredHome 7:16129d213e6a 292 strcat_s(buf, sizeof(buf), "<tr><th>Configuration</th><th>Software</th></tr>\r\n");
WiredHome 7:16129d213e6a 293 strcat_s(buf, sizeof(buf), "<tr><td valign='top' width='50%'><pre>\r\n");
WiredHome 7:16129d213e6a 294 fh = fopen("/local/X10svr.ini", "rt");
WiredHome 7:16129d213e6a 295 if (fh) {
WiredHome 7:16129d213e6a 296 char fileBuf[60];
WiredHome 7:16129d213e6a 297 while(fgets(fileBuf, sizeof(fileBuf), fh)) {
WiredHome 7:16129d213e6a 298 strcat_s(buf, sizeof(buf), fileBuf);
WiredHome 7:16129d213e6a 299 }
WiredHome 7:16129d213e6a 300 fclose(fh);
WiredHome 7:16129d213e6a 301 }
WiredHome 7:16129d213e6a 302 strcat_s(buf, sizeof(buf), "</pre>\r\n");
WiredHome 7:16129d213e6a 303 strcat_s(buf, sizeof(buf), "</td>\r\n");
WiredHome 7:16129d213e6a 304 strcat_s(buf, sizeof(buf), "<td valign='top' width='50%'><pre>\r\n");
WiredHome 7:16129d213e6a 305 if (INI::INI_SUCCESS == ini.ReadString("SWUpdate", "name", lineBuf, sizeof(lineBuf))) {
WiredHome 7:16129d213e6a 306 strcat_s(buf, sizeof(buf), "name=");
WiredHome 7:16129d213e6a 307 strcat_s(buf, sizeof(buf), lineBuf);
WiredHome 7:16129d213e6a 308 strcat_s(buf, sizeof(buf), "\r\nversion=");
WiredHome 7:16129d213e6a 309 lineBuf[6] = '\0';
WiredHome 7:16129d213e6a 310 char fname[45];
WiredHome 7:16129d213e6a 311 snprintf(fname, sizeof(fname), "/local/%s.ver", lineBuf);
WiredHome 7:16129d213e6a 312 fh = fopen(fname, "rt");
WiredHome 7:16129d213e6a 313 if (fh) {
WiredHome 7:16129d213e6a 314 while(fgets(lineBuf, sizeof(lineBuf), fh)) {
WiredHome 7:16129d213e6a 315 strcat_s(buf, sizeof(buf), lineBuf);
WiredHome 7:16129d213e6a 316 }
WiredHome 7:16129d213e6a 317 fclose(fh);
WiredHome 7:16129d213e6a 318 }
WiredHome 7:16129d213e6a 319 }
WiredHome 7:16129d213e6a 320 strcat_s(buf, sizeof(buf), "</pre>\r\n");
WiredHome 7:16129d213e6a 321 strcat_s(buf, sizeof(buf), "<img src='/icon.png'>");
WiredHome 7:16129d213e6a 322 strcat_s(buf, sizeof(buf), "</td></tr>\r\n");
WiredHome 7:16129d213e6a 323 strcat_s(buf, sizeof(buf), "<tr>\r\n");
WiredHome 7:16129d213e6a 324 strcat_s(buf, sizeof(buf), "<td><a href='/software'>Software Update Check</a></td>\r\n");
WiredHome 7:16129d213e6a 325 strcat_s(buf, sizeof(buf), "<td><a href='/'>Home Page</a> | ");
WiredHome 7:16129d213e6a 326 strcat_s(buf, sizeof(buf), "<a href='/setup.xml' target='_xml'>view setup.xml</a>\r\n");
WiredHome 7:16129d213e6a 327 strcat_s(buf, sizeof(buf), "</td></tr></table>\r\n");
WiredHome 7:16129d213e6a 328 strcat_s(buf, sizeof(buf), "</body></html>");
WiredHome 7:16129d213e6a 329 printf("big buf size is %d bytes\r\n", strlen(buf));
WiredHome 7:16129d213e6a 330 svr->send(buf);
WiredHome 7:16129d213e6a 331 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 7:16129d213e6a 332 break;
WiredHome 7:16129d213e6a 333 case HTTPServer::CONTENT_LENGTH_REQUEST:
WiredHome 7:16129d213e6a 334 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 7:16129d213e6a 335 break;
WiredHome 7:16129d213e6a 336 case HTTPServer::DATA_TRANSFER:
WiredHome 7:16129d213e6a 337 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 7:16129d213e6a 338 break;
WiredHome 7:16129d213e6a 339 default:
WiredHome 7:16129d213e6a 340 ret = HTTPServer::ACCEPT_ERROR;
WiredHome 7:16129d213e6a 341 break;
WiredHome 7:16129d213e6a 342 }
WiredHome 7:16129d213e6a 343 return ret;
WiredHome 7:16129d213e6a 344 }
WiredHome 7:16129d213e6a 345
WiredHome 7:16129d213e6a 346
WiredHome 7:16129d213e6a 347 HTTPServer::CallBackResults SoftwarePage(HTTPServer *svr, HTTPServer::CallBackType type, char * path,
WiredHome 7:16129d213e6a 348 const HTTPServer::namevalue *queryParams, int queryParamCount)
WiredHome 7:16129d213e6a 349 {
WiredHome 7:16129d213e6a 350 HTTPServer::CallBackResults ret = HTTPServer::ACCEPT_ERROR;
WiredHome 7:16129d213e6a 351
WiredHome 7:16129d213e6a 352 switch (type) {
WiredHome 7:16129d213e6a 353 case HTTPServer::SEND_PAGE:
WiredHome 7:16129d213e6a 354 swUpdateCheck = true;
WiredHome 7:16129d213e6a 355 printf("SW Update Check scheduled.\r\n");
WiredHome 7:16129d213e6a 356 svr->header(HTTPServer::Found, "Found", "Location: /\r\n");
WiredHome 7:16129d213e6a 357 svr->send("\r\n");
WiredHome 7:16129d213e6a 358 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 7:16129d213e6a 359 break;
WiredHome 7:16129d213e6a 360 case HTTPServer::CONTENT_LENGTH_REQUEST:
WiredHome 7:16129d213e6a 361 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 7:16129d213e6a 362 break;
WiredHome 7:16129d213e6a 363 case HTTPServer::DATA_TRANSFER:
WiredHome 7:16129d213e6a 364 ret = HTTPServer::ACCEPT_COMPLETE;
WiredHome 7:16129d213e6a 365 break;
WiredHome 7:16129d213e6a 366 default:
WiredHome 7:16129d213e6a 367 ret = HTTPServer::ACCEPT_ERROR;
WiredHome 7:16129d213e6a 368 break;
WiredHome 7:16129d213e6a 369 }
WiredHome 7:16129d213e6a 370 return ret;
WiredHome 7:16129d213e6a 371 }