A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.
Dependents: oldheating gps motorhome heating
tcp/http/httpquery.c
- Committer:
- andrewboyson
- Date:
- 2019-02-22
- Revision:
- 125:8c84daac38ab
- Parent:
- 110:67c96c143c2a
- Child:
- 129:9c57197fb698
File content as of revision 125:8c84daac38ab:
#include <stdio.h> static int hexToInt(char c) { int nibble; if (c >= '0' && c <= '9') nibble = c - '0'; if (c >= 'A' && c <= 'F') nibble = c - 'A' + 0xA; if (c >= 'a' && c <= 'f') nibble = c - 'a' + 0xA; return nibble; } void HttpQueryUnencode(char* pValue) { char* pDst = pValue; int a; for (char* pSrc = pValue; *pSrc; pSrc++) { char c = *pSrc; switch (c) { case '+': c = ' '; break; case '%': c = *++pSrc; if (c == 0) break; a = hexToInt(c); a <<= 4; c = *++pSrc; if (c == 0) break; a += hexToInt(c); c = a; break; default: c = *pSrc; break; } *pDst++ = c; } *pDst = 0; } char* HttpQuerySplit(char* p, char** ppName, char** ppValue) //returns the start of the next name value pair { *ppName = p; //Record the start of the name *ppValue = NULL; while (*p != '=') //Loop to an '=' { if (*p == 0) return 0; p++; } *p = 0; //Terminate the name by replacing the '=' with a NUL char p++; //Move on to the start of the value *ppValue = p; //Record the start of the value while (*p != '&') //Loop to a '&' { if (*p == 0) return 0; p++; } *p = 0; //Terminate the value by replacing the '&' with a NULL return p + 1; }