Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: UIPEthernet_GSOE
main.cpp@18:02264a85fdda, 2021-08-20 (annotated)
- Committer:
- jack1930
- Date:
- Fri Aug 20 12:36:49 2021 +0000
- Revision:
- 18:02264a85fdda
- Parent:
- 15:9beb9b99695d
angepasst fuer STM32
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| jack1930 | 18:02264a85fdda | 1 | //nach Zoltan Houdek |
| hudakz | 10:b47c7921346f | 2 | #include "mbed.h" |
| hudakz | 0:68a0003c4cb8 | 3 | #include <string> |
| hudakz | 10:b47c7921346f | 4 | #include "UipEthernet.h" |
| hudakz | 10:b47c7921346f | 5 | #include "TcpServer.h" |
| hudakz | 10:b47c7921346f | 6 | #include "TcpClient.h" |
| hudakz | 0:68a0003c4cb8 | 7 | |
| hudakz | 11:6c0b20227ca2 | 8 | //#define DEBUG |
| hudakz | 14:810ac368dd6e | 9 | // Static IP address must be unique and compatible with your network. |
| hudakz | 10:b47c7921346f | 10 | #define IP "192.168.1.35" |
| hudakz | 10:b47c7921346f | 11 | #define GATEWAY "192.168.1.1" |
| hudakz | 10:b47c7921346f | 12 | #define NETMASK "255.255.255.0" |
| hudakz | 10:b47c7921346f | 13 | #define PORT 80 |
| hudakz | 11:6c0b20227ca2 | 14 | const uint8_t MAC[6] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x06 }; |
| jack1930 | 18:02264a85fdda | 15 | UipEthernet net(MAC, PB_15, PB_14, PB_13, PB_12); // mosi, miso, sck, cs |
| hudakz | 12:7c46dcf6f7e2 | 16 | TcpServer server; // Ethernet server |
| hudakz | 11:6c0b20227ca2 | 17 | TcpClient* client; |
| hudakz | 15:9beb9b99695d | 18 | char httpBuf[1500]; |
| hudakz | 15:9beb9b99695d | 19 | char httpHeader[256]; |
| hudakz | 10:b47c7921346f | 20 | const int OFF = 0; |
| hudakz | 10:b47c7921346f | 21 | const int ON = 1; |
| jack1930 | 18:02264a85fdda | 22 | DigitalOut output(PA_5); // A digital output to be switched on/off |
| hudakz | 15:9beb9b99695d | 23 | float roomTemp = 21.8f; // A temperature sensor output |
| hudakz | 15:9beb9b99695d | 24 | const char PASSWORD[] = "secret"; // Change as you like |
| hudakz | 0:68a0003c4cb8 | 25 | |
| hudakz | 10:b47c7921346f | 26 | /** |
| hudakz | 10:b47c7921346f | 27 | * @brief Analyses the received URL |
| hudakz | 10:b47c7921346f | 28 | * @note The string passed to this function will look like this: |
| hudakz | 10:b47c7921346f | 29 | * GET /HTTP/1..... |
| hudakz | 10:b47c7921346f | 30 | * GET /password HTTP/1..... |
| hudakz | 10:b47c7921346f | 31 | * GET /password/ HTTP/1..... |
| hudakz | 10:b47c7921346f | 32 | * GET /password/?sw=1 HTTP/1..... |
| hudakz | 10:b47c7921346f | 33 | * GET /password/?sw=0 HTTP/1..... |
| hudakz | 10:b47c7921346f | 34 | * @param url URL string |
| hudakz | 10:b47c7921346f | 35 | * @retval -3 just refresh page |
| hudakz | 10:b47c7921346f | 36 | * -2 no command given but password valid |
| hudakz | 10:b47c7921346f | 37 | * -1 invalid password |
| hudakz | 10:b47c7921346f | 38 | * 0 switch off |
| hudakz | 10:b47c7921346f | 39 | * 1 switch on |
| hudakz | 10:b47c7921346f | 40 | */ |
| hudakz | 15:9beb9b99695d | 41 | int8_t analyseURL(char* url) |
| hudakz | 10:b47c7921346f | 42 | { |
| jack1930 | 18:02264a85fdda | 43 | return 1; |
| jack1930 | 18:02264a85fdda | 44 | uint8_t pos = 5; |
| jack1930 | 18:02264a85fdda | 45 | /* |
| hudakz | 15:9beb9b99695d | 46 | if (strlen(url) < (5 + strlen(PASSWORD) + 1)) |
| hudakz | 10:b47c7921346f | 47 | return(-1); |
| hudakz | 0:68a0003c4cb8 | 48 | |
| hudakz | 15:9beb9b99695d | 49 | //if (url.substr(5, PASSWORD.size()) != PASSWORD) |
| hudakz | 15:9beb9b99695d | 50 | if (strncmp(url + 5, PASSWORD, strlen(PASSWORD)) != 0) |
| hudakz | 0:68a0003c4cb8 | 51 | return(-1); |
| hudakz | 0:68a0003c4cb8 | 52 | |
| hudakz | 15:9beb9b99695d | 53 | uint8_t pos = 5 + strlen(PASSWORD); |
| hudakz | 0:68a0003c4cb8 | 54 | |
| hudakz | 15:9beb9b99695d | 55 | //if (url.substr(pos, 1) != "/") |
| hudakz | 15:9beb9b99695d | 56 | |
| hudakz | 15:9beb9b99695d | 57 | if (*(url + pos) != '/') |
| hudakz | 0:68a0003c4cb8 | 58 | return(-1); |
| hudakz | 0:68a0003c4cb8 | 59 | |
| hudakz | 15:9beb9b99695d | 60 | //if (url.substr(pos++, 1) == " ") |
| hudakz | 15:9beb9b99695d | 61 | if (*(url + pos++) == ' ') |
| hudakz | 10:b47c7921346f | 62 | return(-2); |
| jack1930 | 18:02264a85fdda | 63 | */ |
| hudakz | 15:9beb9b99695d | 64 | //string cmd(url.substr(pos, 5)); |
| hudakz | 15:9beb9b99695d | 65 | *(url + pos + 5) = '\0'; // terminate the cmd string |
| hudakz | 15:9beb9b99695d | 66 | char* cmd = ((url + pos)); |
| hudakz | 15:9beb9b99695d | 67 | if (strcmp(cmd, "?sw=0") == 0) |
| hudakz | 0:68a0003c4cb8 | 68 | return(0); |
| hudakz | 15:9beb9b99695d | 69 | if (strcmp(cmd, "?sw=1") == 0) |
| hudakz | 0:68a0003c4cb8 | 70 | return(1); |
| hudakz | 0:68a0003c4cb8 | 71 | return(-3); |
| hudakz | 0:68a0003c4cb8 | 72 | } |
| hudakz | 0:68a0003c4cb8 | 73 | |
| hudakz | 5:0ab8292e37da | 74 | /** |
| hudakz | 5:0ab8292e37da | 75 | * @brief |
| hudakz | 5:0ab8292e37da | 76 | * @note |
| hudakz | 5:0ab8292e37da | 77 | * @param |
| hudakz | 5:0ab8292e37da | 78 | * @retval |
| hudakz | 5:0ab8292e37da | 79 | */ |
| hudakz | 15:9beb9b99695d | 80 | char* movedPermanently(uint8_t flag) |
| hudakz | 10:b47c7921346f | 81 | { |
| hudakz | 15:9beb9b99695d | 82 | memset(httpBuf, 0, sizeof(httpBuf)); |
| hudakz | 15:9beb9b99695d | 83 | if (flag == 1) { |
| hudakz | 15:9beb9b99695d | 84 | strcpy(httpBuf, "/"); |
| hudakz | 15:9beb9b99695d | 85 | strcat(httpBuf, PASSWORD); |
| hudakz | 15:9beb9b99695d | 86 | strcat(httpBuf, "/"); |
| hudakz | 15:9beb9b99695d | 87 | } |
| hudakz | 0:68a0003c4cb8 | 88 | |
| hudakz | 15:9beb9b99695d | 89 | strcat(httpBuf, "<h1>301 Moved Permanently</h1>\r\n"); |
| hudakz | 15:9beb9b99695d | 90 | return(httpBuf); |
| hudakz | 0:68a0003c4cb8 | 91 | } |
| hudakz | 0:68a0003c4cb8 | 92 | |
| hudakz | 5:0ab8292e37da | 93 | /** |
| hudakz | 5:0ab8292e37da | 94 | * @brief |
| hudakz | 5:0ab8292e37da | 95 | * @note |
| hudakz | 5:0ab8292e37da | 96 | * @param |
| hudakz | 5:0ab8292e37da | 97 | * @retval |
| hudakz | 5:0ab8292e37da | 98 | */ |
| hudakz | 15:9beb9b99695d | 99 | char* showWebPage(int status) |
| hudakz | 10:b47c7921346f | 100 | { |
| hudakz | 15:9beb9b99695d | 101 | char roomTempStr[10] = { }; |
| hudakz | 10:b47c7921346f | 102 | |
| hudakz | 10:b47c7921346f | 103 | //roomTemp = ds1820.read(); |
| hudakz | 15:9beb9b99695d | 104 | |
| hudakz | 10:b47c7921346f | 105 | sprintf(roomTempStr, "%3.1f", roomTemp); |
| hudakz | 15:9beb9b99695d | 106 | memset(httpBuf, 0, sizeof(httpBuf)); |
| hudakz | 10:b47c7921346f | 107 | /*$off*/ |
| hudakz | 15:9beb9b99695d | 108 | strcat |
| hudakz | 15:9beb9b99695d | 109 | ( |
| hudakz | 15:9beb9b99695d | 110 | httpBuf, |
| hudakz | 10:b47c7921346f | 111 | "<head>" |
| hudakz | 15:9beb9b99695d | 112 | "<meta charset=\"utf-8\">" |
| hudakz | 15:9beb9b99695d | 113 | "<meta name=\"viewport\" content=\" initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=0;\"/>" |
| hudakz | 15:9beb9b99695d | 114 | "<title>Smart Home</title>" |
| hudakz | 15:9beb9b99695d | 115 | "<link href='http://fonts.googleapis.com/css?family=Droid+Sans&v1' rel='stylesheet' type='text/css'>" |
| hudakz | 15:9beb9b99695d | 116 | "<style>" |
| hudakz | 15:9beb9b99695d | 117 | ".switch {" |
| hudakz | 15:9beb9b99695d | 118 | "position: relative;" |
| hudakz | 15:9beb9b99695d | 119 | "display: inline-block;" |
| hudakz | 15:9beb9b99695d | 120 | "width: 60px;" |
| hudakz | 15:9beb9b99695d | 121 | "height: 34px;" |
| hudakz | 15:9beb9b99695d | 122 | "}" |
| hudakz | 15:9beb9b99695d | 123 | ".switch input {display:none;}" |
| hudakz | 15:9beb9b99695d | 124 | ".slider {" |
| hudakz | 15:9beb9b99695d | 125 | "position: absolute;" |
| hudakz | 15:9beb9b99695d | 126 | "cursor: pointer;" |
| hudakz | 15:9beb9b99695d | 127 | "top: 0;" |
| hudakz | 15:9beb9b99695d | 128 | "left: 0;" |
| hudakz | 15:9beb9b99695d | 129 | "right: 0;" |
| hudakz | 15:9beb9b99695d | 130 | "bottom: 0;" |
| hudakz | 15:9beb9b99695d | 131 | "border-radius: 34px;" |
| hudakz | 15:9beb9b99695d | 132 | "background-color: #ccc;" |
| hudakz | 15:9beb9b99695d | 133 | "-webkit-transition: .4s;" |
| hudakz | 15:9beb9b99695d | 134 | "transition: .4s;" |
| hudakz | 15:9beb9b99695d | 135 | "}" |
| hudakz | 15:9beb9b99695d | 136 | ".slider:before {" |
| hudakz | 15:9beb9b99695d | 137 | "position: absolute;" |
| hudakz | 15:9beb9b99695d | 138 | "content: \"\";" |
| hudakz | 15:9beb9b99695d | 139 | "height: 26px;" |
| hudakz | 15:9beb9b99695d | 140 | "width: 26px;" |
| hudakz | 15:9beb9b99695d | 141 | "left: 4px;" |
| hudakz | 15:9beb9b99695d | 142 | "bottom: 4px;" |
| hudakz | 15:9beb9b99695d | 143 | "border-radius: 50%;" |
| hudakz | 15:9beb9b99695d | 144 | "background-color: white;" |
| hudakz | 15:9beb9b99695d | 145 | "-webkit-transition: .4s;" |
| hudakz | 15:9beb9b99695d | 146 | "transition: .4s;" |
| hudakz | 15:9beb9b99695d | 147 | "}" |
| hudakz | 15:9beb9b99695d | 148 | "input:checked + .slider {" |
| hudakz | 15:9beb9b99695d | 149 | "background-color: #8ce196;" |
| hudakz | 15:9beb9b99695d | 150 | "}" |
| hudakz | 15:9beb9b99695d | 151 | "input:focus + .slider {" |
| hudakz | 15:9beb9b99695d | 152 | "box-shadow: 0 0 1px #8ce196;" |
| hudakz | 15:9beb9b99695d | 153 | "}" |
| hudakz | 15:9beb9b99695d | 154 | "input:checked + .slider:before {" |
| hudakz | 15:9beb9b99695d | 155 | "-webkit-transform: translateX(26px);" |
| hudakz | 15:9beb9b99695d | 156 | "-ms-transform: translateX(26px);" |
| hudakz | 15:9beb9b99695d | 157 | "transform: translateX(26px);" |
| hudakz | 15:9beb9b99695d | 158 | "}" |
| hudakz | 15:9beb9b99695d | 159 | "</style>" |
| hudakz | 10:b47c7921346f | 160 | "</head>" |
| hudakz | 10:b47c7921346f | 161 | |
| hudakz | 10:b47c7921346f | 162 | "<body>" |
| hudakz | 15:9beb9b99695d | 163 | "<h2><a href=\".\" title=\"Click to refresh the page\">Smart Home</a></h2>" |
| hudakz | 15:9beb9b99695d | 164 | "<pre>Temperature:\t" |
| hudakz | 15:9beb9b99695d | 165 | ); |
| hudakz | 15:9beb9b99695d | 166 | strcat(httpBuf, roomTempStr); |
| hudakz | 15:9beb9b99695d | 167 | strcat(httpBuf, "°C</pre>"); |
| hudakz | 15:9beb9b99695d | 168 | strcat |
| hudakz | 15:9beb9b99695d | 169 | ( |
| hudakz | 15:9beb9b99695d | 170 | httpBuf, |
| hudakz | 15:9beb9b99695d | 171 | "<pre>Heating:\t" |
| hudakz | 15:9beb9b99695d | 172 | ); |
| hudakz | 10:b47c7921346f | 173 | if(status == ON) { |
| hudakz | 15:9beb9b99695d | 174 | strcat |
| hudakz | 15:9beb9b99695d | 175 | ( |
| hudakz | 15:9beb9b99695d | 176 | httpBuf, |
| hudakz | 15:9beb9b99695d | 177 | "<a href=\"./?sw=0\" class=\"switch\"> " |
| hudakz | 15:9beb9b99695d | 178 | "<input type=\"checkbox\" checked>" |
| hudakz | 15:9beb9b99695d | 179 | ); |
| hudakz | 5:0ab8292e37da | 180 | } |
| hudakz | 5:0ab8292e37da | 181 | else { |
| hudakz | 15:9beb9b99695d | 182 | strcat |
| hudakz | 15:9beb9b99695d | 183 | ( |
| hudakz | 15:9beb9b99695d | 184 | httpBuf, |
| hudakz | 15:9beb9b99695d | 185 | "<a href=\"./?sw=1\" class=\"switch\"> " |
| hudakz | 15:9beb9b99695d | 186 | "<input type=\"checkbox\">" |
| hudakz | 15:9beb9b99695d | 187 | ); |
| hudakz | 0:68a0003c4cb8 | 188 | } |
| hudakz | 15:9beb9b99695d | 189 | strcat |
| hudakz | 15:9beb9b99695d | 190 | ( |
| hudakz | 15:9beb9b99695d | 191 | httpBuf, |
| hudakz | 15:9beb9b99695d | 192 | "<div class=\"slider\"></div>" |
| hudakz | 15:9beb9b99695d | 193 | "</a>" |
| hudakz | 15:9beb9b99695d | 194 | "</pre>" |
| hudakz | 15:9beb9b99695d | 195 | "<hr>" |
| hudakz | 15:9beb9b99695d | 196 | "<pre>2017 ARMmbed</pre>" |
| hudakz | 15:9beb9b99695d | 197 | "</body>" |
| hudakz | 15:9beb9b99695d | 198 | ); |
| hudakz | 10:b47c7921346f | 199 | /*$on*/ |
| hudakz | 15:9beb9b99695d | 200 | return httpBuf; |
| hudakz | 0:68a0003c4cb8 | 201 | } |
| hudakz | 0:68a0003c4cb8 | 202 | |
| hudakz | 5:0ab8292e37da | 203 | /** |
| hudakz | 5:0ab8292e37da | 204 | * @brief |
| hudakz | 5:0ab8292e37da | 205 | * @note |
| hudakz | 5:0ab8292e37da | 206 | * @param |
| hudakz | 5:0ab8292e37da | 207 | * @retval |
| hudakz | 5:0ab8292e37da | 208 | */ |
| hudakz | 15:9beb9b99695d | 209 | void sendHTTP(TcpClient* client, char* header, char* content) |
| hudakz | 10:b47c7921346f | 210 | { |
| hudakz | 15:9beb9b99695d | 211 | char content_length[10] = { }; |
| hudakz | 15:9beb9b99695d | 212 | |
| hudakz | 15:9beb9b99695d | 213 | sprintf(content_length, "%u\r\n", strlen(content)); |
| hudakz | 10:b47c7921346f | 214 | |
| hudakz | 15:9beb9b99695d | 215 | strcat(header, "\r\nContent-Type: text/html\r\n"); |
| hudakz | 15:9beb9b99695d | 216 | strcat(header, "Content-Length: "); |
| hudakz | 15:9beb9b99695d | 217 | strcat(header, content_length); |
| hudakz | 15:9beb9b99695d | 218 | strcat(header, "Pragma: no-cache\r\n"); |
| hudakz | 15:9beb9b99695d | 219 | strcat(header, "Connection: About to close\r\n\r\n"); |
| hudakz | 10:b47c7921346f | 220 | |
| hudakz | 15:9beb9b99695d | 221 | char c = content[0]; |
| hudakz | 15:9beb9b99695d | 222 | memmove(httpBuf + strlen(header), httpBuf, strlen(content)); // make room for the header |
| hudakz | 15:9beb9b99695d | 223 | strcpy(httpBuf, header); // copy the header on front of the content |
| hudakz | 15:9beb9b99695d | 224 | httpBuf[strlen(header)] = c; |
| hudakz | 15:9beb9b99695d | 225 | client->send((uint8_t*)httpBuf, strlen(httpBuf)); |
| hudakz | 10:b47c7921346f | 226 | } |
| hudakz | 10:b47c7921346f | 227 | |
| hudakz | 10:b47c7921346f | 228 | /** |
| hudakz | 10:b47c7921346f | 229 | * @brief |
| hudakz | 10:b47c7921346f | 230 | * @note |
| hudakz | 10:b47c7921346f | 231 | * @param |
| hudakz | 10:b47c7921346f | 232 | * @retval |
| hudakz | 10:b47c7921346f | 233 | */ |
| hudakz | 10:b47c7921346f | 234 | int main(void) |
| hudakz | 10:b47c7921346f | 235 | { |
| hudakz | 10:b47c7921346f | 236 | printf("Starting ...\r\n"); |
| hudakz | 10:b47c7921346f | 237 | |
| jack1930 | 18:02264a85fdda | 238 | net.set_network(IP, NETMASK, GATEWAY); // include this for using static IP address |
| jack1930 | 18:02264a85fdda | 239 | if (net.connect(60) != 0) { |
| hudakz | 15:9beb9b99695d | 240 | |
| hudakz | 15:9beb9b99695d | 241 | // 'connect' timeout in seconds (defaults to 60 sec) |
| hudakz | 14:810ac368dd6e | 242 | printf("Unable to connet.\r\n"); |
| hudakz | 14:810ac368dd6e | 243 | return -1; |
| hudakz | 14:810ac368dd6e | 244 | } |
| jack1930 | 18:02264a85fdda | 245 | printf("connected"); |
| hudakz | 10:b47c7921346f | 246 | // Show the network address |
| hudakz | 15:9beb9b99695d | 247 | SocketAddress addr; |
| hudakz | 15:9beb9b99695d | 248 | net.get_ip_address(&addr); |
| hudakz | 15:9beb9b99695d | 249 | printf("IP address: %s\n", addr.get_ip_address() ? addr.get_ip_address() : "None"); |
| hudakz | 15:9beb9b99695d | 250 | net.get_netmask(&addr); |
| hudakz | 15:9beb9b99695d | 251 | printf("Netmask: %s\n", addr.get_ip_address() ? addr.get_ip_address() : "None"); |
| hudakz | 15:9beb9b99695d | 252 | net.get_gateway(&addr); |
| hudakz | 15:9beb9b99695d | 253 | printf("Gateway: %s\n", addr.get_ip_address() ? addr.get_ip_address() : "None"); |
| hudakz | 10:b47c7921346f | 254 | |
| hudakz | 10:b47c7921346f | 255 | /* Open the server on ethernet stack */ |
| hudakz | 10:b47c7921346f | 256 | server.open(&net); |
| hudakz | 10:b47c7921346f | 257 | |
| hudakz | 10:b47c7921346f | 258 | /* Bind the HTTP port (TCP 80) to the server */ |
| hudakz | 10:b47c7921346f | 259 | server.bind(PORT); |
| hudakz | 10:b47c7921346f | 260 | |
| hudakz | 14:810ac368dd6e | 261 | /* Can handle 4 simultaneous connections */ |
| hudakz | 14:810ac368dd6e | 262 | server.listen(4); |
| hudakz | 10:b47c7921346f | 263 | |
| hudakz | 11:6c0b20227ca2 | 264 | while (true) { |
| hudakz | 10:b47c7921346f | 265 | client = server.accept(); |
| hudakz | 10:b47c7921346f | 266 | if (client) { |
| hudakz | 15:9beb9b99695d | 267 | switch (client->recv((uint8_t*)httpBuf, client->available())) { |
| hudakz | 15:9beb9b99695d | 268 | case 0: |
| hudakz | 15:9beb9b99695d | 269 | printf("recieved buffer is empty.\n\r"); |
| hudakz | 11:6c0b20227ca2 | 270 | break; |
| hudakz | 0:68a0003c4cb8 | 271 | |
| hudakz | 11:6c0b20227ca2 | 272 | case -1: |
| hudakz | 15:9beb9b99695d | 273 | printf("failed to read data from client.\n\r"); |
| hudakz | 11:6c0b20227ca2 | 274 | break; |
| hudakz | 0:68a0003c4cb8 | 275 | |
| hudakz | 15:9beb9b99695d | 276 | default: |
| hudakz | 15:9beb9b99695d | 277 | #ifdef DEBUG |
| hudakz | 15:9beb9b99695d | 278 | printf("Client with IP address %s connected.\r\n\r\n", client->getpeername()); |
| hudakz | 15:9beb9b99695d | 279 | printf("Data received:\r\n%s\n\r", receiveBuf); |
| hudakz | 15:9beb9b99695d | 280 | #endif |
| hudakz | 15:9beb9b99695d | 281 | if (strncmp(httpBuf, "GET", 3) != 0) { |
| hudakz | 15:9beb9b99695d | 282 | strcpy(httpHeader, "HTTP/1.0 200 OK"); |
| hudakz | 15:9beb9b99695d | 283 | strcpy(httpBuf, "<h1>200 OK</h1>"); |
| hudakz | 15:9beb9b99695d | 284 | sendHTTP(client, httpHeader, httpBuf); |
| hudakz | 15:9beb9b99695d | 285 | } |
| hudakz | 15:9beb9b99695d | 286 | else |
| hudakz | 15:9beb9b99695d | 287 | if ((strncmp(httpBuf, "GET", 3) == 0) && (strncmp(httpBuf + 3, " / ", 3 == 0))) { |
| hudakz | 15:9beb9b99695d | 288 | strcpy(httpHeader, "HTTP/1.0 200 OK"); |
| hudakz | 15:9beb9b99695d | 289 | strcpy(httpBuf, "<p>Usage: http://host_or_ip/password</p>\r\n"); |
| hudakz | 15:9beb9b99695d | 290 | sendHTTP(client, httpHeader, httpBuf); |
| hudakz | 15:9beb9b99695d | 291 | } |
| hudakz | 15:9beb9b99695d | 292 | else { |
| hudakz | 15:9beb9b99695d | 293 | int cmd = analyseURL(httpBuf); |
| hudakz | 15:9beb9b99695d | 294 | switch (cmd) { |
| hudakz | 15:9beb9b99695d | 295 | case -3: |
| hudakz | 15:9beb9b99695d | 296 | // update webpage |
| hudakz | 15:9beb9b99695d | 297 | strcpy(httpHeader, "HTTP/1.0 200 OK"); |
| hudakz | 15:9beb9b99695d | 298 | sendHTTP(client, httpHeader, showWebPage(output)); |
| hudakz | 15:9beb9b99695d | 299 | break; |
| hudakz | 0:68a0003c4cb8 | 300 | |
| hudakz | 15:9beb9b99695d | 301 | case -2: |
| hudakz | 15:9beb9b99695d | 302 | // redirect to the right base url |
| hudakz | 15:9beb9b99695d | 303 | strcpy(httpHeader, "HTTP/1.0 301 Moved Permanently\r\nLocation: "); |
| hudakz | 15:9beb9b99695d | 304 | sendHTTP(client, httpHeader, movedPermanently(1)); |
| hudakz | 15:9beb9b99695d | 305 | break; |
| hudakz | 15:9beb9b99695d | 306 | |
| hudakz | 15:9beb9b99695d | 307 | case -1: |
| hudakz | 15:9beb9b99695d | 308 | strcpy(httpHeader, "HTTP/1.0 401 Unauthorized"); |
| hudakz | 15:9beb9b99695d | 309 | strcpy(httpBuf, "<h1>401 Unauthorized</h1>"); |
| hudakz | 15:9beb9b99695d | 310 | sendHTTP(client, httpHeader, httpBuf); |
| hudakz | 15:9beb9b99695d | 311 | break; |
| hudakz | 15:9beb9b99695d | 312 | |
| hudakz | 15:9beb9b99695d | 313 | case 0: |
| hudakz | 15:9beb9b99695d | 314 | output = OFF; // output off |
| hudakz | 15:9beb9b99695d | 315 | strcpy(httpHeader, "HTTP/1.0 200 OK"); |
| hudakz | 15:9beb9b99695d | 316 | sendHTTP(client, httpHeader, showWebPage(output)); |
| hudakz | 15:9beb9b99695d | 317 | break; |
| hudakz | 15:9beb9b99695d | 318 | |
| hudakz | 15:9beb9b99695d | 319 | case 1: |
| hudakz | 15:9beb9b99695d | 320 | output = ON; // output on |
| hudakz | 15:9beb9b99695d | 321 | strcpy(httpHeader, "HTTP/1.0 200 OK"); |
| hudakz | 15:9beb9b99695d | 322 | sendHTTP(client, httpHeader, showWebPage(output)); |
| hudakz | 15:9beb9b99695d | 323 | break; |
| hudakz | 15:9beb9b99695d | 324 | } |
| hudakz | 15:9beb9b99695d | 325 | } |
| hudakz | 0:68a0003c4cb8 | 326 | } |
| hudakz | 11:6c0b20227ca2 | 327 | |
| hudakz | 10:b47c7921346f | 328 | client->close(); |
| hudakz | 0:68a0003c4cb8 | 329 | } |
| hudakz | 0:68a0003c4cb8 | 330 | } |
| hudakz | 0:68a0003c4cb8 | 331 | } |