David Fletcher / Mbed 2 deprecated cc3100_Test_websock_Camera_CM4F

Dependencies:   mbed

Committer:
dflet
Date:
Wed Jun 24 09:54:16 2015 +0000
Revision:
0:50cedd586816
First commit work in progress

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 #include "string.h"
dflet 0:50cedd586816 15 #include <stdlib.h>
dflet 0:50cedd586816 16 #include "HttpString.h"
dflet 0:50cedd586816 17 #include "HttpDebug.h"
dflet 0:50cedd586816 18 //#include "HttpCore.h"
dflet 0:50cedd586816 19
dflet 0:50cedd586816 20 /**
dflet 0:50cedd586816 21 * @addtogroup HttpString
dflet 0:50cedd586816 22 * @{
dflet 0:50cedd586816 23 */
dflet 0:50cedd586816 24
dflet 0:50cedd586816 25 char digits[] = "0123456789";
dflet 0:50cedd586816 26 char hexDigits[] = "0123456789abcdef";
dflet 0:50cedd586816 27
dflet 0:50cedd586816 28 int HttpString_strcmp(struct HttpBlob first, struct HttpBlob second)
dflet 0:50cedd586816 29 {
dflet 0:50cedd586816 30 int min,res;
dflet 0:50cedd586816 31 if (first.uLength > second.uLength)
dflet 0:50cedd586816 32 min = second.uLength;
dflet 0:50cedd586816 33 else
dflet 0:50cedd586816 34 min = first.uLength;
dflet 0:50cedd586816 35
dflet 0:50cedd586816 36 // Compare a common length which might be equal
dflet 0:50cedd586816 37 res = memcmp(first.pData, second.pData, min);
dflet 0:50cedd586816 38 if (res != 0)
dflet 0:50cedd586816 39 return res;
dflet 0:50cedd586816 40
dflet 0:50cedd586816 41 // Common length is equal, so the longer blob is "larger"
dflet 0:50cedd586816 42 if (first.uLength > second.uLength)
dflet 0:50cedd586816 43 return 1;
dflet 0:50cedd586816 44 else if (first.uLength < second.uLength)
dflet 0:50cedd586816 45 return -1;
dflet 0:50cedd586816 46 else
dflet 0:50cedd586816 47 return 0;
dflet 0:50cedd586816 48 }
dflet 0:50cedd586816 49
dflet 0:50cedd586816 50 static void ToLower(char * str, UINT16 len)
dflet 0:50cedd586816 51 {
dflet 0:50cedd586816 52 int i;
dflet 0:50cedd586816 53 for (i=0 ; i<=len; i++)
dflet 0:50cedd586816 54 {
dflet 0:50cedd586816 55 if (str[i]>='A' && str[i]<='Z')
dflet 0:50cedd586816 56 str[i] = str[i] + 32;
dflet 0:50cedd586816 57 }
dflet 0:50cedd586816 58 }
dflet 0:50cedd586816 59
dflet 0:50cedd586816 60 UINT8* HttpString_nextToken(char* pToken, UINT16 uTokenLength, struct HttpBlob blob)
dflet 0:50cedd586816 61 {
dflet 0:50cedd586816 62 UINT8* pch = blob.pData;
dflet 0:50cedd586816 63 struct HttpBlob partialBlob;
dflet 0:50cedd586816 64 struct HttpBlob token;
dflet 0:50cedd586816 65 token.pData = (UINT8*)pToken;
dflet 0:50cedd586816 66 token.uLength = uTokenLength;
dflet 0:50cedd586816 67
dflet 0:50cedd586816 68 ToLower((char *)blob.pData, blob.uLength);
dflet 0:50cedd586816 69
dflet 0:50cedd586816 70 while (pch < blob.pData + blob.uLength)
dflet 0:50cedd586816 71 {
dflet 0:50cedd586816 72 // Calculate how many blob bytes we should search
dflet 0:50cedd586816 73 int nMaxCount = blob.uLength - (pch - blob.pData) - uTokenLength + 1;
dflet 0:50cedd586816 74 if (nMaxCount < 1){
dflet 0:50cedd586816 75 return NULL;
dflet 0:50cedd586816 76 }
dflet 0:50cedd586816 77 // Search for the first character of the token
dflet 0:50cedd586816 78 pch = (UINT8*)memchr(pch, pToken[0], nMaxCount);
dflet 0:50cedd586816 79 if (pch==NULL){
dflet 0:50cedd586816 80 return NULL;
dflet 0:50cedd586816 81 }
dflet 0:50cedd586816 82 // Found first character, now compare the rest
dflet 0:50cedd586816 83 partialBlob.pData = pch;
dflet 0:50cedd586816 84 partialBlob.uLength = uTokenLength;
dflet 0:50cedd586816 85 if (HttpString_strcmp(token, partialBlob)==0)
dflet 0:50cedd586816 86 return pch;
dflet 0:50cedd586816 87
dflet 0:50cedd586816 88 // Skip this byte, and look for the token in the rest of the blob
dflet 0:50cedd586816 89 ++pch;
dflet 0:50cedd586816 90 }
dflet 0:50cedd586816 91 return NULL;
dflet 0:50cedd586816 92 }
dflet 0:50cedd586816 93
dflet 0:50cedd586816 94 UINT8* HttpString_nextDelimiter(char* pToken, UINT16 uTokenLength, struct HttpBlob blob)
dflet 0:50cedd586816 95 {
dflet 0:50cedd586816 96 UINT8* pch = blob.pData;
dflet 0:50cedd586816 97 struct HttpBlob partialBlob;
dflet 0:50cedd586816 98 struct HttpBlob token;
dflet 0:50cedd586816 99 token.pData = (UINT8*)pToken;
dflet 0:50cedd586816 100 token.uLength = uTokenLength;
dflet 0:50cedd586816 101
dflet 0:50cedd586816 102 //ToLower((char *)blob.pData, blob.uLength);
dflet 0:50cedd586816 103
dflet 0:50cedd586816 104 while (pch < blob.pData + blob.uLength)
dflet 0:50cedd586816 105 {
dflet 0:50cedd586816 106 // Calculate how many blob bytes we should search
dflet 0:50cedd586816 107 int nMaxCount = blob.uLength - (pch - blob.pData) - uTokenLength + 1;
dflet 0:50cedd586816 108 if (nMaxCount < 1)
dflet 0:50cedd586816 109 return NULL;
dflet 0:50cedd586816 110
dflet 0:50cedd586816 111 // Search for the first character of the token
dflet 0:50cedd586816 112 pch = (UINT8*)memchr(pch, pToken[0], nMaxCount);
dflet 0:50cedd586816 113 if (pch==NULL)
dflet 0:50cedd586816 114 return NULL;
dflet 0:50cedd586816 115
dflet 0:50cedd586816 116 // Found first character, now compare the rest
dflet 0:50cedd586816 117 partialBlob.pData = pch;
dflet 0:50cedd586816 118 partialBlob.uLength = uTokenLength;
dflet 0:50cedd586816 119 if (HttpString_strcmp(token, partialBlob)==0)
dflet 0:50cedd586816 120 return pch;
dflet 0:50cedd586816 121
dflet 0:50cedd586816 122 // Skip this byte, and look for the token in the rest of the blob
dflet 0:50cedd586816 123 ++pch;
dflet 0:50cedd586816 124 }
dflet 0:50cedd586816 125 return NULL;
dflet 0:50cedd586816 126 }
dflet 0:50cedd586816 127
dflet 0:50cedd586816 128 UINT32 HttpString_atou(struct HttpBlob string)
dflet 0:50cedd586816 129 {
dflet 0:50cedd586816 130 return atoi((const char*)string.pData);
dflet 0:50cedd586816 131 }
dflet 0:50cedd586816 132
dflet 0:50cedd586816 133 void HttpString_utoa(UINT32 uNum, struct HttpBlob* pString)
dflet 0:50cedd586816 134 {
dflet 0:50cedd586816 135 char* ptr;
dflet 0:50cedd586816 136 UINT32 uTemp = uNum;
dflet 0:50cedd586816 137
dflet 0:50cedd586816 138 // value 0 is a special format
dflet 0:50cedd586816 139 if (uNum == 0)
dflet 0:50cedd586816 140 {
dflet 0:50cedd586816 141 pString->uLength = 1;
dflet 0:50cedd586816 142 *pString->pData = '0';
dflet 0:50cedd586816 143 return;
dflet 0:50cedd586816 144 }
dflet 0:50cedd586816 145
dflet 0:50cedd586816 146 // Find out the length of the number, in decimal base
dflet 0:50cedd586816 147 pString->uLength = 0;
dflet 0:50cedd586816 148 while (uTemp > 0)
dflet 0:50cedd586816 149 {
dflet 0:50cedd586816 150 uTemp /= 10;
dflet 0:50cedd586816 151 pString->uLength++;
dflet 0:50cedd586816 152 }
dflet 0:50cedd586816 153
dflet 0:50cedd586816 154 // Do the actual formatting, right to left
dflet 0:50cedd586816 155 uTemp = uNum;
dflet 0:50cedd586816 156 ptr = (char*)pString->pData + pString->uLength;
dflet 0:50cedd586816 157 while (uTemp > 0)
dflet 0:50cedd586816 158 {
dflet 0:50cedd586816 159 --ptr;
dflet 0:50cedd586816 160 *ptr = digits[uTemp % 10];
dflet 0:50cedd586816 161 uTemp /= 10;
dflet 0:50cedd586816 162 }
dflet 0:50cedd586816 163 }
dflet 0:50cedd586816 164
dflet 0:50cedd586816 165 void HttpString_htoa(UINT32 uNum, struct HttpBlob* pString, UINT8 bPadZero)
dflet 0:50cedd586816 166 {
dflet 0:50cedd586816 167 UINT8* ptr;
dflet 0:50cedd586816 168 UINT32 uTemp = uNum;
dflet 0:50cedd586816 169
dflet 0:50cedd586816 170 if (!bPadZero)
dflet 0:50cedd586816 171 {
dflet 0:50cedd586816 172 // value 0 is a special format
dflet 0:50cedd586816 173 if (uNum == 0)
dflet 0:50cedd586816 174 {
dflet 0:50cedd586816 175 pString->uLength = 1;
dflet 0:50cedd586816 176 *pString->pData = '0';
dflet 0:50cedd586816 177 return;
dflet 0:50cedd586816 178 }
dflet 0:50cedd586816 179
dflet 0:50cedd586816 180 // Find out the length of the number, in hexadecimal base
dflet 0:50cedd586816 181 pString->uLength = 0;
dflet 0:50cedd586816 182 while (uTemp > 0)
dflet 0:50cedd586816 183 {
dflet 0:50cedd586816 184 uTemp /= 16;
dflet 0:50cedd586816 185 pString->uLength++;
dflet 0:50cedd586816 186 }
dflet 0:50cedd586816 187 }
dflet 0:50cedd586816 188
dflet 0:50cedd586816 189 // Do the actual formatting, right to left
dflet 0:50cedd586816 190 uTemp = uNum;
dflet 0:50cedd586816 191 ptr = pString->pData + pString->uLength;
dflet 0:50cedd586816 192 while (ptr > pString->pData)
dflet 0:50cedd586816 193 {
dflet 0:50cedd586816 194 --ptr;
dflet 0:50cedd586816 195 *ptr = (UINT8)hexDigits[uTemp % 16];
dflet 0:50cedd586816 196 uTemp /= 16;
dflet 0:50cedd586816 197 }
dflet 0:50cedd586816 198 }
dflet 0:50cedd586816 199
dflet 0:50cedd586816 200 /// @}
dflet 0:50cedd586816 201