David Fletcher / Mbed 2 deprecated cc3100_Test_websock_Camera_CM4F

Dependencies:   mbed

Committer:
dflet
Date:
Thu Sep 03 20:10:39 2015 +0000
Revision:
18:3f1b52616d00
Parent:
12:7d75ba5deed1
Some debug removed still have some random  failures with SPI?? MT9D111 cam still not working.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:50cedd586816 1 //*****************************************************************************
dflet 0:50cedd586816 2 // Copyright (C) 2014 Texas Instruments Incorporated
dflet 0:50cedd586816 3 //
dflet 0:50cedd586816 4 // All rights reserved. Property of Texas Instruments Incorporated.
dflet 0:50cedd586816 5 // Restricted rights to use, duplicate or disclose this code are
dflet 0:50cedd586816 6 // granted through contract.
dflet 0:50cedd586816 7 // The program may not be used without the written permission of
dflet 0:50cedd586816 8 // Texas Instruments Incorporated or against the terms and conditions
dflet 0:50cedd586816 9 // stipulated in the agreement under which this program has been supplied,
dflet 0:50cedd586816 10 // and under no circumstances can it be used with non-TI connectivity device.
dflet 0:50cedd586816 11 //
dflet 0:50cedd586816 12 //*****************************************************************************
dflet 0:50cedd586816 13
dflet 0:50cedd586816 14
dflet 0:50cedd586816 15 /**
dflet 0:50cedd586816 16 * @addtogroup WebSockHandler
dflet 0:50cedd586816 17 *
dflet 0:50cedd586816 18 * @{
dflet 0:50cedd586816 19 */
dflet 0:50cedd586816 20
dflet 0:50cedd586816 21 //#include "HttpHeaders.h"
dflet 0:50cedd586816 22 #include "HttpCore.h"
dflet 0:50cedd586816 23 #include "HttpResponse.h"
dflet 0:50cedd586816 24 #include "HttpRequest.h"
dflet 0:50cedd586816 25 #include "HttpAuth.h"
dflet 0:50cedd586816 26 #include "HttpDebug.h"
dflet 0:50cedd586816 27 #include <string.h>
dflet 0:50cedd586816 28 #include <stdlib.h>
dflet 0:50cedd586816 29 #include "HttpConfig.h"
dflet 0:50cedd586816 30 #include "HttpString.h"
dflet 0:50cedd586816 31 #include "osi.h"
dflet 0:50cedd586816 32 #include "WebSockHandler.h"
dflet 0:50cedd586816 33 #include "httpserverapp.h"
dflet 0:50cedd586816 34
dflet 0:50cedd586816 35 // Include CC3200 SimpleLink headers
dflet 0:50cedd586816 36 #include "cc3100_simplelink.h"
dflet 0:50cedd586816 37
dflet 0:50cedd586816 38
dflet 0:50cedd586816 39 char *GlobRecvBuf;
dflet 0:50cedd586816 40 int64_t GlobPayloadLen;
dflet 0:50cedd586816 41 int64_t GlobRecvLen;
dflet 0:50cedd586816 42 UINT8 RecvMore = 0;
dflet 0:50cedd586816 43 char MaskKey[4];
dflet 0:50cedd586816 44 UINT8 Mask;
dflet 0:50cedd586816 45 UINT8 Ping = 0;
dflet 0:50cedd586816 46 UINT8 Close = 0;
dflet 0:50cedd586816 47
dflet 0:50cedd586816 48 // WebSocket response status line strings
dflet 0:50cedd586816 49 char WS_STATUS_OK_STR[] = "ok";
dflet 0:50cedd586816 50 char WS_STATUS_GOING_AWAY_STR[] = "server down";
dflet 0:50cedd586816 51 char WS_STATUS_ERROR_PROTOCOL_STR[] = "protocol error";
dflet 0:50cedd586816 52 char WS_STATUS_ERROR_DATATYPE_STR[] = "datatype not supported";
dflet 0:50cedd586816 53 char WS_STATUS_ERROR_ENCODING_STR[] = "data not interpreted";
dflet 0:50cedd586816 54 char WS_STATUS_ERROR_OVERFLOW_STR[] = "data too large";
dflet 0:50cedd586816 55 char WS_STATUS_ERROR_UNEXPECTED_STR[] = "unexpected event server";
dflet 0:50cedd586816 56
dflet 0:50cedd586816 57
dflet 0:50cedd586816 58 /* This function parses the incoming data packet
dflet 0:50cedd586816 59 * @return 1 if successful
dflet 0:50cedd586816 60 0 if failure
dflet 0:50cedd586816 61 */
dflet 0:50cedd586816 62 /*
dflet 0:50cedd586816 63
dflet 0:50cedd586816 64 0 1 2 3
dflet 0:50cedd586816 65 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
dflet 0:50cedd586816 66 +-+-+-+-+-------+-+-------------+-------------------------------+
dflet 0:50cedd586816 67 |F|R|R|R| opcode|M| Payload len | Extended payload length |
dflet 0:50cedd586816 68 |I|S|S|S| (4) |A| (7) | (16/64) |
dflet 0:50cedd586816 69 |N|V|V|V| |S| | (if payload len==126/127) |
dflet 0:50cedd586816 70 | |1|2|3| |K| | |
dflet 0:50cedd586816 71 +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
dflet 0:50cedd586816 72 | Extended payload length continued, if payload len == 127 |
dflet 0:50cedd586816 73 + - - - - - - - - - - - - - - - +-------------------------------+
dflet 0:50cedd586816 74 | |Masking-key, if MASK set to 1 |
dflet 0:50cedd586816 75 +-------------------------------+-------------------------------+
dflet 0:50cedd586816 76 | Masking-key (continued) | Payload Data |
dflet 0:50cedd586816 77 +-------------------------------- - - - - - - - - - - - - - - - +
dflet 0:50cedd586816 78 : Payload Data continued ... :
dflet 0:50cedd586816 79 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
dflet 0:50cedd586816 80 | Payload Data continued ... |
dflet 0:50cedd586816 81 +---------------------------------------------------------------+
dflet 0:50cedd586816 82
dflet 0:50cedd586816 83
dflet 0:50cedd586816 84 */
dflet 0:50cedd586816 85
dflet 0:50cedd586816 86 int Payloadlength(struct HttpBlob * pData, UINT8 iter)
dflet 0:50cedd586816 87 {
dflet 0:50cedd586816 88 int result = 0x0;
dflet 0:50cedd586816 89
dflet 0:50cedd586816 90 while(iter != 0)
dflet 0:50cedd586816 91 {
dflet 0:50cedd586816 92 result = ((int) (*(pData->pData)) | result);
dflet 0:50cedd586816 93 if(iter != 1)
dflet 0:50cedd586816 94 result = result << 8;
dflet 0:50cedd586816 95 pData->pData += sizeof(UINT8);
dflet 0:50cedd586816 96 pData->uLength -= sizeof(UINT8);
dflet 0:50cedd586816 97 iter--;
dflet 0:50cedd586816 98 }
dflet 0:50cedd586816 99
dflet 0:50cedd586816 100 return result;
dflet 0:50cedd586816 101 }
dflet 0:50cedd586816 102
dflet 0:50cedd586816 103
dflet 0:50cedd586816 104 int WSCore_DataRecv(UINT16 uConnection,struct HttpBlob * pData)
dflet 0:50cedd586816 105 {
dflet 0:50cedd586816 106 UINT8 NextBlock;
dflet 0:50cedd586816 107 int lengthLeft;
dflet 0:50cedd586816 108 UINT16 final,RSV,Opcode;
dflet 0:50cedd586816 109 int PayloadLength;
dflet 0:50cedd586816 110 UINT8 iter;
dflet 0:50cedd586816 111 char *PayloadData;
dflet 0:50cedd586816 112 int RecvLength = (int)pData->uLength;
dflet 0:50cedd586816 113
dflet 0:50cedd586816 114
dflet 0:50cedd586816 115 if(!RecvMore)
dflet 0:50cedd586816 116 {
dflet 0:50cedd586816 117 //Parse the first byte
dflet 0:50cedd586816 118 NextBlock= *(pData->pData);
dflet 0:50cedd586816 119 pData->pData += sizeof(UINT8);
dflet 0:50cedd586816 120 pData->uLength -= sizeof(UINT8);
dflet 0:50cedd586816 121
dflet 0:50cedd586816 122 //Mask bits to get header fields
dflet 0:50cedd586816 123 final = (NextBlock&(0x80));
dflet 0:50cedd586816 124 RSV = (NextBlock&(0x70));
dflet 0:50cedd586816 125 Opcode = ((NextBlock&(0x0F)));
dflet 0:50cedd586816 126
dflet 0:50cedd586816 127 //If Final bit is set, this is the last data byte from client - terminating condition
dflet 0:50cedd586816 128 if(final)
dflet 0:50cedd586816 129 HttpDebug("Final datablock received \n\r");
dflet 0:50cedd586816 130
dflet 0:50cedd586816 131
dflet 0:50cedd586816 132 //Inform user about the opcode
dflet 0:50cedd586816 133 HttpDebug("Opcode is %d\n\r",Opcode);
dflet 0:50cedd586816 134
dflet 0:50cedd586816 135 switch(Opcode)
dflet 0:50cedd586816 136 {
dflet 0:50cedd586816 137 case WS_TEXT:
dflet 0:50cedd586816 138 HttpDebug("Text data\n\r");
dflet 0:50cedd586816 139 break;
dflet 0:50cedd586816 140 case WS_BINARY:
dflet 0:50cedd586816 141 HttpDebug("Binary data\n\r");
dflet 0:50cedd586816 142 break;
dflet 0:50cedd586816 143 case WS_CLOSE:
dflet 0:50cedd586816 144 HttpDebug("Client has requested connection to be closed\n\r");
dflet 0:50cedd586816 145 Close = 1;
dflet 0:50cedd586816 146 WSStatusString(WS_STATUS_OK,pData);
dflet 0:50cedd586816 147 WSCore_DataSend(uConnection,*pData,Opcode);
dflet 0:50cedd586816 148 return 1;
dflet 0:50cedd586816 149 case WS_CONTINUATION:
dflet 0:50cedd586816 150 break;
dflet 0:50cedd586816 151 case WS_PING:
dflet 0:50cedd586816 152 HttpDebug("Ping received\n\r");
dflet 0:50cedd586816 153 Ping = 1;
dflet 0:50cedd586816 154 break;
dflet 0:50cedd586816 155 case WS_PONG:
dflet 0:50cedd586816 156 HttpDebug("Pong received\n\r");
dflet 0:50cedd586816 157 break;
dflet 0:50cedd586816 158 default:
dflet 0:50cedd586816 159 HttpDebug("This is unsupported\n\r");
dflet 0:50cedd586816 160 break;
dflet 0:50cedd586816 161 }
dflet 0:50cedd586816 162
dflet 0:50cedd586816 163
dflet 0:50cedd586816 164 ///If header supports extension, send back error
dflet 0:50cedd586816 165 ///Send error frame : TODO
dflet 0:50cedd586816 166 if(RSV)
dflet 0:50cedd586816 167 HttpDebug("Unsupported extension\n\r");
dflet 0:50cedd586816 168
dflet 0:50cedd586816 169 //Parse the second byte
dflet 0:50cedd586816 170 NextBlock= *(pData->pData);
dflet 0:50cedd586816 171 pData->pData += sizeof(UINT8);
dflet 0:50cedd586816 172 pData->uLength -= sizeof(UINT8);
dflet 0:50cedd586816 173
dflet 0:50cedd586816 174 Mask = (UINT8)(NextBlock&(0x80));
dflet 0:50cedd586816 175 PayloadLength = (NextBlock&(0x7F));
dflet 0:50cedd586816 176
dflet 0:50cedd586816 177 //Payload length cases
dflet 0:50cedd586816 178 // If the payload length is 0x7E, the next 2 bytes represent the length
dflet 0:50cedd586816 179 if(PayloadLength == 0x7E)
dflet 0:50cedd586816 180 {
dflet 0:50cedd586816 181 iter = 2;
dflet 0:50cedd586816 182 PayloadLength = Payloadlength(pData, iter);
dflet 0:50cedd586816 183 }
dflet 0:50cedd586816 184
dflet 0:50cedd586816 185 // If the payload length is 0x7F, the next 8 bytes represent the length
dflet 0:50cedd586816 186 if(PayloadLength == 0x7F)
dflet 0:50cedd586816 187 {
dflet 0:50cedd586816 188 iter = 8;
dflet 0:50cedd586816 189 PayloadLength = Payloadlength(pData, iter);
dflet 0:50cedd586816 190 }
dflet 0:50cedd586816 191
dflet 0:50cedd586816 192 PayloadData = (char *)malloc(PayloadLength);
dflet 0:50cedd586816 193 if(PayloadData == NULL)
dflet 0:50cedd586816 194 {
dflet 0:50cedd586816 195 return 0;
dflet 0:50cedd586816 196 }
dflet 0:50cedd586816 197 memset(PayloadData,'\0',PayloadLength);
dflet 0:50cedd586816 198 GlobRecvBuf = PayloadData;
dflet 0:50cedd586816 199 GlobPayloadLen = PayloadLength;
dflet 0:50cedd586816 200
dflet 0:50cedd586816 201 // If mask bit is set, the 4 bytes after payload length represent the masking key
dflet 0:50cedd586816 202 if(Mask)
dflet 0:50cedd586816 203 {
dflet 0:50cedd586816 204 memcpy(MaskKey,pData->pData,4);
dflet 0:50cedd586816 205 pData->pData += sizeof(UINT32);
dflet 0:50cedd586816 206 pData->uLength -= sizeof(UINT32);
dflet 0:50cedd586816 207 }
dflet 0:50cedd586816 208
dflet 0:50cedd586816 209 int RecvLength = (int)pData->uLength;
dflet 0:50cedd586816 210
dflet 0:50cedd586816 211 //Now, extract payload data
dflet 0:50cedd586816 212 memcpy(GlobRecvBuf,(const char *)(pData->pData),RecvLength);
dflet 0:50cedd586816 213
dflet 0:50cedd586816 214 // Go back and get more data.
dflet 0:50cedd586816 215 if(PayloadLength > RecvLength)
dflet 0:50cedd586816 216 {
dflet 0:50cedd586816 217 GlobRecvLen = RecvLength; // Websocket header has 8 bytes that were also received.
dflet 0:50cedd586816 218 RecvMore = 1;
dflet 0:50cedd586816 219 return 1;
dflet 0:50cedd586816 220 }
dflet 0:50cedd586816 221 }
dflet 0:50cedd586816 222
dflet 0:50cedd586816 223 else
dflet 0:50cedd586816 224 {
dflet 0:50cedd586816 225 memcpy(GlobRecvBuf+GlobRecvLen,(const char *)(pData->pData),RecvLength);
dflet 0:50cedd586816 226 GlobRecvLen += RecvLength;
dflet 0:50cedd586816 227
dflet 0:50cedd586816 228 if(GlobRecvLen < GlobPayloadLen)
dflet 0:50cedd586816 229 return 1;
dflet 0:50cedd586816 230 }
dflet 0:50cedd586816 231
dflet 0:50cedd586816 232 RecvMore = 0;
dflet 0:50cedd586816 233
dflet 0:50cedd586816 234
dflet 0:50cedd586816 235 if(Mask)
dflet 0:50cedd586816 236 {
dflet 0:50cedd586816 237 //UINT8 MaskBlock;
dflet 0:50cedd586816 238 char *pData = GlobRecvBuf;
dflet 0:50cedd586816 239 lengthLeft = GlobPayloadLen;
dflet 0:50cedd586816 240 UINT8 MaskIndex = 0;
dflet 0:50cedd586816 241 while(MaskIndex < 4)
dflet 0:50cedd586816 242 {
dflet 0:50cedd586816 243 NextBlock = (UINT8)(*pData);
dflet 0:50cedd586816 244 NextBlock ^= MaskKey[MaskIndex];
dflet 0:50cedd586816 245 MaskIndex++;
dflet 0:50cedd586816 246 *pData = NextBlock;
dflet 0:50cedd586816 247 pData += sizeof(UINT8);
dflet 0:50cedd586816 248 lengthLeft -= sizeof(UINT8);
dflet 0:50cedd586816 249 if(lengthLeft == 0)
dflet 0:50cedd586816 250 break;
dflet 0:50cedd586816 251 if(MaskIndex == 4)
dflet 0:50cedd586816 252 MaskIndex = 0;
dflet 0:50cedd586816 253 }
dflet 0:50cedd586816 254
dflet 0:50cedd586816 255 }
dflet 0:50cedd586816 256
dflet 0:50cedd586816 257 *(GlobRecvBuf+GlobPayloadLen) = '\0';
dflet 0:50cedd586816 258
dflet 0:50cedd586816 259 struct HttpBlob PayLoad;
dflet 0:50cedd586816 260 PayLoad.pData = (UINT8 *)GlobRecvBuf;
dflet 0:50cedd586816 261 PayLoad.uLength = (UINT16)GlobPayloadLen;
dflet 0:50cedd586816 262
dflet 0:50cedd586816 263 if(Ping)
dflet 0:50cedd586816 264 {
dflet 0:50cedd586816 265 HttpDebug("You were Pinged\n\r");
dflet 0:50cedd586816 266 //You must pong
dflet 0:50cedd586816 267 Opcode = 0x0A;
dflet 0:50cedd586816 268 WSCore_DataSend(uConnection,PayLoad,Opcode);
dflet 0:50cedd586816 269 }
dflet 0:50cedd586816 270
dflet 0:50cedd586816 271 //free(pData->pData);
dflet 0:50cedd586816 272
dflet 0:50cedd586816 273 //Send this data to main
dflet 0:50cedd586816 274 WebSocketRecvEventHandler(uConnection,GlobRecvBuf);
dflet 0:50cedd586816 275
dflet 0:50cedd586816 276
dflet 0:50cedd586816 277 return 1;
dflet 0:50cedd586816 278
dflet 0:50cedd586816 279 }
dflet 0:50cedd586816 280
dflet 0:50cedd586816 281 /*!
dflet 0:50cedd586816 282 * \brief Sends data to a websocket client
dflet 0:50cedd586816 283 *
dflet 0:50cedd586816 284 * \param[in] uConnection Connection number on HTTP server.
dflet 0:50cedd586816 285 * \param[in] PayLoad Structure holding the payload data and the size of the data
dflet 0:50cedd586816 286 * \param[in] Opcode User provides data type (text/binary/ping/pong/close).
dflet 0:50cedd586816 287 *
dflet 0:50cedd586816 288 * \return 1 - If packet was successfully received, parsed and sent to the user API
dflet 0:50cedd586816 289 * 0 - Error
dflet 0:50cedd586816 290 */
dflet 0:50cedd586816 291 int WSCore_DataSend(UINT16 uConnection, struct HttpBlob PayLoad, UINT8 Opcode)
dflet 0:50cedd586816 292 {
dflet 0:50cedd586816 293 UINT16 usTotalLength;
dflet 0:50cedd586816 294 UINT8 usNextBlock;
dflet 0:50cedd586816 295 UINT16 usPayloadLen; // The heap cannot support beyond 65kb
dflet 0:50cedd586816 296 char *pucPayLoadData = (char *)PayLoad.pData;
dflet 0:50cedd586816 297
dflet 0:50cedd586816 298 usNextBlock = 0;
dflet 6:37fb696395d7 299
dflet 0:50cedd586816 300 if(Opcode != 0x02)
dflet 0:50cedd586816 301 usTotalLength = strlen(pucPayLoadData);
dflet 0:50cedd586816 302 else
dflet 0:50cedd586816 303 usTotalLength = PayLoad.uLength;
dflet 0:50cedd586816 304
dflet 0:50cedd586816 305 do{
dflet 18:3f1b52616d00 306 wait_ms(10);
dflet 0:50cedd586816 307 ///Is this the final packet?
dflet 0:50cedd586816 308 if(usTotalLength < FRAGMENT_LENGTH)
dflet 0:50cedd586816 309 {
dflet 0:50cedd586816 310 //final = 0x1;
dflet 0:50cedd586816 311 usNextBlock |= 0x80;
dflet 0:50cedd586816 312 }
dflet 0:50cedd586816 313 ///Add opcode to the header
dflet 0:50cedd586816 314 usNextBlock |= Opcode;
dflet 0:50cedd586816 315
dflet 0:50cedd586816 316 /// Add this byte to the sendpacket
dflet 0:50cedd586816 317 HttpResponse_AddCharToResponseHeaders(usNextBlock);
dflet 18:3f1b52616d00 318
dflet 0:50cedd586816 319 ///Reset byte
dflet 0:50cedd586816 320 usNextBlock = 0x0;
dflet 0:50cedd586816 321 ///Mask bit is always set to 0 from server to client
dflet 0:50cedd586816 322
dflet 0:50cedd586816 323 ///PayloadLen field
dflet 0:50cedd586816 324 if(usTotalLength <= 125)
dflet 0:50cedd586816 325 usPayloadLen = usTotalLength;
dflet 0:50cedd586816 326 else
dflet 0:50cedd586816 327 usPayloadLen = (126);
dflet 0:50cedd586816 328
dflet 0:50cedd586816 329 usNextBlock |= (UINT8)usPayloadLen;
dflet 0:50cedd586816 330
dflet 0:50cedd586816 331 /// Add this byte to the sendpacket
dflet 0:50cedd586816 332 HttpResponse_AddCharToResponseHeaders(usNextBlock);
dflet 18:3f1b52616d00 333
dflet 0:50cedd586816 334 /// If payload length is more than 125 bytes, we need 16 bits to represent it.
dflet 0:50cedd586816 335 if(usPayloadLen == (126))
dflet 0:50cedd586816 336 {
dflet 0:50cedd586816 337
dflet 0:50cedd586816 338 if(usTotalLength < FRAGMENT_LENGTH)
dflet 0:50cedd586816 339 usPayloadLen = usTotalLength;
dflet 0:50cedd586816 340 else
dflet 0:50cedd586816 341 usPayloadLen = FRAGMENT_LENGTH;
dflet 0:50cedd586816 342
dflet 0:50cedd586816 343 if(usPayloadLen >= FRAGMENT_LENGTH - 4)
dflet 0:50cedd586816 344 usPayloadLen = FRAGMENT_LENGTH - 4;
dflet 0:50cedd586816 345
dflet 0:50cedd586816 346 usNextBlock = (char)(usPayloadLen>>8);
dflet 0:50cedd586816 347 HttpResponse_AddCharToResponseHeaders(usNextBlock);
dflet 0:50cedd586816 348 usNextBlock = (char)(usPayloadLen);
dflet 0:50cedd586816 349 HttpResponse_AddCharToResponseHeaders(usNextBlock);
dflet 0:50cedd586816 350 }
dflet 0:50cedd586816 351
dflet 0:50cedd586816 352 HttpResponse_AddStringToResponseHeaders(pucPayLoadData,(usPayloadLen));
dflet 18:3f1b52616d00 353 wait_ms(2);
dflet 18:3f1b52616d00 354 if(!WS_SendPacket(uConnection)){
dflet 18:3f1b52616d00 355 Uart_Write((uint8_t*)"WS_SendPacket error \n\r");
dflet 0:50cedd586816 356 return 0;
dflet 18:3f1b52616d00 357 }
dflet 0:50cedd586816 358 if(Opcode == WS_CLOSE)
dflet 0:50cedd586816 359 {
dflet 18:3f1b52616d00 360 Uart_Write((uint8_t*)"WS_Close \n\r");
dflet 0:50cedd586816 361 sl_WebSocketCloseEvtHdlr();
dflet 0:50cedd586816 362 wait(1);
dflet 0:50cedd586816 363 (HttpCore_CloseConnection(uConnection));
dflet 0:50cedd586816 364 return 1;
dflet 0:50cedd586816 365 }
dflet 0:50cedd586816 366
dflet 0:50cedd586816 367 usTotalLength -= (usPayloadLen);
dflet 0:50cedd586816 368 // Reset to continuation frame if packet is larger than max fragment size
dflet 0:50cedd586816 369 Opcode = WS_CONTINUATION;
dflet 0:50cedd586816 370
dflet 0:50cedd586816 371 ///Reset byte
dflet 0:50cedd586816 372 usNextBlock = 0x0;
dflet 0:50cedd586816 373
dflet 0:50cedd586816 374 //Update pointer
dflet 0:50cedd586816 375 pucPayLoadData += usPayloadLen;
dflet 0:50cedd586816 376
dflet 0:50cedd586816 377 }while(usTotalLength > 0);
dflet 0:50cedd586816 378
dflet 0:50cedd586816 379 return 1;
dflet 0:50cedd586816 380 }
dflet 0:50cedd586816 381
dflet 0:50cedd586816 382
dflet 0:50cedd586816 383 /**
dflet 0:50cedd586816 384 * Returns status string according to status code - CHANGE
dflet 0:50cedd586816 385 */
dflet 0:50cedd586816 386 void WSStatusString(UINT32 WS_Status, struct HttpBlob* status)
dflet 0:50cedd586816 387 {
dflet 0:50cedd586816 388 HttpString_utoa(WS_Status, status);
dflet 0:50cedd586816 389 struct HttpBlob blob = {0, NULL};
dflet 0:50cedd586816 390 switch (WS_Status)
dflet 0:50cedd586816 391 {
dflet 0:50cedd586816 392 case WS_STATUS_OK:
dflet 0:50cedd586816 393 HttpBlobSetConst(blob, WS_STATUS_OK_STR);
dflet 0:50cedd586816 394 break;
dflet 0:50cedd586816 395 case WS_STATUS_GOING_AWAY:
dflet 0:50cedd586816 396 HttpBlobSetConst(blob, WS_STATUS_GOING_AWAY_STR);
dflet 0:50cedd586816 397 break;
dflet 0:50cedd586816 398 case WS_STATUS_ERROR_DATATYPE:
dflet 0:50cedd586816 399 HttpBlobSetConst(blob, WS_STATUS_ERROR_DATATYPE_STR);
dflet 0:50cedd586816 400 break;
dflet 0:50cedd586816 401 case WS_STATUS_ERROR_ENCODING:
dflet 0:50cedd586816 402 HttpBlobSetConst(blob, WS_STATUS_ERROR_ENCODING_STR);
dflet 0:50cedd586816 403 break;
dflet 0:50cedd586816 404 case WS_STATUS_ERROR_OVERFLOW:
dflet 0:50cedd586816 405 HttpBlobSetConst(blob, WS_STATUS_ERROR_OVERFLOW_STR);
dflet 0:50cedd586816 406 break;
dflet 0:50cedd586816 407 case WS_STATUS_ERROR_PROTOCOL:
dflet 0:50cedd586816 408 HttpBlobSetConst(blob, WS_STATUS_ERROR_PROTOCOL_STR);
dflet 0:50cedd586816 409 break;
dflet 0:50cedd586816 410 case WS_STATUS_ERROR_UNEXPECTED:
dflet 0:50cedd586816 411 HttpBlobSetConst(blob, WS_STATUS_ERROR_UNEXPECTED_STR);
dflet 0:50cedd586816 412 break;
dflet 0:50cedd586816 413 default:
dflet 0:50cedd586816 414 HttpDebug("Unknown response status \n\r");
dflet 0:50cedd586816 415 HttpAssert(0);
dflet 0:50cedd586816 416 break;
dflet 0:50cedd586816 417 }
dflet 0:50cedd586816 418 memcpy(status->pData + status->uLength, blob.pData, blob.uLength);
dflet 0:50cedd586816 419 return;
dflet 0:50cedd586816 420 }
dflet 0:50cedd586816 421
dflet 0:50cedd586816 422 /// @}
dflet 0:50cedd586816 423