15#include <lwip/ip_addr.h>
16#include <lwip/sockets.h>
17#if PICO_TCP_ENABLE_TLS
18#include <lwip/altcp.h>
19#include <lwip/altcp_tls.h>
72 bool connect(
const char* host,
int port,
bool useTls =
false);
73 #if PICO_TCP_ENABLE_TLS
75 static err_t onConnected(
void* arg,
struct altcp_pcb* conn, err_t err);
76 static void onError(
void* arg, err_t err);
82 int send(
const char* buffer,
size_t size);
87 int recv(
char *buffer,
size_t size, uint32_t timeout_ms);
110 #if PICO_TCP_ENABLE_TLS
111 bool isValid()
const {
return sockfd >= 0 || tls_pcb !=
nullptr; }
139 static err_t
tlsRecvCallback(
void* arg,
struct altcp_pcb* conn,
struct pbuf* p, err_t err);
140 static err_t
acceptCallback(
void* arg,
struct altcp_pcb* new_conn, err_t err);
150 #if PICO_TCP_ENABLE_TLS
152 struct altcp_tls_config* tls_config =
nullptr;
153 struct altcp_pcb* tls_pcb =
nullptr;
General-purpose TCP socket wrapper with optional TLS support via mbedTLS (altcp).
bool isValid() const
Check if the socket is valid.
Tcp * accept()
Accept a new incoming connection (for server use).
bool connect(const char *host, int port, bool useTls=false)
Connect to a remote host.
static err_t tlsRecvCallback(void *arg, struct altcp_pcb *conn, struct pbuf *p, err_t err)
bool bindAndListenTls(int port)
char hostname[64]
Hostname for TLS connections.
TaskHandle_t waiting_task
Task handle for async operations.
bool isConnected() const
Check if the socket is connected.
void setRootCACertificate(const std::string &pem)
Set the Root CA certificate to be used for client TLS connections (PEM format).
std::string getPeerIp() const
static err_t acceptCallback(void *arg, struct altcp_pcb *new_conn, err_t err)
struct altcp_tls_config * server_tls_config
bool connectTls(const ip_addr_t &ip, int port)
struct pbuf * recv_buffer
Buffer for TLS receive.
void setHostname(const char *name)
bool connectPlain(const ip_addr_t &ip, int port)
int send(const char *buffer, size_t size)
Send data over the connection.
Tcp & operator=(const Tcp &)=delete
void setServerTlsConfig(const std::string &certPem, const std::string &keyPem)
Set the certificate and key to use for server-side TLS (PEM format).
bool bindAndListenPlain(int port)
TaskHandle_t connectingTask
Task handle for async operations.
int close()
Close the connection and free resources.
bool bindAndListen(int port)
Bind and listen on a port for incoming connections (for server use).
int recv(char *buffer, size_t size, uint32_t timeout_ms)
Receive data from the connection.
std::string server_tls_cert
int getSocketFd() const
Get the raw socket file descriptor (may be -1 for TLS-only connection).
altcp_pcb * pending_client
For TLS: set by acceptCallback.
std::string server_tls_key
const char * getHostname() const
static constexpr size_t MAX_TLS_SEGMENT_SIZE