mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-01 04:12:07 +00:00
api.h, api_lib.c, api_msg.c, sockets.c: group the different NETCONN_UDPxxx code in only one part...
This commit is contained in:
parent
d1ef610822
commit
953d783a3e
@ -19,6 +19,10 @@ HISTORY
|
|||||||
|
|
||||||
++ New features:
|
++ New features:
|
||||||
|
|
||||||
|
2007-05-23 Frédéric Bernon
|
||||||
|
* api.h, api_lib.c, api_msg.c, sockets.c: group the different NETCONN_UDPxxx
|
||||||
|
code in only one part...
|
||||||
|
|
||||||
2007-05-18 Simon Goldschmidt
|
2007-05-18 Simon Goldschmidt
|
||||||
* opt.h, memp.h, memp.c: Added option MEMP_OVERFLOW_CHECK to check for memp
|
* opt.h, memp.h, memp.c: Added option MEMP_OVERFLOW_CHECK to check for memp
|
||||||
elements to overflow. This is achieved by adding some bytes before and after
|
elements to overflow. This is achieved by adding some bytes before and after
|
||||||
|
@ -272,7 +272,6 @@ netconn_delete(struct netconn *conn)
|
|||||||
sys_mbox_free(conn->recvmbox);
|
sys_mbox_free(conn->recvmbox);
|
||||||
conn->recvmbox = SYS_MBOX_NULL;
|
conn->recvmbox = SYS_MBOX_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Drain the acceptmbox. */
|
/* Drain the acceptmbox. */
|
||||||
if (conn->acceptmbox != SYS_MBOX_NULL) {
|
if (conn->acceptmbox != SYS_MBOX_NULL) {
|
||||||
@ -304,12 +303,10 @@ netconn_type(struct netconn *conn)
|
|||||||
err_t
|
err_t
|
||||||
netconn_peer(struct netconn *conn, struct ip_addr *addr, u16_t *port)
|
netconn_peer(struct netconn *conn, struct ip_addr *addr, u16_t *port)
|
||||||
{
|
{
|
||||||
switch (conn->type) {
|
switch (NETCONNTYPE_GROUP(conn->type)) {
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
/* return an error as connecting is only a helper for upper layers */
|
/* return an error as connecting is only a helper for upper layers */
|
||||||
return ERR_CONN;
|
return ERR_CONN;
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
if (conn->pcb.udp == NULL ||
|
if (conn->pcb.udp == NULL ||
|
||||||
((conn->pcb.udp->flags & UDP_FLAGS_CONNECTED) == 0))
|
((conn->pcb.udp->flags & UDP_FLAGS_CONNECTED) == 0))
|
||||||
@ -330,13 +327,11 @@ netconn_peer(struct netconn *conn, struct ip_addr *addr, u16_t *port)
|
|||||||
err_t
|
err_t
|
||||||
netconn_addr(struct netconn *conn, struct ip_addr **addr, u16_t *port)
|
netconn_addr(struct netconn *conn, struct ip_addr **addr, u16_t *port)
|
||||||
{
|
{
|
||||||
switch (conn->type) {
|
switch (NETCONNTYPE_GROUP(conn->type)) {
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
*addr = &(conn->pcb.raw->local_ip);
|
*addr = &(conn->pcb.raw->local_ip);
|
||||||
*port = conn->pcb.raw->protocol;
|
*port = conn->pcb.raw->protocol;
|
||||||
break;
|
break;
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
*addr = &(conn->pcb.udp->local_ip);
|
*addr = &(conn->pcb.udp->local_ip);
|
||||||
*port = conn->pcb.udp->local_port;
|
*port = conn->pcb.udp->local_port;
|
||||||
@ -390,7 +385,7 @@ netconn_connect(struct netconn *conn, struct ip_addr *addr, u16_t port)
|
|||||||
}
|
}
|
||||||
|
|
||||||
msg.function = do_connect;
|
msg.function = do_connect;
|
||||||
msg.msg.conn = conn;
|
msg.msg.conn = conn;
|
||||||
msg.msg.msg.bc.ipaddr = addr;
|
msg.msg.msg.bc.ipaddr = addr;
|
||||||
msg.msg.msg.bc.port = port;
|
msg.msg.msg.bc.port = port;
|
||||||
tcpip_apimsg(&msg);
|
tcpip_apimsg(&msg);
|
||||||
@ -407,7 +402,7 @@ netconn_disconnect(struct netconn *conn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
msg.function = do_disconnect;
|
msg.function = do_disconnect;
|
||||||
msg.msg.conn = conn;
|
msg.msg.conn = conn;
|
||||||
tcpip_apimsg(&msg);
|
tcpip_apimsg(&msg);
|
||||||
return conn->err;
|
return conn->err;
|
||||||
|
|
||||||
@ -438,11 +433,11 @@ struct netconn *
|
|||||||
netconn_accept(struct netconn *conn)
|
netconn_accept(struct netconn *conn)
|
||||||
{
|
{
|
||||||
struct netconn *newconn;
|
struct netconn *newconn;
|
||||||
|
|
||||||
if (conn == NULL) {
|
if (conn == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sys_arch_mbox_fetch(conn->acceptmbox, (void *)&newconn, 0);
|
sys_arch_mbox_fetch(conn->acceptmbox, (void *)&newconn, 0);
|
||||||
/* Register event with callback */
|
/* Register event with callback */
|
||||||
if (conn->callback)
|
if (conn->callback)
|
||||||
|
@ -290,7 +290,7 @@ pcb_new(struct api_msg_msg *msg)
|
|||||||
msg->conn->err = ERR_OK;
|
msg->conn->err = ERR_OK;
|
||||||
|
|
||||||
/* Allocate a PCB for this connection */
|
/* Allocate a PCB for this connection */
|
||||||
switch(msg->conn->type) {
|
switch(NETCONNTYPE_GROUP(msg->conn->type)) {
|
||||||
#if LWIP_RAW
|
#if LWIP_RAW
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
msg->conn->pcb.raw = raw_new(msg->msg.n.proto);
|
msg->conn->pcb.raw = raw_new(msg->msg.n.proto);
|
||||||
@ -302,30 +302,14 @@ pcb_new(struct api_msg_msg *msg)
|
|||||||
break;
|
break;
|
||||||
#endif /* LWIP_RAW */
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
msg->conn->pcb.udp = udp_new();
|
|
||||||
if(msg->conn->pcb.udp == NULL) {
|
|
||||||
msg->conn->err = ERR_MEM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
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->pcb.udp = udp_new();
|
||||||
if(msg->conn->pcb.udp == NULL) {
|
if(msg->conn->pcb.udp == NULL) {
|
||||||
msg->conn->err = ERR_MEM;
|
msg->conn->err = ERR_MEM;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (msg->conn->type==NETCONN_UDPLITE) udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
|
||||||
|
if (msg->conn->type==NETCONN_UDPNOCHKSUM) udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
|
||||||
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
|
udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
|
||||||
break;
|
break;
|
||||||
#endif /* LWIP_UDP */
|
#endif /* LWIP_UDP */
|
||||||
@ -363,15 +347,13 @@ void
|
|||||||
do_delconn(struct api_msg_msg *msg)
|
do_delconn(struct api_msg_msg *msg)
|
||||||
{
|
{
|
||||||
if (msg->conn->pcb.tcp != NULL) {
|
if (msg->conn->pcb.tcp != NULL) {
|
||||||
switch (msg->conn->type) {
|
switch (NETCONNTYPE_GROUP(msg->conn->type)) {
|
||||||
#if LWIP_RAW
|
#if LWIP_RAW
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
raw_remove(msg->conn->pcb.raw);
|
raw_remove(msg->conn->pcb.raw);
|
||||||
break;
|
break;
|
||||||
#endif /* LWIP_RAW */
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
msg->conn->pcb.udp->recv_arg = NULL;
|
msg->conn->pcb.udp->recv_arg = NULL;
|
||||||
udp_remove(msg->conn->pcb.udp);
|
udp_remove(msg->conn->pcb.udp);
|
||||||
@ -419,15 +401,13 @@ do_bind(struct api_msg_msg *msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (msg->conn->pcb.tcp != NULL) {
|
if (msg->conn->pcb.tcp != NULL) {
|
||||||
switch (msg->conn->type) {
|
switch (NETCONNTYPE_GROUP(msg->conn->type)) {
|
||||||
#if LWIP_RAW
|
#if LWIP_RAW
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
msg->conn->err = raw_bind(msg->conn->pcb.raw,msg->msg.bc.ipaddr);
|
msg->conn->err = raw_bind(msg->conn->pcb.raw,msg->msg.bc.ipaddr);
|
||||||
break;
|
break;
|
||||||
#endif /* LWIP_RAW */
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
msg->conn->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
msg->conn->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
||||||
break;
|
break;
|
||||||
@ -479,7 +459,7 @@ do_connect(struct api_msg_msg *msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (msg->conn->type) {
|
switch (NETCONNTYPE_GROUP(msg->conn->type)) {
|
||||||
#if LWIP_RAW
|
#if LWIP_RAW
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
msg->conn->err = raw_connect(msg->conn->pcb.raw, msg->msg.bc.ipaddr);
|
msg->conn->err = raw_connect(msg->conn->pcb.raw, msg->msg.bc.ipaddr);
|
||||||
@ -487,8 +467,6 @@ do_connect(struct api_msg_msg *msg)
|
|||||||
break;
|
break;
|
||||||
#endif /* LWIP_RAW */
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
msg->conn->err = udp_connect(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
msg->conn->err = 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);
|
||||||
@ -510,19 +488,11 @@ do_connect(struct api_msg_msg *msg)
|
|||||||
void
|
void
|
||||||
do_disconnect(struct api_msg_msg *msg)
|
do_disconnect(struct api_msg_msg *msg)
|
||||||
{
|
{
|
||||||
switch (msg->conn->type) {
|
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) {
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
case NETCONN_UDP:
|
|
||||||
udp_disconnect(msg->conn->pcb.udp);
|
udp_disconnect(msg->conn->pcb.udp);
|
||||||
break;
|
|
||||||
#endif /* LWIP_UDP */
|
|
||||||
case NETCONN_TCP:
|
|
||||||
case NETCONN_RAW:
|
|
||||||
/* nothing to do */
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
#endif /* LWIP_UDP */
|
||||||
sys_mbox_post(msg->conn->mbox, NULL);
|
sys_mbox_post(msg->conn->mbox, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -559,7 +529,7 @@ do_send(struct api_msg_msg *msg)
|
|||||||
{
|
{
|
||||||
if (msg->conn->err == ERR_OK) {
|
if (msg->conn->err == ERR_OK) {
|
||||||
if (msg->conn->pcb.tcp != NULL) {
|
if (msg->conn->pcb.tcp != NULL) {
|
||||||
switch (msg->conn->type) {
|
switch (NETCONNTYPE_GROUP(msg->conn->type)) {
|
||||||
#if LWIP_RAW
|
#if LWIP_RAW
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
if (msg->msg.b->addr == NULL) {
|
if (msg->msg.b->addr == NULL) {
|
||||||
@ -570,8 +540,6 @@ do_send(struct api_msg_msg *msg)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
if (msg->msg.b->addr == NULL) {
|
if (msg->msg.b->addr == NULL) {
|
||||||
msg->conn->err = udp_send(msg->conn->pcb.udp, msg->msg.b->p);
|
msg->conn->err = udp_send(msg->conn->pcb.udp, msg->msg.b->p);
|
||||||
@ -664,20 +632,16 @@ do_join_leave_group(struct api_msg_msg *msg)
|
|||||||
{
|
{
|
||||||
if (msg->conn->err == ERR_OK) {
|
if (msg->conn->err == ERR_OK) {
|
||||||
if (msg->conn->pcb.tcp != NULL) {
|
if (msg->conn->pcb.tcp != NULL) {
|
||||||
switch (msg->conn->type) {
|
if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) {
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
case NETCONN_UDP:
|
|
||||||
if (msg->msg.jl.join_or_leave == NETCONN_JOIN) {
|
if (msg->msg.jl.join_or_leave == NETCONN_JOIN) {
|
||||||
msg->conn->err = igmp_joingroup ( netif_default, msg->msg.jl.multiaddr);
|
msg->conn->err = igmp_joingroup ( netif_default, msg->msg.jl.multiaddr);
|
||||||
} else {
|
} else {
|
||||||
msg->conn->err = igmp_leavegroup( netif_default, msg->msg.jl.multiaddr);
|
msg->conn->err = igmp_leavegroup( netif_default, msg->msg.jl.multiaddr);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
#endif /* LWIP_UDP */
|
#endif /* LWIP_UDP */
|
||||||
#if (LWIP_TCP || LWIP_RAW)
|
#if (LWIP_TCP || LWIP_RAW)
|
||||||
default:
|
} else {
|
||||||
msg->conn->err = ERR_VAL;
|
msg->conn->err = ERR_VAL;
|
||||||
#endif /* (LWIP_TCP || LWIP_RAW) */
|
#endif /* (LWIP_TCP || LWIP_RAW) */
|
||||||
}
|
}
|
||||||
|
@ -1081,7 +1081,7 @@ int lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optl
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SO_TYPE:
|
case SO_TYPE:
|
||||||
switch (sock->conn->type) {
|
switch (NETCONNTYPE_GROUP(sock->conn->type)) {
|
||||||
case NETCONN_RAW:
|
case NETCONN_RAW:
|
||||||
*(int*)optval = SOCK_RAW;
|
*(int*)optval = SOCK_RAW;
|
||||||
break;
|
break;
|
||||||
@ -1089,8 +1089,6 @@ int lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optl
|
|||||||
*(int*)optval = SOCK_STREAM;
|
*(int*)optval = SOCK_STREAM;
|
||||||
break;
|
break;
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
case NETCONN_UDPLITE:
|
|
||||||
case NETCONN_UDPNOCHKSUM:
|
|
||||||
*(int*)optval = SOCK_DGRAM;
|
*(int*)optval = SOCK_DGRAM;
|
||||||
break;
|
break;
|
||||||
default: /* unrecognized socket type */
|
default: /* unrecognized socket type */
|
||||||
|
@ -55,12 +55,19 @@ extern "C" {
|
|||||||
#define NETCONN_NOCOPY 0x00
|
#define NETCONN_NOCOPY 0x00
|
||||||
#define NETCONN_COPY 0x01
|
#define NETCONN_COPY 0x01
|
||||||
|
|
||||||
|
/* Helpers to process several netconn_types by the same code */
|
||||||
|
#define NETCONNTYPE_GROUP(t) (t&0xF0)
|
||||||
|
#define NETCONNTYPE_DATAGRAM(t) (t&0xE0)
|
||||||
|
|
||||||
enum netconn_type {
|
enum netconn_type {
|
||||||
NETCONN_TCP,
|
/* NETCONN_TCP Group */
|
||||||
NETCONN_UDP,
|
NETCONN_TCP = 0x10,
|
||||||
NETCONN_UDPLITE,
|
/* NETCONN_UDP Group */
|
||||||
NETCONN_UDPNOCHKSUM,
|
NETCONN_UDP = 0x20,
|
||||||
NETCONN_RAW
|
NETCONN_UDPLITE = 0x21,
|
||||||
|
NETCONN_UDPNOCHKSUM= 0x22,
|
||||||
|
/* NETCONN_RAW Group */
|
||||||
|
NETCONN_RAW = 0x40
|
||||||
};
|
};
|
||||||
|
|
||||||
enum netconn_state {
|
enum netconn_state {
|
||||||
|
Loading…
Reference in New Issue
Block a user