Frank Vannieuwkerke / Mbed 2 deprecated Wi-Go_IOT_Demo

Dependencies:   mbed CC3000_Hostdriver TEMT6200 TSI Wi-Go_eCompass_Lib_V3 WiGo_BattCharger

Fork of CC3000_Simple_Socket by Frank Vannieuwkerke

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?

UserRevisionLine numberNew 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