2025-02-27 17:59:18 +08:00

154 lines
4.5 KiB
C
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2013-05-05 Bernard the first version
* 2013-06-10 Bernard fix the slow speed issue when download file.
* 2015-11-14 aozima add content_length_remainder.
* 2017-12-23 aozima update gethostbyname to getaddrinfo.
* 2018-01-04 aozima add ipv6 address support.
* 2018-07-26 chenyong modify log information
* 2018-08-07 chenyong modify header processing
*/
/*******************************************************************
* 组件名称http 组件
* 组件说明http库
*******************************************************************/
#ifndef __WEBCLIENT_H__
#define __WEBCLIENT_H__
#include <common/bk_typedef.h>
#include <os/mem.h>
#include <os/str.h>
#include <os/os.h>
#if defined(WEBCLIENT_USING_MBED_TLS) || defined(WEBCLIENT_USING_SAL_TLS)
#include <tls_client.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef web_malloc
#define web_malloc os_malloc
#endif
#ifndef web_calloc
#define web_calloc os_calloc
#endif
#ifndef web_realloc
#define web_realloc os_realloc
#endif
#ifndef web_free
#define web_free os_free
#endif
#ifndef web_strdup
#define web_strdup os_strdup
#endif
#define WEBCLIENT_SW_VERSION "2.2.0"
#define WEBCLIENT_SW_VERSION_NUM 0x20200
#define WEBCLIENT_HEADER_BUFSZ 4096
#define WEBCLIENT_RESPONSE_BUFSZ 4096
enum WEBCLIENT_STATUS
{
WEBCLIENT_OK,
WEBCLIENT_ERROR,
WEBCLIENT_TIMEOUT,
WEBCLIENT_NOMEM,
WEBCLIENT_NOSOCKET,
WEBCLIENT_NOBUFFER,
WEBCLIENT_CONNECT_FAILED,
WEBCLIENT_DISCONNECT,
WEBCLIENT_FILE_ERROR,
};
enum WEBCLIENT_METHOD
{
WEBCLIENT_USER_METHOD,
WEBCLIENT_GET,
WEBCLIENT_POST,
};
struct webclient_header
{
char *buffer;
size_t length; /* content header buffer size */
size_t size; /* maximum support header size */
};
struct webclient_session
{
struct webclient_header *header; /* webclient response header information */
int socket;
int resp_status;
char *host; /* server host */
char *req_url; /* HTTP request address*/
int chunk_sz;
int chunk_offset;
int content_length;
char *Cookie;
size_t content_remainder; /* remainder of content length */
BOOL is_tls; /* HTTPS connect */
#ifdef WEBCLIENT_USING_MBED_TLS
MbedTLSSession *tls_session; /* mbedtls connect session */
#endif
};
/* create webclient session and set header response size */
struct webclient_session *webclient_session_create(size_t header_sz);
/* send HTTP GET request */
int webclient_get(struct webclient_session *session, const char *URI);
int webclient_get_position(struct webclient_session *session, const char *URI, int position);
/* send HTTP POST request */
int webclient_post(struct webclient_session *session, const char *URI, const void *post_data, size_t data_len);
/* close and release wenclient session */
int webclient_close(struct webclient_session *session);
int webclient_set_timeout(struct webclient_session *session, int millisecond);
/* send or receive data from server */
int webclient_read(struct webclient_session *session, void *buffer, size_t size);
int webclient_write(struct webclient_session *session, const void *buffer, size_t size);
/* webclient GET/POST header buffer operate by the header fields */
int webclient_header_fields_add(struct webclient_session *session, const char *fmt, ...);
const char *webclient_header_fields_get(struct webclient_session *session, const char *fields);
/* send HTTP POST/GET request, and get response data */
int webclient_response(struct webclient_session *session, void **response, size_t *resp_len);
int webclient_request(const char *URI, const char *header, const void *post_data, size_t data_len, void **response, size_t *resp_len);
int webclient_request_header_add(char **request_header, const char *fmt, ...);
int webclient_resp_status_get(struct webclient_session *session);
int webclient_content_length_get(struct webclient_session *session);
#ifdef __cplusplus
}
#endif
int test_http(void);
#endif