mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-01-30 21:32:46 +00:00
api_msg.c: add a "pcb_new" helper function to avoid redundant code, and to add missing pcb allocations checking (in do_bind, and for each raw_new). Fix style.
This commit is contained in:
parent
4208bcd8d1
commit
f1412f5e5a
@ -98,6 +98,10 @@ HISTORY
|
|||||||
|
|
||||||
++ Bug fixes:
|
++ Bug fixes:
|
||||||
|
|
||||||
|
2007-03-30 Frédéric Bernon
|
||||||
|
* api_msg.c: add a "pcb_new" helper function to avoid redundant code, and to add
|
||||||
|
missing pcb allocations checking (in do_bind, and for each raw_new). Fix style.
|
||||||
|
|
||||||
2007-03-30 Frédéric Bernon
|
2007-03-30 Frédéric Bernon
|
||||||
* most of files: prefix all debug.h define with "LWIP_" to avoid any conflict with
|
* most of files: prefix all debug.h define with "LWIP_" to avoid any conflict with
|
||||||
others environment defines (these were too "generic").
|
others environment defines (these were too "generic").
|
||||||
|
@ -68,7 +68,8 @@ recv_raw(void *arg, struct raw_pcb *pcb, struct pbuf *p,
|
|||||||
|
|
||||||
return 0; /* do not eat the packet */
|
return 0; /* do not eat the packet */
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* LWIP_RAW*/
|
||||||
|
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
static void
|
static void
|
||||||
recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
|
recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
|
||||||
@ -105,6 +106,7 @@ recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* LWIP_UDP */
|
#endif /* LWIP_UDP */
|
||||||
|
|
||||||
#if LWIP_TCP
|
#if LWIP_TCP
|
||||||
|
|
||||||
static err_t
|
static err_t
|
||||||
@ -278,17 +280,9 @@ accept_function(void *arg, struct tcp_pcb *newpcb, err_t err)
|
|||||||
}
|
}
|
||||||
#endif /* LWIP_TCP */
|
#endif /* LWIP_TCP */
|
||||||
|
|
||||||
static void
|
static err_t
|
||||||
do_newconn(struct api_msg_msg *msg)
|
pcb_new(struct api_msg_msg *msg)
|
||||||
{
|
{
|
||||||
if(msg->conn->pcb.tcp != NULL) {
|
|
||||||
/* This "new" connection already has a PCB allocated. */
|
|
||||||
/* Is this an error condition? Should it be deleted?
|
|
||||||
We currently just are happy and return. */
|
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
msg->conn->err = ERR_OK;
|
msg->conn->err = ERR_OK;
|
||||||
|
|
||||||
/* Allocate a PCB for this connection */
|
/* Allocate a PCB for this connection */
|
||||||
@ -296,9 +290,13 @@ do_newconn(struct api_msg_msg *msg)
|
|||||||
#if LWIP_RAW
|
#if LWIP_RAW
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
msg->conn->pcb.raw = raw_new(msg->msg.bc.port); /* misusing the port field */
|
msg->conn->pcb.raw = raw_new(msg->msg.bc.port); /* misusing the port field */
|
||||||
|
if(msg->conn->pcb.raw == NULL) {
|
||||||
|
msg->conn->err = ERR_MEM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
|
raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
case NETCONN_UDPLITE:
|
||||||
msg->conn->pcb.udp = udp_new();
|
msg->conn->pcb.udp = udp_new();
|
||||||
@ -336,12 +334,24 @@ do_newconn(struct api_msg_msg *msg)
|
|||||||
}
|
}
|
||||||
setup_tcp(msg->conn);
|
setup_tcp(msg->conn);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* LWIP_TCP */
|
||||||
}
|
}
|
||||||
|
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
return msg->conn->err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_newconn(struct api_msg_msg *msg)
|
||||||
|
{
|
||||||
|
if(msg->conn->pcb.tcp == NULL) {
|
||||||
|
pcb_new(msg);
|
||||||
|
}
|
||||||
|
/* Else? This "new" connection already has a PCB allocated. */
|
||||||
|
/* Is this an error condition? Should it be deleted? */
|
||||||
|
/* We currently just are happy and return. */
|
||||||
|
|
||||||
|
sys_mbox_post(msg->conn->mbox, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_delconn(struct api_msg_msg *msg)
|
do_delconn(struct api_msg_msg *msg)
|
||||||
@ -352,7 +362,7 @@ do_delconn(struct api_msg_msg *msg)
|
|||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
raw_remove(msg->conn->pcb.raw);
|
raw_remove(msg->conn->pcb.raw);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
case NETCONN_UDPLITE:
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
@ -379,7 +389,7 @@ do_delconn(struct api_msg_msg *msg)
|
|||||||
tcp_abort(msg->conn->pcb.tcp);
|
tcp_abort(msg->conn->pcb.tcp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* LWIP_TCP */
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -399,64 +409,37 @@ static void
|
|||||||
do_bind(struct api_msg_msg *msg)
|
do_bind(struct api_msg_msg *msg)
|
||||||
{
|
{
|
||||||
if (msg->conn->pcb.tcp == NULL) {
|
if (msg->conn->pcb.tcp == NULL) {
|
||||||
|
pcb_new(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg->conn->pcb.tcp != NULL) {
|
||||||
switch (msg->conn->type) {
|
switch (msg->conn->type) {
|
||||||
#if LWIP_RAW
|
#if LWIP_RAW
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
msg->conn->pcb.raw = raw_new(msg->msg.bc.port); /* misusing the port field as protocol */
|
msg->conn->err = raw_bind(msg->conn->pcb.raw,msg->msg.bc.ipaddr);
|
||||||
raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
|
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
case NETCONN_UDPLITE:
|
||||||
msg->conn->pcb.udp = udp_new();
|
/* FALLTHROUGH */
|
||||||
udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
|
|
||||||
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
|
|
||||||
break;
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
case NETCONN_UDPNOCHKSUM:
|
||||||
msg->conn->pcb.udp = udp_new();
|
/* FALLTHROUGH */
|
||||||
udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
|
|
||||||
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
|
|
||||||
break;
|
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
msg->conn->pcb.udp = udp_new();
|
msg->conn->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
||||||
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
|
|
||||||
break;
|
break;
|
||||||
#endif /* LWIP_UDP */
|
#endif /* LWIP_UDP */
|
||||||
#if LWIP_TCP
|
#if LWIP_TCP
|
||||||
case NETCONN_TCP:
|
case NETCONN_TCP:
|
||||||
msg->conn->pcb.tcp = tcp_new();
|
msg->conn->err = tcp_bind(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
||||||
setup_tcp(msg->conn);
|
|
||||||
#endif /* LWIP_TCP */
|
#endif /* LWIP_TCP */
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch (msg->conn->type) {
|
|
||||||
#if LWIP_RAW
|
|
||||||
case NETCONN_RAW:
|
|
||||||
msg->conn->err = raw_bind(msg->conn->pcb.raw,msg->msg.bc.ipaddr);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#if LWIP_UDP
|
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case NETCONN_UDP:
|
|
||||||
msg->conn->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
|
||||||
break;
|
|
||||||
#endif /* LWIP_UDP */
|
|
||||||
#if LWIP_TCP
|
|
||||||
case NETCONN_TCP:
|
|
||||||
msg->conn->err = tcp_bind(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
|
||||||
#endif /* LWIP_TCP */
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
sys_mbox_post(msg->conn->mbox, NULL);
|
||||||
}
|
}
|
||||||
#if LWIP_TCP
|
|
||||||
|
|
||||||
|
#if LWIP_TCP
|
||||||
static err_t
|
static err_t
|
||||||
do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
|
do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
|
||||||
{
|
{
|
||||||
@ -477,70 +460,25 @@ do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
|
|||||||
sys_mbox_post(conn->mbox, NULL);
|
sys_mbox_post(conn->mbox, NULL);
|
||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* LWIP_TCP */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_connect(struct api_msg_msg *msg)
|
do_connect(struct api_msg_msg *msg)
|
||||||
{
|
{
|
||||||
if (msg->conn->pcb.tcp == NULL) {
|
if (msg->conn->pcb.tcp == NULL) {
|
||||||
switch (msg->conn->type) {
|
if (pcb_new(msg)!=ERR_OK) {
|
||||||
#if LWIP_RAW
|
sys_mbox_post(msg->conn->mbox, NULL);
|
||||||
case NETCONN_RAW:
|
return;
|
||||||
msg->conn->pcb.raw = raw_new(msg->msg.bc.port); /* misusing the port field as protocol */
|
|
||||||
raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#if LWIP_UDP
|
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
msg->conn->pcb.udp = udp_new();
|
|
||||||
if (msg->conn->pcb.udp == NULL) {
|
|
||||||
msg->conn->err = ERR_MEM;
|
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
|
|
||||||
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
|
|
||||||
break;
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
msg->conn->pcb.udp = udp_new();
|
|
||||||
if (msg->conn->pcb.udp == NULL) {
|
|
||||||
msg->conn->err = ERR_MEM;
|
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
|
|
||||||
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
|
|
||||||
break;
|
|
||||||
case NETCONN_UDP:
|
|
||||||
msg->conn->pcb.udp = udp_new();
|
|
||||||
if (msg->conn->pcb.udp == NULL) {
|
|
||||||
msg->conn->err = ERR_MEM;
|
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
|
|
||||||
break;
|
|
||||||
#endif /* LWIP_UDP */
|
|
||||||
#if LWIP_TCP
|
|
||||||
case NETCONN_TCP:
|
|
||||||
msg->conn->pcb.tcp = tcp_new();
|
|
||||||
if (msg->conn->pcb.tcp == NULL) {
|
|
||||||
msg->conn->err = ERR_MEM;
|
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (msg->conn->type) {
|
switch (msg->conn->type) {
|
||||||
#if LWIP_RAW
|
#if LWIP_RAW
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
raw_connect(msg->conn->pcb.raw, msg->msg.bc.ipaddr);
|
raw_connect(msg->conn->pcb.raw, msg->msg.bc.ipaddr);
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
sys_mbox_post(msg->conn->mbox, NULL);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
case NETCONN_UDPLITE:
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
@ -550,15 +488,15 @@ do_connect(struct api_msg_msg *msg)
|
|||||||
udp_connect(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
udp_connect(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
sys_mbox_post(msg->conn->mbox, NULL);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* LWIP_UDP */
|
||||||
#if LWIP_TCP
|
#if LWIP_TCP
|
||||||
case NETCONN_TCP:
|
case NETCONN_TCP:
|
||||||
/* tcp_arg(msg->conn->pcb.tcp, msg->conn);*/
|
/*tcp_arg(msg->conn->pcb.tcp, msg->conn);*/
|
||||||
setup_tcp(msg->conn);
|
setup_tcp(msg->conn);
|
||||||
tcp_connect(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port,
|
tcp_connect(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port,
|
||||||
do_connected);
|
do_connected);
|
||||||
/*tcp_output(msg->conn->pcb.tcp);*/
|
/*tcp_output(msg->conn->pcb.tcp);*/
|
||||||
#endif
|
#endif /* LWIP_TCP */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -568,13 +506,12 @@ do_connect(struct api_msg_msg *msg)
|
|||||||
static void
|
static void
|
||||||
do_disconnect(struct api_msg_msg *msg)
|
do_disconnect(struct api_msg_msg *msg)
|
||||||
{
|
{
|
||||||
|
|
||||||
switch (msg->conn->type) {
|
switch (msg->conn->type) {
|
||||||
#if LWIP_RAW
|
#if LWIP_RAW
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
/* Do nothing as connecting is only a helper for upper lwip layers */
|
/* Do nothing as connecting is only a helper for upper lwip layers */
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
case NETCONN_UDPLITE:
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
@ -583,7 +520,7 @@ do_disconnect(struct api_msg_msg *msg)
|
|||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
udp_disconnect(msg->conn->pcb.udp);
|
udp_disconnect(msg->conn->pcb.udp);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* LWIP_UDP */
|
||||||
case NETCONN_TCP:
|
case NETCONN_TCP:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -600,7 +537,7 @@ do_listen(struct api_msg_msg *msg)
|
|||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: listen RAW: cannot listen for RAW.\n"));
|
LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: listen RAW: cannot listen for RAW.\n"));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
case NETCONN_UDPLITE:
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
@ -625,7 +562,7 @@ do_listen(struct api_msg_msg *msg)
|
|||||||
tcp_arg(msg->conn->pcb.tcp, msg->conn);
|
tcp_arg(msg->conn->pcb.tcp, msg->conn);
|
||||||
tcp_accept(msg->conn->pcb.tcp, accept_function);
|
tcp_accept(msg->conn->pcb.tcp, accept_function);
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* LWIP_TCP */
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -823,5 +760,3 @@ api_msg_post(struct api_msg *msg)
|
|||||||
return tcpip_apimsg(msg);
|
return tcpip_apimsg(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user