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: mbed CC3000_Hostdriver TEMT6200 TSI Wi-Go_eCompass_Lib_V3 WiGo_BattCharger
Fork of CC3000_Simple_Socket by
Webserver/httpserver.cpp@16:dceb9f5108f7, 2013-12-11 (annotated)
- Committer:
- frankvnk
- Date:
- Wed Dec 11 20:31:02 2013 +0000
- Revision:
- 16:dceb9f5108f7
- Parent:
- 15:cc204c19f888
faster i2c (375KHz)
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| frankvnk | 3:405462258899 | 1 | /**************************************************************************** |
| frankvnk | 3:405462258899 | 2 | * |
| frankvnk | 3:405462258899 | 3 | * httpserver.c - General HTTP Server implementation |
| frankvnk | 3:405462258899 | 4 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ |
| frankvnk | 3:405462258899 | 5 | * |
| frankvnk | 3:405462258899 | 6 | * Redistribution and use in source and binary forms, with or without |
| frankvnk | 3:405462258899 | 7 | * modification, are permitted provided that the following conditions |
| frankvnk | 3:405462258899 | 8 | * are met: |
| frankvnk | 3:405462258899 | 9 | * |
| frankvnk | 3:405462258899 | 10 | * Redistributions of source code must retain the above copyright |
| frankvnk | 3:405462258899 | 11 | * notice, this list of conditions and the following disclaimer. |
| frankvnk | 3:405462258899 | 12 | * |
| frankvnk | 3:405462258899 | 13 | * Redistributions in binary form must reproduce the above copyright |
| frankvnk | 3:405462258899 | 14 | * notice, this list of conditions and the following disclaimer in the |
| frankvnk | 3:405462258899 | 15 | * documentation and/or other materials provided with the |
| frankvnk | 3:405462258899 | 16 | * distribution. |
| frankvnk | 3:405462258899 | 17 | * |
| frankvnk | 3:405462258899 | 18 | * Neither the name of Texas Instruments Incorporated nor the names of |
| frankvnk | 3:405462258899 | 19 | * its contributors may be used to endorse or promote products derived |
| frankvnk | 3:405462258899 | 20 | * from this software without specific prior written permission. |
| frankvnk | 3:405462258899 | 21 | * |
| frankvnk | 3:405462258899 | 22 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| frankvnk | 3:405462258899 | 23 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| frankvnk | 3:405462258899 | 24 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| frankvnk | 3:405462258899 | 25 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| frankvnk | 3:405462258899 | 26 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| frankvnk | 3:405462258899 | 27 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| frankvnk | 3:405462258899 | 28 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| frankvnk | 3:405462258899 | 29 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| frankvnk | 3:405462258899 | 30 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| frankvnk | 3:405462258899 | 31 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| frankvnk | 3:405462258899 | 32 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| frankvnk | 3:405462258899 | 33 | * |
| frankvnk | 3:405462258899 | 34 | *****************************************************************************/ |
| frankvnk | 3:405462258899 | 35 | |
| frankvnk | 3:405462258899 | 36 | #include "httpserver.h" |
| frankvnk | 3:405462258899 | 37 | #include "doTCPIP.h" |
| frankvnk | 3:405462258899 | 38 | #include "TSISensor.h" |
| frankvnk | 3:405462258899 | 39 | |
| frankvnk | 3:405462258899 | 40 | extern axis6_t axis6; |
| frankvnk | 3:405462258899 | 41 | extern TSISensor tsi; |
| frankvnk | 3:405462258899 | 42 | |
| frankvnk | 3:405462258899 | 43 | /** \brief Socket used by server to listen and accept connections */ |
| frankvnk | 3:405462258899 | 44 | long httpServerSocket; |
| frankvnk | 3:405462258899 | 45 | |
| frankvnk | 3:405462258899 | 46 | /** \brief Variable holding the server's port */ |
| frankvnk | 3:405462258899 | 47 | int serverPort = 0; |
| frankvnk | 3:405462258899 | 48 | |
| frankvnk | 3:405462258899 | 49 | /** \brief Pointer to the index HTML page */ |
| frankvnk | 3:405462258899 | 50 | char * indexPage; |
| frankvnk | 3:405462258899 | 51 | extern unsigned char *dataPacket; |
| frankvnk | 3:405462258899 | 52 | |
| frankvnk | 3:405462258899 | 53 | /** \brief Pointer to CGI handler structure */ |
| frankvnk | 3:405462258899 | 54 | cgi_handler * chList; |
| frankvnk | 3:405462258899 | 55 | |
| frankvnk | 3:405462258899 | 56 | /** \brief Pointer to Dynamic HTML handler structure */ |
| frankvnk | 3:405462258899 | 57 | dyn_html_handler * htmlList; |
| frankvnk | 3:405462258899 | 58 | |
| frankvnk | 3:405462258899 | 59 | /** \brief Pointer to Dynamic HTML handler structure */ |
| frankvnk | 3:405462258899 | 60 | http_server_event_handler * eventHandlers = NULL; |
| frankvnk | 3:405462258899 | 61 | |
| frankvnk | 3:405462258899 | 62 | |
| frankvnk | 3:405462258899 | 63 | /** \brief Client socket handle list */ |
| frankvnk | 3:405462258899 | 64 | int clientList[MAX_CLIENTS]; |
| frankvnk | 3:405462258899 | 65 | |
| frankvnk | 3:405462258899 | 66 | /** \brief Page view counter */ |
| frankvnk | 3:405462258899 | 67 | int viewCounter = 1; |
| frankvnk | 6:7c06ad22f206 | 68 | #define REQ_BUFFER_SIZE 400 |
| frankvnk | 7:0f3095de6ea5 | 69 | #define HTTP_TX_BLOCK_SIZE 256 |
| frankvnk | 7:0f3095de6ea5 | 70 | //#define HTTP_TX_BLOCK_SIZE 1024 |
| frankvnk | 6:7c06ad22f206 | 71 | //#define HTTP_TX_BLOCK_SIZE 512 |
| frankvnk | 3:405462258899 | 72 | |
| frankvnk | 3:405462258899 | 73 | |
| frankvnk | 3:405462258899 | 74 | extern char requestBuffer[REQ_BUFFER_SIZE]; |
| frankvnk | 3:405462258899 | 75 | |
| frankvnk | 3:405462258899 | 76 | |
| frankvnk | 3:405462258899 | 77 | volatile int Delay; |
| frankvnk | 3:405462258899 | 78 | |
| frankvnk | 3:405462258899 | 79 | /********************************************************************/ |
| frankvnk | 3:405462258899 | 80 | void getAccelXYZ_Str(char * str) // MMA8451Q accelerometer - report axis with highest value |
| frankvnk | 3:405462258899 | 81 | { |
| frankvnk | 3:405462258899 | 82 | sprintf(str," "); //clears field (needed if previous string had more characters) |
| frankvnk | 3:405462258899 | 83 | sprintf(str, "X= %1.2f, Y= %1.2f, Z= %1.2f", axis6.fGax, axis6.fGay, axis6.fGaz);; |
| frankvnk | 3:405462258899 | 84 | } |
| frankvnk | 3:405462258899 | 85 | |
| frankvnk | 3:405462258899 | 86 | /********************************************************************/ |
| frankvnk | 3:405462258899 | 87 | void getTemperatureStr(char * str) // |
| frankvnk | 3:405462258899 | 88 | { |
| frankvnk | 3:405462258899 | 89 | sprintf(str, "%+d C", axis6.temp); |
| frankvnk | 3:405462258899 | 90 | } |
| frankvnk | 3:405462258899 | 91 | |
| frankvnk | 3:405462258899 | 92 | /********************************************************************/ |
| frankvnk | 3:405462258899 | 93 | void getTSI_sliderStr(char * str) // TSI Slider position |
| frankvnk | 3:405462258899 | 94 | { |
| frankvnk | 3:405462258899 | 95 | uint8_t slider_position; |
| frankvnk | 3:405462258899 | 96 | |
| frankvnk | 3:405462258899 | 97 | slider_position = tsi.readPercentage() * 100; // Slider position as percentage |
| frankvnk | 3:405462258899 | 98 | sprintf(str," "); //clears field (needed if previous string had more characters) |
| frankvnk | 3:405462258899 | 99 | sprintf(str, "%d %%", slider_position); |
| frankvnk | 3:405462258899 | 100 | } |
| frankvnk | 3:405462258899 | 101 | |
| frankvnk | 3:405462258899 | 102 | void getCompassStr(char * str) // Mag3110 generated Compass bearing |
| frankvnk | 3:405462258899 | 103 | { |
| frankvnk | 3:405462258899 | 104 | char *compass_points[9] = {"North", "N-East", "East", "S-East", "South", "S-West", "West", "N-West", "North"}; |
| frankvnk | 3:405462258899 | 105 | signed short compass_bearing = (axis6.compass + 23) / 45; |
| frankvnk | 3:405462258899 | 106 | sprintf(str," "); //clears field (needed if previous string had more characters) |
| frankvnk | 3:405462258899 | 107 | sprintf(str, "Roll=%-d Pitch=%-d Yaw=%-d [%s]", axis6.roll, axis6.pitch, axis6.yaw, compass_points[compass_bearing]); // |
| frankvnk | 3:405462258899 | 108 | } |
| frankvnk | 3:405462258899 | 109 | |
| frankvnk | 3:405462258899 | 110 | void getM3110Str(char * str) // Mag3110 displayed in units of UT |
| frankvnk | 3:405462258899 | 111 | { |
| frankvnk | 3:405462258899 | 112 | sprintf(str," "); //clears field (needed if previous string had more characters) |
| frankvnk | 3:405462258899 | 113 | sprintf(str, "X= %3.1f, Y= %3.1f, Z= %3.1f", axis6.fUTmx, axis6.fUTmy, axis6.fUTmz); |
| frankvnk | 3:405462258899 | 114 | } |
| frankvnk | 3:405462258899 | 115 | |
| frankvnk | 3:405462258899 | 116 | /********************************************************************/ |
| frankvnk | 3:405462258899 | 117 | extern void getAltitudeStr(char * str) // Get Altitude |
| frankvnk | 3:405462258899 | 118 | { |
| frankvnk | 3:405462258899 | 119 | sprintf(str, "%+d meters", axis6.alt); // str = integer portion of result |
| frankvnk | 3:405462258899 | 120 | } |
| frankvnk | 3:405462258899 | 121 | |
| frankvnk | 3:405462258899 | 122 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 123 | // |
| frankvnk | 3:405462258899 | 124 | //! \brief Initializes HTTP Server |
| frankvnk | 3:405462258899 | 125 | //! |
| frankvnk | 3:405462258899 | 126 | //! \param cnum is the client socket handle to be used |
| frankvnk | 3:405462258899 | 127 | //! |
| frankvnk | 3:405462258899 | 128 | //! \return 0 if successful |
| frankvnk | 3:405462258899 | 129 | //! |
| frankvnk | 3:405462258899 | 130 | // |
| frankvnk | 3:405462258899 | 131 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 132 | char initHTTPServer(int port, |
| frankvnk | 3:405462258899 | 133 | char * ipage, |
| frankvnk | 3:405462258899 | 134 | cgi_handler * handleList, |
| frankvnk | 3:405462258899 | 135 | dyn_html_handler * dhList) |
| frankvnk | 3:405462258899 | 136 | { |
| frankvnk | 3:405462258899 | 137 | sockaddr serverSocketAddr; |
| frankvnk | 3:405462258899 | 138 | serverPort = port; |
| frankvnk | 3:405462258899 | 139 | indexPage = ipage; |
| frankvnk | 3:405462258899 | 140 | chList = handleList; |
| frankvnk | 3:405462258899 | 141 | htmlList = dhList; |
| frankvnk | 3:405462258899 | 142 | |
| frankvnk | 3:405462258899 | 143 | |
| frankvnk | 3:405462258899 | 144 | httpServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); |
| frankvnk | 3:405462258899 | 145 | if (httpServerSocket == -1) |
| frankvnk | 3:405462258899 | 146 | { |
| frankvnk | 3:405462258899 | 147 | printf("oops\n"); |
| frankvnk | 3:405462258899 | 148 | wlan_stop(); |
| frankvnk | 6:7c06ad22f206 | 149 | return((char)-1); |
| frankvnk | 3:405462258899 | 150 | } |
| frankvnk | 3:405462258899 | 151 | |
| frankvnk | 3:405462258899 | 152 | serverSocketAddr.sa_family = AF_INET; |
| frankvnk | 3:405462258899 | 153 | |
| frankvnk | 3:405462258899 | 154 | // Set the Port Number |
| frankvnk | 3:405462258899 | 155 | serverSocketAddr.sa_data[0] = (port & 0xFF00)>> 8; |
| frankvnk | 3:405462258899 | 156 | serverSocketAddr.sa_data[1] = (port & 0x00FF); |
| frankvnk | 3:405462258899 | 157 | |
| frankvnk | 3:405462258899 | 158 | memset (&serverSocketAddr.sa_data[2], 0, 4); |
| frankvnk | 3:405462258899 | 159 | |
| frankvnk | 3:405462258899 | 160 | if (bind(httpServerSocket, &serverSocketAddr, sizeof(sockaddr)) != 0); |
| frankvnk | 3:405462258899 | 161 | |
| frankvnk | 3:405462258899 | 162 | return 0; |
| frankvnk | 3:405462258899 | 163 | } |
| frankvnk | 3:405462258899 | 164 | |
| frankvnk | 3:405462258899 | 165 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 166 | // |
| frankvnk | 3:405462258899 | 167 | //! \brief Main HTTP Server |
| frankvnk | 3:405462258899 | 168 | //! |
| frankvnk | 3:405462258899 | 169 | //! \param none |
| frankvnk | 3:405462258899 | 170 | //! |
| frankvnk | 3:405462258899 | 171 | //! \return none |
| frankvnk | 3:405462258899 | 172 | //! |
| frankvnk | 3:405462258899 | 173 | // |
| frankvnk | 3:405462258899 | 174 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 175 | void serverMain() |
| frankvnk | 3:405462258899 | 176 | { |
| frankvnk | 3:405462258899 | 177 | sockaddr clientaddr; |
| frankvnk | 3:405462258899 | 178 | socklen_t addrlen; |
| frankvnk | 3:405462258899 | 179 | int i = 0; |
| frankvnk | 3:405462258899 | 180 | int currentClient = 0; |
| frankvnk | 15:cc204c19f888 | 181 | LED_D2_OFF; |
| frankvnk | 15:cc204c19f888 | 182 | printf("Main HTTP server\n"); |
| frankvnk | 3:405462258899 | 183 | for(i = 0; i < MAX_CLIENTS; i++) |
| frankvnk | 3:405462258899 | 184 | clientList[i] = -1; |
| frankvnk | 3:405462258899 | 185 | |
| frankvnk | 3:405462258899 | 186 | // Start Listening |
| frankvnk | 3:405462258899 | 187 | if (listen (httpServerSocket, MAX_CLIENTS) != 0); |
| frankvnk | 3:405462258899 | 188 | |
| frankvnk | 3:405462258899 | 189 | // Handle Clients and Data |
| frankvnk | 3:405462258899 | 190 | while(1) |
| frankvnk | 3:405462258899 | 191 | { |
| frankvnk | 3:405462258899 | 192 | addrlen = sizeof(clientaddr); |
| frankvnk | 3:405462258899 | 193 | printf("Current Client= %d\n", currentClient); |
| frankvnk | 3:405462258899 | 194 | // accept blocks until we receive a connection |
| frankvnk | 3:405462258899 | 195 | while ( (clientList[currentClient] == -1) || (clientList[currentClient] == -2) ) |
| frankvnk | 3:405462258899 | 196 | { |
| frankvnk | 3:405462258899 | 197 | clientList[currentClient] = accept(httpServerSocket, (sockaddr *) &clientaddr, &addrlen); |
| frankvnk | 3:405462258899 | 198 | } |
| frankvnk | 3:405462258899 | 199 | |
| frankvnk | 3:405462258899 | 200 | if(clientList[currentClient] >= 0) |
| frankvnk | 3:405462258899 | 201 | { |
| frankvnk | 15:cc204c19f888 | 202 | LED_D2_ON; |
| frankvnk | 3:405462258899 | 203 | // Connection Accepted, Send Data |
| frankvnk | 3:405462258899 | 204 | // Wait for a data update |
| frankvnk | 3:405462258899 | 205 | newData = 0; |
| frankvnk | 3:405462258899 | 206 | while(!newData); |
| frankvnk | 8:ec00270ac01d | 207 | // SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; // *** Disable SysTick Timer |
| frankvnk | 3:405462258899 | 208 | handleHTTPRequest(currentClient); |
| frankvnk | 3:405462258899 | 209 | closesocket(clientList[currentClient]); |
| frankvnk | 3:405462258899 | 210 | clientList[currentClient]=-1; |
| frankvnk | 8:ec00270ac01d | 211 | // SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; // *** Re-Enable SysTick Timer |
| frankvnk | 15:cc204c19f888 | 212 | LED_D2_OFF; |
| frankvnk | 3:405462258899 | 213 | } |
| frankvnk | 3:405462258899 | 214 | else if(clientList[currentClient] == -57) |
| frankvnk | 3:405462258899 | 215 | { |
| frankvnk | 3:405462258899 | 216 | // BUG: Socket inactive so reopen socket |
| frankvnk | 3:405462258899 | 217 | // Inactive Socket, close and reopen it |
| frankvnk | 3:405462258899 | 218 | printf("Oops!!!\n"); |
| frankvnk | 3:405462258899 | 219 | closesocket(httpServerSocket); |
| frankvnk | 3:405462258899 | 220 | httpServerSocket = 0xFFFFFFFF; |
| frankvnk | 3:405462258899 | 221 | initHTTPServer(serverPort, indexPage, chList, htmlList); |
| frankvnk | 3:405462258899 | 222 | // Start Listening |
| frankvnk | 3:405462258899 | 223 | if ( listen (httpServerSocket, 5) != 0 ); |
| frankvnk | 3:405462258899 | 224 | } |
| frankvnk | 3:405462258899 | 225 | } |
| frankvnk | 3:405462258899 | 226 | } |
| frankvnk | 3:405462258899 | 227 | |
| frankvnk | 3:405462258899 | 228 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 229 | // |
| frankvnk | 3:405462258899 | 230 | //! \brief Handles HTTP Requests |
| frankvnk | 3:405462258899 | 231 | //! |
| frankvnk | 3:405462258899 | 232 | //! \param cnum is the client socket handle to be used |
| frankvnk | 3:405462258899 | 233 | //! |
| frankvnk | 3:405462258899 | 234 | //! \return none |
| frankvnk | 3:405462258899 | 235 | //! |
| frankvnk | 3:405462258899 | 236 | // |
| frankvnk | 3:405462258899 | 237 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 238 | void handleHTTPRequest(int cnum) |
| frankvnk | 3:405462258899 | 239 | { |
| frankvnk | 3:405462258899 | 240 | |
| frankvnk | 3:405462258899 | 241 | char * reqline[3]; |
| frankvnk | 3:405462258899 | 242 | char * cgiTok; |
| frankvnk | 3:405462258899 | 243 | |
| frankvnk | 3:405462258899 | 244 | int i = 0; |
| frankvnk | 3:405462258899 | 245 | char paramBuf[20]; |
| frankvnk | 3:405462258899 | 246 | int bytesRecvd; |
| frankvnk | 3:405462258899 | 247 | char tempStr[40]; //PF was 26 |
| frankvnk | 3:405462258899 | 248 | |
| frankvnk | 3:405462258899 | 249 | memset(requestBuffer,0,sizeof (requestBuffer)); |
| frankvnk | 3:405462258899 | 250 | bytesRecvd = recv(clientList[cnum], requestBuffer, sizeof(requestBuffer), 0); |
| frankvnk | 3:405462258899 | 251 | |
| frankvnk | 3:405462258899 | 252 | printf("\nhandleHTTPRequest\n"); |
| frankvnk | 3:405462258899 | 253 | |
| frankvnk | 3:405462258899 | 254 | if(bytesRecvd > 0) |
| frankvnk | 3:405462258899 | 255 | { |
| frankvnk | 3:405462258899 | 256 | // Received some data, check it and send data back |
| frankvnk | 3:405462258899 | 257 | reqline[0] = strstr(requestBuffer, "GET"); |
| frankvnk | 3:405462258899 | 258 | if ( reqline[0] != NULL ) |
| frankvnk | 3:405462258899 | 259 | { |
| frankvnk | 3:405462258899 | 260 | if (strstr (requestBuffer, "HTTP/1.0") != NULL && strstr (requestBuffer, "HTTP/1.1") != NULL ) |
| frankvnk | 3:405462258899 | 261 | { |
| frankvnk | 3:405462258899 | 262 | send(clientList[cnum], "HTTP/1.0 400 Bad Request\n", 25,0); |
| frankvnk | 3:405462258899 | 263 | } |
| frankvnk | 3:405462258899 | 264 | else |
| frankvnk | 3:405462258899 | 265 | { |
| frankvnk | 3:405462258899 | 266 | |
| frankvnk | 3:405462258899 | 267 | #ifdef HTTP_CGI_ENABLED |
| frankvnk | 3:405462258899 | 268 | // Do we have CGI parameters we need to parse? |
| frankvnk | 3:405462258899 | 269 | if(strchr(requestBuffer, '?') != NULL) |
| frankvnk | 3:405462258899 | 270 | { |
| frankvnk | 3:405462258899 | 271 | // Decode URL and handle each parameter sequentially |
| frankvnk | 3:405462258899 | 272 | // according to table previously setup. |
| frankvnk | 3:405462258899 | 273 | cgiTok = strstr(requestBuffer,"="); |
| frankvnk | 3:405462258899 | 274 | if(cgiTok != NULL) |
| frankvnk | 3:405462258899 | 275 | { |
| frankvnk | 3:405462258899 | 276 | memset(paramBuf,0,sizeof(paramBuf)); |
| frankvnk | 3:405462258899 | 277 | memcpy(paramBuf,cgiTok+1,5); // hard-coded for demo: 5 character parameter (-Red-/Green/Blue-) |
| frankvnk | 3:405462258899 | 278 | chList->cgiHandlerFunc[0](paramBuf); |
| frankvnk | 3:405462258899 | 279 | |
| frankvnk | 3:405462258899 | 280 | } |
| frankvnk | 3:405462258899 | 281 | } |
| frankvnk | 3:405462258899 | 282 | #endif |
| frankvnk | 3:405462258899 | 283 | |
| frankvnk | 3:405462258899 | 284 | #ifdef HTTP_DYN_HTML_ENABLED |
| frankvnk | 3:405462258899 | 285 | // The code below replaces data in the HTML page |
| frankvnk | 3:405462258899 | 286 | // with that generated by the specified functions. |
| frankvnk | 3:405462258899 | 287 | for(i = 0; i < 9; i++) // change the range here for more dynamic fields on webpage |
| frankvnk | 3:405462258899 | 288 | { |
| frankvnk | 3:405462258899 | 289 | memset(tempStr,0,sizeof(tempStr)); |
| frankvnk | 3:405462258899 | 290 | htmlList->dynHtmlFunc[i](tempStr); |
| frankvnk | 3:405462258899 | 291 | tempStr[strlen(tempStr)]= ' '; |
| frankvnk | 3:405462258899 | 292 | pageReplace((char *)indexPage, |
| frankvnk | 3:405462258899 | 293 | (char *)htmlList->dynHtmlParamName[i], |
| frankvnk | 3:405462258899 | 294 | (char *)tempStr); |
| frankvnk | 3:405462258899 | 295 | } |
| frankvnk | 3:405462258899 | 296 | #endif |
| frankvnk | 3:405462258899 | 297 | viewCounter++; |
| frankvnk | 3:405462258899 | 298 | |
| frankvnk | 3:405462258899 | 299 | sendHTTPData(clientList[cnum], HTTP_RESP, strlen(HTTP_RESP)); |
| frankvnk | 3:405462258899 | 300 | |
| frankvnk | 3:405462258899 | 301 | for(i = 0; i < strlen(indexPage); i += HTTP_TX_BLOCK_SIZE) |
| frankvnk | 3:405462258899 | 302 | { |
| frankvnk | 3:405462258899 | 303 | |
| frankvnk | 3:405462258899 | 304 | if(strlen(indexPage) - i < HTTP_TX_BLOCK_SIZE) |
| frankvnk | 3:405462258899 | 305 | { |
| frankvnk | 3:405462258899 | 306 | sendHTTPData(clientList[cnum], &indexPage[i], strlen(indexPage) - i); |
| frankvnk | 3:405462258899 | 307 | } |
| frankvnk | 3:405462258899 | 308 | else |
| frankvnk | 3:405462258899 | 309 | { |
| frankvnk | 3:405462258899 | 310 | sendHTTPData(clientList[cnum], &indexPage[i], HTTP_TX_BLOCK_SIZE); |
| frankvnk | 3:405462258899 | 311 | } |
| frankvnk | 3:405462258899 | 312 | } |
| frankvnk | 3:405462258899 | 313 | } |
| frankvnk | 3:405462258899 | 314 | } |
| frankvnk | 3:405462258899 | 315 | } |
| frankvnk | 3:405462258899 | 316 | } |
| frankvnk | 3:405462258899 | 317 | |
| frankvnk | 3:405462258899 | 318 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 319 | // |
| frankvnk | 3:405462258899 | 320 | //! \brief Inserts characters in page that appear after an indicator ind |
| frankvnk | 3:405462258899 | 321 | //! with the value from val |
| frankvnk | 3:405462258899 | 322 | //! |
| frankvnk | 3:405462258899 | 323 | //! \param page is a pointer to the array holding the page's HTML code |
| frankvnk | 3:405462258899 | 324 | //! \param ind is a pointer to a string that has the name of the parameter on the page to modify |
| frankvnk | 3:405462258899 | 325 | //! \param val is the pointer to a string holding the string to insert in the XXX |
| frankvnk | 3:405462258899 | 326 | //! |
| frankvnk | 3:405462258899 | 327 | //! \return none |
| frankvnk | 3:405462258899 | 328 | //! |
| frankvnk | 3:405462258899 | 329 | // |
| frankvnk | 3:405462258899 | 330 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 331 | void pageReplace(char * page, char * ind, char * val) |
| frankvnk | 3:405462258899 | 332 | { |
| frankvnk | 3:405462258899 | 333 | char * indicLoc; |
| frankvnk | 3:405462258899 | 334 | indicLoc = strstr (page,ind); |
| frankvnk | 3:405462258899 | 335 | memcpy(indicLoc+strlen(ind), val, strlen(val)); |
| frankvnk | 3:405462258899 | 336 | } |
| frankvnk | 3:405462258899 | 337 | |
| frankvnk | 3:405462258899 | 338 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 339 | // |
| frankvnk | 3:405462258899 | 340 | //! \brief Returns a string with the number of views of the page |
| frankvnk | 3:405462258899 | 341 | //! |
| frankvnk | 3:405462258899 | 342 | //! \param str is a pointer to the array where the number of views will be put |
| frankvnk | 3:405462258899 | 343 | //! |
| frankvnk | 3:405462258899 | 344 | //! \return none |
| frankvnk | 3:405462258899 | 345 | //! |
| frankvnk | 3:405462258899 | 346 | // |
| frankvnk | 3:405462258899 | 347 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 348 | extern uint32 cal_count; |
| frankvnk | 3:405462258899 | 349 | |
| frankvnk | 3:405462258899 | 350 | |
| frankvnk | 3:405462258899 | 351 | void getViewsNum(char * str) |
| frankvnk | 3:405462258899 | 352 | { |
| frankvnk | 3:405462258899 | 353 | sprintf(str, "%d", viewCounter); |
| frankvnk | 3:405462258899 | 354 | } |
| frankvnk | 3:405462258899 | 355 | |
| frankvnk | 3:405462258899 | 356 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 357 | // |
| frankvnk | 3:405462258899 | 358 | //! \brief Sends HTTP Data |
| frankvnk | 3:405462258899 | 359 | //! |
| frankvnk | 3:405462258899 | 360 | //! \param sdesc is the socket descriptor of the socket used for sending data |
| frankvnk | 3:405462258899 | 361 | //! \param buf is a pointer to the buffer with the data to be sent |
| frankvnk | 3:405462258899 | 362 | //! \param len is the number of bytes to send |
| frankvnk | 3:405462258899 | 363 | //! |
| frankvnk | 3:405462258899 | 364 | //! \return none |
| frankvnk | 3:405462258899 | 365 | //! |
| frankvnk | 3:405462258899 | 366 | // |
| frankvnk | 3:405462258899 | 367 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 368 | void sendHTTPData(long sdesc, const void *buf, long len) |
| frankvnk | 3:405462258899 | 369 | { |
| frankvnk | 3:405462258899 | 370 | int bytesSent = -2; |
| frankvnk | 9:5d431f47ac93 | 371 | // SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; // *** Disable SysTick Timer |
| frankvnk | 3:405462258899 | 372 | while(bytesSent == -2) bytesSent = send(sdesc, buf, len,0); |
| frankvnk | 9:5d431f47ac93 | 373 | // SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; // *** Re-Enable SysTick Timer |
| frankvnk | 3:405462258899 | 374 | if(bytesSent == -1) |
| frankvnk | 3:405462258899 | 375 | { |
| frankvnk | 3:405462258899 | 376 | // General Send Error |
| frankvnk | 7:0f3095de6ea5 | 377 | // printf("General Send Error.\n"); |
| frankvnk | 3:405462258899 | 378 | } |
| frankvnk | 3:405462258899 | 379 | if (bytesSent != strlen(indexPage)) |
| frankvnk | 3:405462258899 | 380 | { |
| frankvnk | 3:405462258899 | 381 | // ERROR: not all bytes sent |
| frankvnk | 7:0f3095de6ea5 | 382 | // printf("Not all bytes sent.\n"); |
| frankvnk | 7:0f3095de6ea5 | 383 | // printf("Length : %d - Sent : %d\n", strlen(indexPage), bytesSent); |
| frankvnk | 3:405462258899 | 384 | } |
| frankvnk | 3:405462258899 | 385 | } |
| frankvnk | 3:405462258899 | 386 | |
| frankvnk | 3:405462258899 | 387 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 388 | // |
| frankvnk | 3:405462258899 | 389 | //! \brief Initializes HTTP Server Event Handler |
| frankvnk | 3:405462258899 | 390 | //! |
| frankvnk | 3:405462258899 | 391 | //! \param eh is a pointer to the array handling server events |
| frankvnk | 3:405462258899 | 392 | //! |
| frankvnk | 3:405462258899 | 393 | //! \return none |
| frankvnk | 3:405462258899 | 394 | //! |
| frankvnk | 3:405462258899 | 395 | // |
| frankvnk | 3:405462258899 | 396 | //***************************************************************************** |
| frankvnk | 3:405462258899 | 397 | void initEventHandlers(http_server_event_handler * eh) |
| frankvnk | 3:405462258899 | 398 | { |
| frankvnk | 3:405462258899 | 399 | eventHandlers = eh; |
| frankvnk | 3:405462258899 | 400 | } |
| frankvnk | 3:405462258899 | 401 |
