annotate packages/net/lwip_tcpip/current/src/api/api_msg.c @ 1624:877b7c3bf2b8

Initial import of lwIP TCP/IP stack
author jani
date Tue, 04 May 2004 12:32:31 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1624
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
1 /*
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
2 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
3 * All rights reserved.
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
4 *
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without modification,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
6 * are permitted provided that the following conditions are met:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
7 *
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright notice,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
9 * this list of conditions and the following disclaimer.
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
10 * 2. Redistributions in binary form must reproduce the above copyright notice,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
11 * this list of conditions and the following disclaimer in the documentation
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
12 * and/or other materials provided with the distribution.
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
13 * 3. The name of the author may not be used to endorse or promote products
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
14 * derived from this software without specific prior written permission.
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
15 *
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
19 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
21 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
25 * OF SUCH DAMAGE.
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
26 *
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
27 * This file is part of the lwIP TCP/IP stack.
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
28 *
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
29 * Author: Adam Dunkels <adam@sics.se>
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
30 *
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
31 */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
32
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
33 #include "lwip/opt.h"
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
34 #include "lwip/arch.h"
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
35 #include "lwip/api_msg.h"
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
36 #include "lwip/memp.h"
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
37 #include "lwip/sys.h"
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
38 #include "lwip/tcpip.h"
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
39
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
40 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
41 static int
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
42 recv_raw(void *arg, struct raw_pcb *pcb, struct pbuf *p,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
43 struct ip_addr *addr)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
44 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
45 struct netbuf *buf;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
46 struct netconn *conn;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
47
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
48 conn = arg;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
49 if (!conn) return 0;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
50
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
51 if (conn->recvmbox != SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
52 if (!(buf = memp_malloc(MEMP_NETBUF))) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
53 return 0;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
54 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
55 pbuf_ref(p);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
56 buf->p = p;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
57 buf->ptr = p;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
58 buf->fromaddr = addr;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
59 buf->fromport = pcb->protocol;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
60
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
61 conn->recv_avail += p->tot_len;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
62 /* Register event with callback */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
63 if (conn->callback)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
64 (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, p->tot_len);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
65 sys_mbox_post(conn->recvmbox, buf);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
66 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
67
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
68 return 0; /* do not eat the packet */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
69 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
70 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
71 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
72 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
73 recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
74 struct ip_addr *addr, u16_t port)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
75 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
76 struct netbuf *buf;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
77 struct netconn *conn;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
78
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
79 conn = arg;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
80
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
81 if (conn == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
82 pbuf_free(p);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
83 return;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
84 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
85 if (conn->recvmbox != SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
86 buf = memp_malloc(MEMP_NETBUF);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
87 if (buf == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
88 pbuf_free(p);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
89 return;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
90 } else {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
91 buf->p = p;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
92 buf->ptr = p;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
93 buf->fromaddr = addr;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
94 buf->fromport = port;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
95 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
96
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
97 conn->recv_avail += p->tot_len;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
98 /* Register event with callback */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
99 if (conn->callback)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
100 (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, p->tot_len);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
101 sys_mbox_post(conn->recvmbox, buf);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
102 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
103 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
104 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
105 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
106
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
107 static err_t
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
108 recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
109 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
110 struct netconn *conn;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
111 u16_t len;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
112
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
113 conn = arg;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
114
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
115 if (conn == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
116 pbuf_free(p);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
117 return ERR_VAL;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
118 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
119
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
120 if (conn->recvmbox != SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
121
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
122 conn->err = err;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
123 if (p != NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
124 len = p->tot_len;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
125 conn->recv_avail += len;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
126 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
127 else
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
128 len = 0;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
129 /* Register event with callback */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
130 if (conn->callback)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
131 (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, len);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
132 sys_mbox_post(conn->recvmbox, p);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
133 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
134 return ERR_OK;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
135 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
136
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
137
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
138 static err_t
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
139 poll_tcp(void *arg, struct tcp_pcb *pcb)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
140 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
141 struct netconn *conn;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
142
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
143 conn = arg;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
144 if (conn != NULL &&
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
145 (conn->state == NETCONN_WRITE || conn->state == NETCONN_CLOSE) &&
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
146 conn->sem != SYS_SEM_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
147 sys_sem_signal(conn->sem);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
148 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
149 return ERR_OK;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
150 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
151
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
152 static err_t
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
153 sent_tcp(void *arg, struct tcp_pcb *pcb, u16_t len)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
154 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
155 struct netconn *conn;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
156
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
157 conn = arg;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
158 if (conn != NULL && conn->sem != SYS_SEM_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
159 sys_sem_signal(conn->sem);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
160 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
161
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
162 if (conn && conn->callback)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
163 if (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
164 (*conn->callback)(conn, NETCONN_EVT_SENDPLUS, len);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
165
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
166 return ERR_OK;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
167 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
168
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
169 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
170 err_tcp(void *arg, err_t err)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
171 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
172 struct netconn *conn;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
173
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
174 conn = arg;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
175
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
176 conn->pcb.tcp = NULL;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
177
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
178
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
179 conn->err = err;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
180 if (conn->recvmbox != SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
181 /* Register event with callback */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
182 if (conn->callback)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
183 (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, 0);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
184 sys_mbox_post(conn->recvmbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
185 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
186 if (conn->mbox != SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
187 sys_mbox_post(conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
188 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
189 if (conn->acceptmbox != SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
190 /* Register event with callback */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
191 if (conn->callback)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
192 (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, 0);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
193 sys_mbox_post(conn->acceptmbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
194 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
195 if (conn->sem != SYS_SEM_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
196 sys_sem_signal(conn->sem);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
197 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
198 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
199
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
200 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
201 setup_tcp(struct netconn *conn)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
202 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
203 struct tcp_pcb *pcb;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
204
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
205 pcb = conn->pcb.tcp;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
206 tcp_arg(pcb, conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
207 tcp_recv(pcb, recv_tcp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
208 tcp_sent(pcb, sent_tcp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
209 tcp_poll(pcb, poll_tcp, 4);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
210 tcp_err(pcb, err_tcp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
211 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
212
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
213 static err_t
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
214 accept_function(void *arg, struct tcp_pcb *newpcb, err_t err)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
215 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
216 sys_mbox_t mbox;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
217 struct netconn *newconn;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
218 struct netconn *conn;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
219
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
220 #if API_MSG_DEBUG
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
221 #if TCP_DEBUG
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
222 tcp_debug_print_state(newpcb->state);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
223 #endif /* TCP_DEBUG */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
224 #endif /* API_MSG_DEBUG */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
225 conn = (struct netconn *)arg;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
226 mbox = conn->acceptmbox;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
227 newconn = memp_malloc(MEMP_NETCONN);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
228 if (newconn == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
229 return ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
230 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
231 newconn->type = NETCONN_TCP;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
232 newconn->pcb.tcp = newpcb;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
233 setup_tcp(newconn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
234 newconn->recvmbox = sys_mbox_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
235 if (newconn->recvmbox == SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
236 memp_free(MEMP_NETCONN, newconn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
237 return ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
238 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
239 newconn->mbox = sys_mbox_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
240 if (newconn->mbox == SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
241 sys_mbox_free(newconn->recvmbox);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
242 memp_free(MEMP_NETCONN, newconn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
243 return ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
244 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
245 newconn->sem = sys_sem_new(0);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
246 if (newconn->sem == SYS_SEM_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
247 sys_mbox_free(newconn->recvmbox);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
248 sys_mbox_free(newconn->mbox);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
249 memp_free(MEMP_NETCONN, newconn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
250 return ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
251 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
252 newconn->acceptmbox = SYS_MBOX_NULL;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
253 newconn->err = err;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
254 /* Register event with callback */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
255 if (conn->callback)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
256 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
257 (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, 0);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
258 /* We have to set the callback here even though
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
259 * the new socket is unknown. Mark the socket as -1. */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
260 newconn->callback = conn->callback;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
261 newconn->socket = -1;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
262 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
263
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
264 sys_mbox_post(mbox, newconn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
265 return ERR_OK;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
266 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
267 #endif /* LWIP_TCP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
268
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
269 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
270 do_newconn(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
271 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
272 if(msg->conn->pcb.tcp != NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
273 /* This "new" connection already has a PCB allocated. */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
274 /* Is this an error condition? Should it be deleted?
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
275 We currently just are happy and return. */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
276 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
277 return;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
278 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
279
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
280 msg->conn->err = ERR_OK;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
281
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
282 /* Allocate a PCB for this connection */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
283 switch(msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
284 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
285 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
286 msg->conn->pcb.raw = raw_new(msg->msg.bc.port); /* misusing the port field */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
287 raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
288 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
289 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
290 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
291 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
292 msg->conn->pcb.udp = udp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
293 if(msg->conn->pcb.udp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
294 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
295 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
296 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
297 udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
298 udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
299 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
300 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
301 msg->conn->pcb.udp = udp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
302 if(msg->conn->pcb.udp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
303 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
304 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
305 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
306 udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
307 udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
308 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
309 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
310 msg->conn->pcb.udp = udp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
311 if(msg->conn->pcb.udp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
312 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
313 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
314 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
315 udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
316 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
317 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
318 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
319 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
320 msg->conn->pcb.tcp = tcp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
321 if(msg->conn->pcb.tcp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
322 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
323 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
324 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
325 setup_tcp(msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
326 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
327 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
328 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
329
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
330
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
331 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
332 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
333
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
334
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
335 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
336 do_delconn(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
337 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
338 if (msg->conn->pcb.tcp != NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
339 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
340 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
341 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
342 raw_remove(msg->conn->pcb.raw);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
343 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
344 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
345 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
346 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
347 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
348 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
349 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
350 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
351 msg->conn->pcb.udp->recv_arg = NULL;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
352 udp_remove(msg->conn->pcb.udp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
353 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
354 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
355 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
356 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
357 if (msg->conn->pcb.tcp->state == LISTEN) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
358 tcp_arg(msg->conn->pcb.tcp, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
359 tcp_accept(msg->conn->pcb.tcp, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
360 tcp_close(msg->conn->pcb.tcp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
361 } else {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
362 tcp_arg(msg->conn->pcb.tcp, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
363 tcp_sent(msg->conn->pcb.tcp, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
364 tcp_recv(msg->conn->pcb.tcp, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
365 tcp_poll(msg->conn->pcb.tcp, NULL, 0);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
366 tcp_err(msg->conn->pcb.tcp, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
367 if (tcp_close(msg->conn->pcb.tcp) != ERR_OK) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
368 tcp_abort(msg->conn->pcb.tcp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
369 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
370 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
371 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
372 default:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
373 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
374 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
375 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
376 /* Trigger select() in socket layer */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
377 if (msg->conn->callback)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
378 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
379 (*msg->conn->callback)(msg->conn, NETCONN_EVT_RCVPLUS, 0);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
380 (*msg->conn->callback)(msg->conn, NETCONN_EVT_SENDPLUS, 0);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
381 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
382
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
383 if (msg->conn->mbox != SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
384 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
385 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
386 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
387
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
388 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
389 do_bind(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
390 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
391 if (msg->conn->pcb.tcp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
392 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
393 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
394 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
395 msg->conn->pcb.raw = raw_new(msg->msg.bc.port); /* misusing the port field as protocol */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
396 raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
397 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
398 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
399 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
400 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
401 msg->conn->pcb.udp = udp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
402 udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
403 udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
404 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
405 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
406 msg->conn->pcb.udp = udp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
407 udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
408 udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
409 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
410 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
411 msg->conn->pcb.udp = udp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
412 udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
413 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
414 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
415 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
416 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
417 msg->conn->pcb.tcp = tcp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
418 setup_tcp(msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
419 #endif /* LWIP_TCP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
420 default:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
421 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
422 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
423 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
424 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
425 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
426 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
427 msg->conn->err = raw_bind(msg->conn->pcb.raw,msg->msg.bc.ipaddr);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
428 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
429 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
430 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
431 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
432 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
433 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
434 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
435 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
436 msg->conn->err = udp_bind(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
437 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
438 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
439 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
440 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
441 msg->conn->err = tcp_bind(msg->conn->pcb.tcp,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
442 msg->msg.bc.ipaddr, msg->msg.bc.port);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
443 #endif /* LWIP_TCP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
444 default:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
445 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
446 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
447 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
448 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
449 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
450
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
451 static err_t
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
452 do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
453 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
454 struct netconn *conn;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
455
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
456 conn = arg;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
457
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
458 if (conn == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
459 return ERR_VAL;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
460 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
461
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
462 conn->err = err;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
463 if (conn->type == NETCONN_TCP && err == ERR_OK) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
464 setup_tcp(conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
465 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
466 sys_mbox_post(conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
467 return ERR_OK;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
468 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
469 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
470
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
471 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
472 do_connect(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
473 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
474 if (msg->conn->pcb.tcp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
475 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
476 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
477 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
478 msg->conn->pcb.raw = raw_new(msg->msg.bc.port); /* misusing the port field as protocol */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
479 raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
480 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
481 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
482 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
483 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
484 msg->conn->pcb.udp = udp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
485 if (msg->conn->pcb.udp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
486 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
487 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
488 return;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
489 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
490 udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
491 udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
492 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
493 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
494 msg->conn->pcb.udp = udp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
495 if (msg->conn->pcb.udp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
496 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
497 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
498 return;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
499 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
500 udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
501 udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
502 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
503 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
504 msg->conn->pcb.udp = udp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
505 if (msg->conn->pcb.udp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
506 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
507 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
508 return;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
509 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
510 udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
511 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
512 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
513 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
514 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
515 msg->conn->pcb.tcp = tcp_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
516 if (msg->conn->pcb.tcp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
517 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
518 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
519 return;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
520 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
521 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
522 default:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
523 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
524 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
525 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
526 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
527 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
528 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
529 raw_connect(msg->conn->pcb.raw, msg->msg.bc.ipaddr);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
530 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
531 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
532 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
533 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
534 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
535 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
536 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
537 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
538 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
539 udp_connect(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
540 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
541 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
542 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
543 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
544 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
545 /* tcp_arg(msg->conn->pcb.tcp, msg->conn);*/
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
546 setup_tcp(msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
547 tcp_connect(msg->conn->pcb.tcp, msg->msg.bc.ipaddr, msg->msg.bc.port,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
548 do_connected);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
549 /*tcp_output(msg->conn->pcb.tcp);*/
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
550 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
551
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
552 default:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
553 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
554 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
555 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
556
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
557 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
558 do_disconnect(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
559 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
560
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
561 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
562 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
563 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
564 /* Do nothing as connecting is only a helper for upper lwip layers */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
565 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
566 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
567 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
568 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
569 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
570 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
571 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
572 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
573 udp_disconnect(msg->conn->pcb.udp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
574 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
575 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
576 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
577 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
578 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
579 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
580 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
581
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
582
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
583 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
584 do_listen(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
585 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
586 if (msg->conn->pcb.tcp != NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
587 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
588 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
589 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
590 LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: listen RAW: cannot listen for RAW.\n"));
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
591 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
592 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
593 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
594 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
595 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
596 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
597 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
598 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
599 LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: listen UDP: cannot listen for UDP.\n"));
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
600 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
601 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
602 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
603 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
604 msg->conn->pcb.tcp = tcp_listen(msg->conn->pcb.tcp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
605 if (msg->conn->pcb.tcp == NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
606 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
607 } else {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
608 if (msg->conn->acceptmbox == SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
609 msg->conn->acceptmbox = sys_mbox_new();
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
610 if (msg->conn->acceptmbox == SYS_MBOX_NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
611 msg->conn->err = ERR_MEM;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
612 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
613 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
614 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
615 tcp_arg(msg->conn->pcb.tcp, msg->conn);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
616 tcp_accept(msg->conn->pcb.tcp, accept_function);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
617 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
618 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
619 default:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
620 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
621 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
622 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
623 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
624 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
625
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
626 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
627 do_accept(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
628 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
629 if (msg->conn->pcb.tcp != NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
630 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
631 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
632 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
633 LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: accept RAW: cannot accept for RAW.\n"));
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
634 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
635 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
636 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
637 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
638 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
639 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
640 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
641 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
642 LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: accept UDP: cannot accept for UDP.\n"));
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
643 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
644 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
645 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
646 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
647 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
648 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
649 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
650
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
651 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
652 do_send(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
653 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
654 if (msg->conn->pcb.tcp != NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
655 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
656 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
657 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
658 raw_send(msg->conn->pcb.raw, msg->msg.p);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
659 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
660 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
661 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
662 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
663 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
664 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
665 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
666 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
667 udp_send(msg->conn->pcb.udp, msg->msg.p);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
668 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
669 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
670 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
671 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
672 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
673 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
674 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
675 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
676
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
677 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
678 do_recv(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
679 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
680 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
681 if (msg->conn->pcb.tcp != NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
682 if (msg->conn->type == NETCONN_TCP) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
683 tcp_recved(msg->conn->pcb.tcp, msg->msg.len);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
684 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
685 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
686 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
687 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
688 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
689
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
690 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
691 do_write(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
692 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
693 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
694 err_t err;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
695 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
696 if (msg->conn->pcb.tcp != NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
697 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
698 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
699 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
700 msg->conn->err = ERR_VAL;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
701 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
702 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
703 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
704 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
705 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
706 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
707 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
708 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
709 msg->conn->err = ERR_VAL;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
710 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
711 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
712 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
713 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
714 err = tcp_write(msg->conn->pcb.tcp, msg->msg.w.dataptr,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
715 msg->msg.w.len, msg->msg.w.copy);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
716 /* This is the Nagle algorithm: inhibit the sending of new TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
717 segments when new outgoing data arrives from the user if any
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
718 previously transmitted data on the connection remains
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
719 unacknowledged. */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
720 if(err == ERR_OK && (msg->conn->pcb.tcp->unacked == NULL || (msg->conn->pcb.tcp->flags & TF_NODELAY)) ) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
721 tcp_output(msg->conn->pcb.tcp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
722 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
723 msg->conn->err = err;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
724 if (msg->conn->callback)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
725 if (err == ERR_OK)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
726 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
727 if (tcp_sndbuf(msg->conn->pcb.tcp) <= TCP_SNDLOWAT)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
728 (*msg->conn->callback)(msg->conn, NETCONN_EVT_SENDMINUS, msg->msg.w.len);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
729 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
730 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
731 default:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
732 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
733 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
734 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
735 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
736 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
737
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
738 static void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
739 do_close(struct api_msg_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
740 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
741 err_t err;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
742
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
743 err = ERR_OK;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
744
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
745 if (msg->conn->pcb.tcp != NULL) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
746 switch (msg->conn->type) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
747 #if LWIP_RAW
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
748 case NETCONN_RAW:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
749 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
750 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
751 #if LWIP_UDP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
752 case NETCONN_UDPLITE:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
753 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
754 case NETCONN_UDPNOCHKSUM:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
755 /* FALLTHROUGH */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
756 case NETCONN_UDP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
757 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
758 #endif /* LWIP_UDP */
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
759 #if LWIP_TCP
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
760 case NETCONN_TCP:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
761 if (msg->conn->pcb.tcp->state == LISTEN) {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
762 err = tcp_close(msg->conn->pcb.tcp);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
763 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
764 msg->conn->err = err;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
765 #endif
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
766 default:
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
767 break;
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
768 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
769 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
770 sys_mbox_post(msg->conn->mbox, NULL);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
771 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
772
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
773 typedef void (* api_msg_decode)(struct api_msg_msg *msg);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
774 static api_msg_decode decode[API_MSG_MAX] = {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
775 do_newconn,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
776 do_delconn,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
777 do_bind,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
778 do_connect,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
779 do_disconnect,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
780 do_listen,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
781 do_accept,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
782 do_send,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
783 do_recv,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
784 do_write,
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
785 do_close
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
786 };
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
787 void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
788 api_msg_input(struct api_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
789 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
790 decode[msg->type](&(msg->msg));
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
791 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
792
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
793 void
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
794 api_msg_post(struct api_msg *msg)
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
795 {
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
796 tcpip_apimsg(msg);
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
797 }
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
798
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
799
877b7c3bf2b8 Initial import of lwIP TCP/IP stack
jani
parents:
diff changeset
800