RTL8710_SDK_GCC_VERSION/component/common/utilities/http_client.c
RtlduinoMan 1d3357d3b0 GCC SDK RTL8710 basic version (including the window platform cygwin installation and Ubuntu platform Linux Installation routines),
including cross compilation of the installation, compile, link, run, debug, and so on.
SDK implementation of the function:
1, WiFi connection settings (including AP mode and STA mode).
2, peripheral resource control (including GPIO, SPI, UART, IIC, etc.).
3, the user uses the sample method.
2016-09-08 20:52:17 +08:00

137 lines
3.3 KiB
C

//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
#include "platform/platform_stdlib.h"
#include "FreeRTOS.h"
const char * http_strstr(const char *str1, const char *str2) {
char *a, *b;
/* First scan quickly through the two strings looking for a
* single-character match. When it's found, then compare the
* rest of the substring.
*/
b = (char *)str2;
if (*b == 0) {
return str1;
}
for ( ; *str1 != 0; str1 += 1) {
if (*str1 != *b) {
continue;
}
a = (char *)str1;
while (1) {
if (*b == 0) {
return str1;
}
if (*a++ != *b++) {
break;
}
}
b = (char *)str2;
}
return (char *) 0;
}
static void* http_malloc(unsigned int size)
{
return pvPortMalloc(size);
}
void http_free(void *buf)
{
vPortFree(buf);
}
static char *http_itoa(int value)
{
char *val_str;
int tmp = value, len = 1;
while((tmp /= 10) > 0)
len ++;
val_str = (char *) http_malloc(len + 1);
sprintf(val_str, "%d", value);
return val_str;
}
char *http_post_header(char *host, char *resource, char *type, int data_len)
{
char *len_str = http_itoa(data_len);
char *header = (char *) http_malloc(strlen("POST ") + strlen(resource) + strlen(" HTTP/1.1\r\nHost: ") + strlen(host) +
strlen("\r\nContent-Type: ") + strlen(type) + strlen("\r\nContent-Length: ") + strlen(len_str) + strlen("\r\n\r\n") + 1);
sprintf(header, "POST %s HTTP/1.1\r\nHost: %s\r\nContent-Type: %s\r\nContent-Length: %s\r\n\r\n", resource, host, type, len_str);
http_free(len_str);
return header;
}
char *http_get_header(char *host, char *resource)
{
char *header = (char *) http_malloc(strlen("GET ") + strlen(resource) + strlen(" HTTP/1.1\r\nHost: ") + strlen(host) + strlen("\r\n\r\n") + 1);
sprintf(header, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", resource, host);
return header;
}
char *http_response_header(char *buf, int response_len)
{
char *http_response, *http_header = NULL, *header_end;
int header_len;
http_response = (char *) http_malloc(response_len + 1);
memcpy(http_response, buf, response_len);
http_response[response_len] = '\0';
if(strncmp(http_response, "HTTP", 4) == 0) {
if((header_end = (char *)http_strstr(http_response, "\r\n\r\n")) != NULL) {
header_end += 4;
header_len = header_end - http_response;
http_header = (char *) http_malloc(header_len + 1);
memcpy(http_header, http_response, header_len);
http_header[header_len] = '\0';
}
}
http_free(http_response);
return http_header;
}
char *http_response_body(char *buf, int response_len)
{
char *http_response, *http_body = NULL, *body_start;
int body_len;
http_response = (char *) http_malloc(response_len + 1);
memcpy(http_response, buf, response_len);
http_response[response_len] = '\0';
if(strncmp(http_response, "HTTP", 4) == 0) {
if((body_start = (char *)http_strstr(http_response, "\r\n\r\n")) != NULL) {
body_start += 4;
body_len = http_response + response_len - body_start;
if(body_len > 0) {
http_body = (char *) http_malloc(body_len + 1);
memcpy(http_body, body_start, body_len);
http_body[body_len] = '\0';
}
http_free(http_response);
}
else {
http_body = http_response;
}
}
else {
http_body = http_response;
}
return http_body;
}