/** * @ingroup altcp * altcp_new_ip_type: called by applications to allocate a new pcb with the help of an * allocator function. * * @param allocator allocator function and argument * @param ip_type IP version of the pcb (@ref lwip_ip_addr_type) * @return a new altcp_pcb or NULL on error */ struct altcp_pcb * altcp_new_ip_type(altcp_allocator_t *allocator, u8_t ip_type) { struct altcp_pcb *conn; if (allocator == NULL) { /* no allocator given, create a simple TCP connection */ return altcp_tcp_new_ip_type(ip_type); } if (allocator->alloc == NULL) { /* illegal allocator */ return NULL; } conn = allocator->alloc(allocator->arg, ip_type); if (conn == NULL) { /* allocation failed */ return NULL; } return conn; }
static struct altcp_pcb* smtp_setup_pcb(struct smtp_session *s, const ip_addr_t* remote_ip) { struct altcp_pcb* pcb; LWIP_UNUSED_ARG(remote_ip); #if LWIP_ALTCP && LWIP_ALTCP_TLS if (smtp_server_tls_config) { pcb = altcp_tls_new(smtp_server_tls_config, IP_GET_TYPE(remote_ip)); } else #endif { pcb = altcp_tcp_new_ip_type(IP_GET_TYPE(remote_ip)); } if (pcb != NULL) { altcp_arg(pcb, s); altcp_recv(pcb, smtp_tcp_recv); altcp_err(pcb, smtp_tcp_err); altcp_poll(pcb, smtp_tcp_poll, SMTP_POLL_INTERVAL); altcp_sent(pcb, smtp_tcp_sent); } return pcb; }
/** altcp_tcp allocator function fitting to @ref altcp_allocator_t / @ref altcp_new. * * arg pointer is not used for TCP. */ struct altcp_pcb * altcp_tcp_alloc(void *arg, u8_t ip_type) { LWIP_UNUSED_ARG(arg); return altcp_tcp_new_ip_type(ip_type); }