diff --git a/src/apps/altcp_tls/altcp_tls_mbedtls.c b/src/apps/altcp_tls/altcp_tls_mbedtls.c index d6ced89b..940d3e06 100644 --- a/src/apps/altcp_tls/altcp_tls_mbedtls.c +++ b/src/apps/altcp_tls/altcp_tls_mbedtls.c @@ -944,7 +944,8 @@ const struct altcp_functions altcp_mbedtls_functions = { altcp_default_setprio, altcp_mbedtls_dealloc, altcp_default_get_tcp_addrinfo, - altcp_default_get_ip + altcp_default_get_ip, + altcp_default_get_port #ifdef LWIP_DEBUG ,altcp_default_dbg_get_tcp_state #endif diff --git a/src/core/altcp.c b/src/core/altcp.c index 3e7fb9ff..0475828c 100644 --- a/src/core/altcp.c +++ b/src/core/altcp.c @@ -363,6 +363,15 @@ altcp_get_ip(struct altcp_pcb *conn, int local) return NULL; } +u16_t +altcp_get_port(struct altcp_pcb *conn, int local) +{ + if (conn && conn->fns && conn->fns->getport) { + return conn->fns->getport(conn, local); + } + return 0; +} + #ifdef LWIP_DEBUG enum tcp_state altcp_dbg_get_tcp_state(struct altcp_pcb *conn) @@ -513,6 +522,14 @@ altcp_default_get_ip(struct altcp_pcb *conn, int local) return NULL; } +u16_t +altcp_default_get_port(struct altcp_pcb *conn, int local) +{ + if (conn && conn->inner_conn) { + return altcp_get_port(conn->inner_conn, local); + } + return 0; +} #ifdef LWIP_DEBUG enum tcp_state diff --git a/src/core/altcp_tcp.c b/src/core/altcp_tcp.c index bc0ec94f..b330e17c 100644 --- a/src/core/altcp_tcp.c +++ b/src/core/altcp_tcp.c @@ -425,6 +425,23 @@ altcp_tcp_get_ip(struct altcp_pcb *conn, int local) return NULL; } +static u16_t +altcp_tcp_get_port(struct altcp_pcb *conn, int local) +{ + if (conn) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + if (pcb) { + if (local) { + return pcb->local_port; + } else { + return pcb->remote_port; + } + } + } + return 0; +} + #ifdef LWIP_DEBUG static enum tcp_state altcp_tcp_dbg_get_tcp_state(struct altcp_pcb *conn) @@ -459,7 +476,8 @@ const struct altcp_functions altcp_tcp_functions = { altcp_tcp_setprio, altcp_tcp_dealloc, altcp_tcp_get_tcp_addrinfo, - altcp_tcp_get_ip + altcp_tcp_get_ip, + altcp_tcp_get_port #ifdef LWIP_DEBUG ,altcp_tcp_dbg_get_tcp_state #endif diff --git a/src/include/lwip/altcp.h b/src/include/lwip/altcp.h index 04f0a708..37c9c5d9 100644 --- a/src/include/lwip/altcp.h +++ b/src/include/lwip/altcp.h @@ -117,6 +117,7 @@ void altcp_setprio(struct altcp_pcb *conn, u8_t prio); err_t altcp_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port); ip_addr_t *altcp_get_ip(struct altcp_pcb *conn, int local); +u16_t altcp_get_port(struct altcp_pcb *conn, int local); #ifdef LWIP_DEBUG enum tcp_state altcp_dbg_get_tcp_state(struct altcp_pcb *conn); diff --git a/src/include/lwip/priv/altcp_priv.h b/src/include/lwip/priv/altcp_priv.h index c3ed1cbe..2d3b2fdb 100644 --- a/src/include/lwip/priv/altcp_priv.h +++ b/src/include/lwip/priv/altcp_priv.h @@ -83,6 +83,7 @@ typedef void (*altcp_dealloc_fn)(struct altcp_pcb *conn); typedef err_t (*altcp_get_tcp_addrinfo_fn)(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port); typedef ip_addr_t *(*altcp_get_ip_fn)(struct altcp_pcb *conn, int local); +typedef u16_t (*altcp_get_port_fn)(struct altcp_pcb *conn, int local); #ifdef LWIP_DEBUG typedef enum tcp_state (*altcp_dbg_get_tcp_state_fn)(struct altcp_pcb *conn); @@ -109,6 +110,7 @@ struct altcp_functions { altcp_dealloc_fn dealloc; altcp_get_tcp_addrinfo_fn addrinfo; altcp_get_ip_fn getip; + altcp_get_port_fn getport; #ifdef LWIP_DEBUG altcp_dbg_get_tcp_state_fn dbg_get_tcp_state; #endif @@ -130,6 +132,7 @@ void altcp_default_setprio(struct altcp_pcb *conn, u8_t prio); void altcp_default_dealloc(struct altcp_pcb *conn); err_t altcp_default_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port); ip_addr_t *altcp_default_get_ip(struct altcp_pcb *conn, int local); +u16_t altcp_default_get_port(struct altcp_pcb *conn, int local); #ifdef LWIP_DEBUG enum tcp_state altcp_default_dbg_get_tcp_state(struct altcp_pcb *conn); #endif