mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2026-05-12 19:26:52 +08:00
altcp: simplify creating different types by adding an allocator concept
This is done with an example in the http_client Signed-off-by: goldsimon <goldsimon@gmx.de>
This commit is contained in:
@@ -66,6 +66,7 @@ typedef err_t (*altcp_sent_fn)(void *arg, struct altcp_pcb *conn, u16_t len);
|
||||
typedef err_t (*altcp_poll_fn)(void *arg, struct altcp_pcb *conn);
|
||||
typedef void (*altcp_err_fn)(void *arg, err_t err);
|
||||
|
||||
typedef struct altcp_pcb* (*altcp_new_fn)(void *arg, u8_t ip_type);
|
||||
|
||||
struct altcp_pcb {
|
||||
const struct altcp_functions *fns;
|
||||
@@ -82,6 +83,15 @@ struct altcp_pcb {
|
||||
u8_t pollinterval;
|
||||
};
|
||||
|
||||
typedef struct altcp_allocator_s {
|
||||
altcp_new_fn alloc;
|
||||
void *arg;
|
||||
} altcp_allocator_t;
|
||||
|
||||
struct altcp_pcb *altcp_new(altcp_allocator_t *allocator);
|
||||
struct altcp_pcb *altcp_new_ip6(altcp_allocator_t *allocator);
|
||||
struct altcp_pcb *altcp_new_ip_type(altcp_allocator_t *allocator, u8_t ip_type);
|
||||
|
||||
void altcp_arg(struct altcp_pcb *conn, void *arg);
|
||||
void altcp_accept(struct altcp_pcb *conn, altcp_accept_fn accept);
|
||||
void altcp_recv(struct altcp_pcb *conn, altcp_recv_fn recv);
|
||||
@@ -145,6 +155,10 @@ enum tcp_state altcp_dbg_get_tcp_state(struct altcp_pcb *conn);
|
||||
#define altcp_tcp_new tcp_new
|
||||
#define altcp_tcp_new_ip6 tcp_new_ip6
|
||||
|
||||
#define altcp_new(allocator) tcp_new()
|
||||
#define altcp_new_ip6(allocator) tcp_new_ip6()
|
||||
#define altcp_new_ip_type(allocator, ip_type) tcp_new_ip_type(ip_type)
|
||||
|
||||
#define altcp_arg tcp_arg
|
||||
#define altcp_accept tcp_accept
|
||||
#define altcp_recv tcp_recv
|
||||
|
||||
@@ -58,6 +58,8 @@ struct altcp_pcb *altcp_tcp_new_ip_type(u8_t ip_type);
|
||||
#define altcp_tcp_new() altcp_tcp_new_ip_type(IPADDR_TYPE_V4)
|
||||
#define altcp_tcp_new_ip6() altcp_tcp_new_ip_type(IPADDR_TYPE_V6)
|
||||
|
||||
struct altcp_pcb *altcp_tcp_alloc(void *arg, u8_t ip_type);
|
||||
|
||||
struct tcp_pcb;
|
||||
struct altcp_pcb *altcp_tcp_wrap(struct tcp_pcb *tpcb);
|
||||
|
||||
|
||||
@@ -82,6 +82,13 @@ void altcp_tls_free_config(struct altcp_tls_config *conf);
|
||||
*/
|
||||
struct altcp_pcb *altcp_tls_new(struct altcp_tls_config *config, struct altcp_pcb *inner_pcb);
|
||||
|
||||
/** @ingroup altcp_tls
|
||||
* Create new ALTCP_TLS layer
|
||||
* This allocator function fits to @ref altcp_allocator_t / @ref altcp_new.
|
||||
* 'arg' must contain a struct altcp_tls_config *.
|
||||
*/
|
||||
struct altcp_pcb *altcp_tls_alloc(void *arg, u8_t ip_type);
|
||||
|
||||
/** @ingroup altcp_tls
|
||||
* Return pointer to internal TLS context so application can tweak it.
|
||||
* Real type depends on port (e.g. mbedtls)
|
||||
|
||||
@@ -123,8 +123,8 @@ typedef struct _httpc_connection {
|
||||
u8_t use_proxy;
|
||||
/* @todo: add username:pass? */
|
||||
|
||||
#if LWIP_ALTCP_TLS
|
||||
struct altcp_tls_config *tls_config;
|
||||
#if LWIP_ALTCP
|
||||
altcp_allocator_t *altcp_allocator;
|
||||
#endif
|
||||
|
||||
/* this callback is called when the transfer is finished (or aborted) */
|
||||
|
||||
Reference in New Issue
Block a user