52 |
|
|
53 |
if(conn->recvmbox != SYS_MBOX_NULL) { |
if(conn->recvmbox != SYS_MBOX_NULL) { |
54 |
conn->err = err; |
conn->err = err; |
55 |
|
conn->recv_avail += p->tot_len; |
56 |
|
/* Register event with callback */ |
57 |
|
if (conn->callback) |
58 |
|
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, p->tot_len); |
59 |
sys_mbox_post(conn->recvmbox, p); |
sys_mbox_post(conn->recvmbox, p); |
60 |
} |
} |
61 |
return ERR_OK; |
return ERR_OK; |
86 |
buf->fromaddr = addr; |
buf->fromaddr = addr; |
87 |
buf->fromport = port; |
buf->fromport = port; |
88 |
} |
} |
89 |
|
|
90 |
|
conn->recv_avail += p->tot_len; |
91 |
|
/* Register event with callback */ |
92 |
|
if (conn->callback) |
93 |
|
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, p->tot_len); |
94 |
sys_mbox_post(conn->recvmbox, buf); |
sys_mbox_post(conn->recvmbox, buf); |
95 |
} |
} |
96 |
} |
} |
119 |
if(conn != NULL && conn->sem != SYS_SEM_NULL) { |
if(conn != NULL && conn->sem != SYS_SEM_NULL) { |
120 |
sys_sem_signal(conn->sem); |
sys_sem_signal(conn->sem); |
121 |
} |
} |
122 |
|
|
123 |
|
if (conn && conn->callback) |
124 |
|
if (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) |
125 |
|
(*conn->callback)(conn, NETCONN_EVT_SENDPLUS, len); |
126 |
|
|
127 |
return ERR_OK; |
return ERR_OK; |
128 |
} |
} |
129 |
/*-----------------------------------------------------------------------------------*/ |
/*-----------------------------------------------------------------------------------*/ |
139 |
|
|
140 |
conn->err = err; |
conn->err = err; |
141 |
if(conn->recvmbox != SYS_MBOX_NULL) { |
if(conn->recvmbox != SYS_MBOX_NULL) { |
142 |
|
/* Register event with callback */ |
143 |
|
if (conn->callback) |
144 |
|
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, 0); |
145 |
sys_mbox_post(conn->recvmbox, NULL); |
sys_mbox_post(conn->recvmbox, NULL); |
146 |
} |
} |
147 |
if(conn->mbox != SYS_MBOX_NULL) { |
if(conn->mbox != SYS_MBOX_NULL) { |
148 |
sys_mbox_post(conn->mbox, NULL); |
sys_mbox_post(conn->mbox, NULL); |
149 |
} |
} |
150 |
if(conn->acceptmbox != SYS_MBOX_NULL) { |
if(conn->acceptmbox != SYS_MBOX_NULL) { |
151 |
|
/* Register event with callback */ |
152 |
|
if (conn->callback) |
153 |
|
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, 0); |
154 |
sys_mbox_post(conn->acceptmbox, NULL); |
sys_mbox_post(conn->acceptmbox, NULL); |
155 |
} |
} |
156 |
if(conn->sem != SYS_SEM_NULL) { |
if(conn->sem != SYS_SEM_NULL) { |
174 |
static err_t |
static err_t |
175 |
accept_function(void *arg, struct tcp_pcb *newpcb, err_t err) |
accept_function(void *arg, struct tcp_pcb *newpcb, err_t err) |
176 |
{ |
{ |
177 |
sys_mbox_t *mbox; |
sys_mbox_t mbox; |
178 |
struct netconn *newconn; |
struct netconn *newconn; |
179 |
|
struct netconn *conn; |
180 |
|
|
181 |
#if API_MSG_DEBUG |
#if API_MSG_DEBUG |
182 |
#if TCP_DEBUG |
#if TCP_DEBUG |
183 |
tcp_debug_print_state(newpcb->state); |
tcp_debug_print_state(newpcb->state); |
184 |
#endif /* TCP_DEBUG */ |
#endif /* TCP_DEBUG */ |
185 |
#endif /* API_MSG_DEBUG */ |
#endif /* API_MSG_DEBUG */ |
186 |
mbox = (sys_mbox_t *)arg; |
conn = (struct netconn *)arg; |
187 |
|
mbox = conn->acceptmbox; |
188 |
newconn = memp_mallocp(MEMP_NETCONN); |
newconn = memp_mallocp(MEMP_NETCONN); |
189 |
if(newconn == NULL) { |
if(newconn == NULL) { |
190 |
return ERR_MEM; |
return ERR_MEM; |
212 |
} |
} |
213 |
newconn->acceptmbox = SYS_MBOX_NULL; |
newconn->acceptmbox = SYS_MBOX_NULL; |
214 |
newconn->err = err; |
newconn->err = err; |
215 |
sys_mbox_post(*mbox, newconn); |
/* Register event with callback */ |
216 |
|
if (conn->callback) |
217 |
|
{ |
218 |
|
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, 0); |
219 |
|
/* We have to set the callback here even though |
220 |
|
* the new socket is unknown. Mark the socket as -1. */ |
221 |
|
newconn->callback = conn->callback; |
222 |
|
newconn->socket = -1; |
223 |
|
} |
224 |
|
|
225 |
|
sys_mbox_post(mbox, newconn); |
226 |
return ERR_OK; |
return ERR_OK; |
227 |
} |
} |
228 |
/*-----------------------------------------------------------------------------------*/ |
/*-----------------------------------------------------------------------------------*/ |
263 |
break; |
break; |
264 |
} |
} |
265 |
} |
} |
266 |
|
/* Trigger select() in socket layer */ |
267 |
|
if (msg->conn->callback) |
268 |
|
{ |
269 |
|
(*msg->conn->callback)(msg->conn, NETCONN_EVT_RCVPLUS, 0); |
270 |
|
(*msg->conn->callback)(msg->conn, NETCONN_EVT_SENDPLUS, 0); |
271 |
|
} |
272 |
|
|
273 |
if(msg->conn->mbox != SYS_MBOX_NULL) { |
if(msg->conn->mbox != SYS_MBOX_NULL) { |
274 |
sys_mbox_post(msg->conn->mbox, NULL); |
sys_mbox_post(msg->conn->mbox, NULL); |
275 |
} |
} |
455 |
break; |
break; |
456 |
} |
} |
457 |
} |
} |
458 |
tcp_arg(msg->conn->pcb.tcp, (void *)&(msg->conn->acceptmbox)); |
tcp_arg(msg->conn->pcb.tcp, msg->conn); |
459 |
tcp_accept(msg->conn->pcb.tcp, accept_function); |
tcp_accept(msg->conn->pcb.tcp, accept_function); |
460 |
} |
} |
461 |
break; |
break; |
542 |
tcp_output(msg->conn->pcb.tcp); |
tcp_output(msg->conn->pcb.tcp); |
543 |
} |
} |
544 |
msg->conn->err = err; |
msg->conn->err = err; |
545 |
|
if (msg->conn->callback) |
546 |
|
if (err == ERR_OK) |
547 |
|
{ |
548 |
|
if (tcp_sndbuf(msg->conn->pcb.tcp) <= TCP_SNDLOWAT) |
549 |
|
(*msg->conn->callback)(msg->conn, NETCONN_EVT_SENDMINUS, msg->msg.w.len); |
550 |
|
} |
551 |
break; |
break; |
552 |
} |
} |
553 |
} |
} |