Lines Matching refs:conn
95 #define NETCONN_RECVMBOX_WAITABLE(conn) (sys_mbox_valid(&(conn)->recvmbox) && (((conn)->flags & NETCONN_FLAG_MBOXINVALID) == 0))
96 #define NETCONN_ACCEPTMBOX_WAITABLE(conn) (sys_mbox_valid(&(conn)->acceptmbox) && (((conn)->flags & (NETCONN_FLAG_MBOXCLOSED|NETCONN_FLAG_MBOXINVALID)) == 0))
97 #define NETCONN_MBOX_WAITING_INC(conn) SYS_ARCH_INC(conn->mbox_threads_waiting, 1)
98 #define NETCONN_MBOX_WAITING_DEC(conn) SYS_ARCH_DEC(conn->mbox_threads_waiting, 1)
100 #define NETCONN_RECVMBOX_WAITABLE(conn) sys_mbox_valid(&(conn)->recvmbox)
101 #define NETCONN_ACCEPTMBOX_WAITABLE(conn) (sys_mbox_valid(&(conn)->acceptmbox) && (((conn)->flags & NETCONN_FLAG_MBOXCLOSED) == 0))
102 #define NETCONN_MBOX_WAITING_INC(conn)
103 #define NETCONN_MBOX_WAITING_DEC(conn)
106 static err_t netconn_close_shutdown(struct netconn *conn, u8_t how);
151 struct netconn *conn;
155 conn = netconn_alloc(t, callback);
156 if (conn != NULL) {
160 API_MSG_VAR_REF(msg).conn = conn;
163 LWIP_ASSERT("freeing conn without freeing pcb", conn->pcb.tcp == NULL);
164 LWIP_ASSERT("conn has no recvmbox", sys_mbox_valid(&conn->recvmbox));
166 LWIP_ASSERT("conn->acceptmbox shouldn't exist", !sys_mbox_valid(&conn->acceptmbox));
169 LWIP_ASSERT("conn has no op_completed", sys_sem_valid(&conn->op_completed));
170 sys_sem_free(&conn->op_completed);
172 sys_mbox_free(&conn->recvmbox);
173 memp_free(MEMP_NETCONN, conn);
179 return conn;
188 * @param conn the netconn to delete
192 netconn_prepare_delete(struct netconn *conn)
197 /* No ASSERT here because possible to get a (conn == NULL) if we got an accept error */
198 if (conn == NULL) {
203 API_MSG_VAR_REF(msg).conn = conn;
207 sys_now() + conn->send_timeout */
229 * @param conn the netconn to delete
233 netconn_delete(struct netconn *conn)
237 /* No ASSERT here because possible to get a (conn == NULL) if we got an accept error */
238 if (conn == NULL) {
243 if (conn->flags & NETCONN_FLAG_MBOXINVALID) {
249 err = netconn_prepare_delete(conn);
252 netconn_free(conn);
261 * @param conn the netconn to query
269 netconn_getaddr(struct netconn *conn, ip_addr_t *addr, u16_t *port, u8_t local)
274 LWIP_ERROR("netconn_getaddr: invalid conn", (conn != NULL), return ERR_ARG;);
279 API_MSG_VAR_REF(msg).conn = conn;
300 * @param conn the netconn to bind
307 netconn_bind(struct netconn *conn, const ip_addr_t *addr, u16_t port)
312 LWIP_ERROR("netconn_bind: invalid conn", (conn != NULL), return ERR_ARG;);
325 if ((netconn_get_ipv6only(conn) == 0) &&
332 API_MSG_VAR_REF(msg).conn = conn;
346 * @param conn the netconn to bind
351 netconn_bind_if(struct netconn *conn, u8_t if_idx)
356 LWIP_ERROR("netconn_bind_if: invalid conn", (conn != NULL), return ERR_ARG;);
359 API_MSG_VAR_REF(msg).conn = conn;
371 * @param conn the netconn to connect
377 netconn_connect(struct netconn *conn, const ip_addr_t *addr, u16_t port)
382 LWIP_ERROR("netconn_connect: invalid conn", (conn != NULL), return ERR_ARG;);
392 API_MSG_VAR_REF(msg).conn = conn;
405 * @param conn the netconn to disconnect
409 netconn_disconnect(struct netconn *conn)
414 LWIP_ERROR("netconn_disconnect: invalid conn", (conn != NULL), return ERR_ARG;);
417 API_MSG_VAR_REF(msg).conn = conn;
428 * @param conn the tcp netconn to set to listen mode
434 netconn_listen_with_backlog(struct netconn *conn, u8_t backlog)
443 LWIP_ERROR("netconn_listen: invalid conn", (conn != NULL), return ERR_ARG;);
446 API_MSG_VAR_REF(msg).conn = conn;
455 LWIP_UNUSED_ARG(conn);
465 * @param conn the TCP listen netconn
471 netconn_accept(struct netconn *conn, struct netconn **new_conn)
483 LWIP_ERROR("netconn_accept: invalid conn", (conn != NULL), return ERR_ARG;);
488 err = netconn_err(conn);
493 if (!NETCONN_ACCEPTMBOX_WAITABLE(conn)) {
501 NETCONN_MBOX_WAITING_INC(conn);
502 if (netconn_is_nonblocking(conn)) {
503 if (sys_arch_mbox_tryfetch(&conn->acceptmbox, &accept_ptr) == SYS_MBOX_EMPTY) {
505 NETCONN_MBOX_WAITING_DEC(conn);
510 if (sys_arch_mbox_fetch(&conn->acceptmbox, &accept_ptr, conn->recv_timeout) == SYS_ARCH_TIMEOUT) {
512 NETCONN_MBOX_WAITING_DEC(conn);
516 sys_arch_mbox_fetch(&conn->acceptmbox, &accept_ptr, 0);
519 NETCONN_MBOX_WAITING_DEC(conn);
521 if (conn->flags & NETCONN_FLAG_MBOXINVALID) {
531 API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0);
546 API_MSG_VAR_REF(msg).conn = newconn;
553 /* don't set conn->last_err: it's only ERR_OK, anyway */
556 LWIP_UNUSED_ARG(conn);
567 * @param conn the netconn from which to receive data
579 netconn_recv_data(struct netconn *conn, void **new_buf, u8_t apiflags)
586 LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;);
588 if (!NETCONN_RECVMBOX_WAITABLE(conn)) {
589 err_t err = netconn_err(conn);
597 NETCONN_MBOX_WAITING_INC(conn);
598 if (netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK) ||
599 (conn->flags & NETCONN_FLAG_MBOXCLOSED) || (conn->pending_err != ERR_OK)) {
600 if (sys_arch_mbox_tryfetch(&conn->recvmbox, &buf) == SYS_MBOX_EMPTY) {
602 NETCONN_MBOX_WAITING_DEC(conn);
603 err = netconn_err(conn);
608 if (conn->flags & NETCONN_FLAG_MBOXCLOSED) {
615 if (sys_arch_mbox_fetch(&conn->recvmbox, &buf, conn->recv_timeout) == SYS_ARCH_TIMEOUT) {
616 NETCONN_MBOX_WAITING_DEC(conn);
620 sys_arch_mbox_fetch(&conn->recvmbox, &buf, 0);
623 NETCONN_MBOX_WAITING_DEC(conn);
625 if (conn->flags & NETCONN_FLAG_MBOXINVALID) {
636 if (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP)
663 SYS_ARCH_DEC(conn->recv_avail, len);
666 API_EVENT(conn, NETCONN_EVT_RCVMINUS, len);
671 /* don't set conn->last_err: it's only ERR_OK, anyway */
677 netconn_tcp_recvd_msg(struct netconn *conn, size_t len, struct api_msg *msg)
679 LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) &&
680 NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;);
682 msg->conn = conn;
689 netconn_tcp_recvd(struct netconn *conn, size_t len)
693 LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) &&
694 NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;);
697 err = netconn_tcp_recvd_msg(conn, len, &API_VAR_REF(msg));
703 netconn_recv_data_tcp(struct netconn *conn, struct pbuf **new_buf, u8_t apiflags)
712 if (!NETCONN_RECVMBOX_WAITABLE(conn)) {
716 if (netconn_is_flag_set(conn, NETCONN_FIN_RX_PENDING)) {
717 netconn_clear_flags(conn, NETCONN_FIN_RX_PENDING);
727 err = netconn_recv_data(conn, (void **)new_buf, apiflags);
740 netconn_tcp_recvd_msg(conn, len, &API_VAR_REF(msg));
749 netconn_set_flags(conn, NETCONN_FIN_RX_PENDING);
753 API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0);
754 if (conn->pcb.ip == NULL) {
756 err = netconn_err(conn);
763 netconn_close_shutdown(conn, NETCONN_SHUT_RD);
764 /* Don' store ERR_CLSD as conn->err since we are only half-closed */
775 * @param conn the netconn from which to receive data
779 * ERR_ARG if conn is not a TCP netconn
782 netconn_recv_tcp_pbuf(struct netconn *conn, struct pbuf **new_buf)
784 LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) &&
785 NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;);
787 return netconn_recv_data_tcp(conn, new_buf, 0);
794 * @param conn the netconn from which to receive data
800 * ERR_ARG if conn is not a TCP netconn
803 netconn_recv_tcp_pbuf_flags(struct netconn *conn, struct pbuf **new_buf, u8_t apiflags)
805 LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) &&
806 NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;);
808 return netconn_recv_data_tcp(conn, new_buf, apiflags);
815 * @param conn the netconn from which to receive data
819 * ERR_ARG if conn is not a UDP/RAW netconn
822 netconn_recv_udp_raw_netbuf(struct netconn *conn, struct netbuf **new_buf)
824 LWIP_ERROR("netconn_recv_udp_raw_netbuf: invalid conn", (conn != NULL) &&
825 NETCONNTYPE_GROUP(netconn_type(conn)) != NETCONN_TCP, return ERR_ARG;);
827 return netconn_recv_data(conn, (void **)new_buf, 0);
833 * @param conn the netconn from which to receive data
839 * ERR_ARG if conn is not a UDP/RAW netconn
842 netconn_recv_udp_raw_netbuf_flags(struct netconn *conn, struct netbuf **new_buf, u8_t apiflags)
844 LWIP_ERROR("netconn_recv_udp_raw_netbuf: invalid conn", (conn != NULL) &&
845 NETCONNTYPE_GROUP(netconn_type(conn)) != NETCONN_TCP, return ERR_ARG;);
847 return netconn_recv_data(conn, (void **)new_buf, apiflags);
854 * @param conn the netconn from which to receive data
860 netconn_recv(struct netconn *conn, struct netbuf **new_buf)
869 LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;);
873 if (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP)
884 err = netconn_recv_data_tcp(conn, &p, 0);
896 /* don't set conn->last_err: it's only ERR_OK, anyway */
905 return netconn_recv_data(conn, (void **)new_buf, 0);
915 * @param conn the netconn over which to send data
922 netconn_sendto(struct netconn *conn, struct netbuf *buf, const ip_addr_t *addr, u16_t port)
927 return netconn_send(conn, buf);
936 * @param conn the UDP or RAW netconn over which to send data
941 netconn_send(struct netconn *conn, struct netbuf *buf)
946 LWIP_ERROR("netconn_send: invalid conn", (conn != NULL), return ERR_ARG;);
951 API_MSG_VAR_REF(msg).conn = conn;
963 * @param conn the TCP netconn over which to send data
974 netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size,
980 return netconn_write_vectors_partly(conn, &vector, 1, apiflags, bytes_written);
986 * @param conn the TCP netconn over which to send data
997 netconn_write_vectors_partly(struct netconn *conn, struct netvector *vectors, u16_t vectorcnt,
1006 LWIP_ERROR("netconn_write: invalid conn", (conn != NULL), return ERR_ARG;);
1007 LWIP_ERROR("netconn_write: invalid conn->type", (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP), return ERR_VAL;);
1008 dontblock = netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK);
1010 if (conn->send_timeout != 0) {
1044 API_MSG_VAR_REF(msg).conn = conn;
1052 if (conn->send_timeout != 0) {
1054 sys_now() + conn->send_timeout */
1084 * @param conn the TCP netconn to close or shutdown
1089 netconn_close_shutdown(struct netconn *conn, u8_t how)
1095 LWIP_ERROR("netconn_close: invalid conn", (conn != NULL), return ERR_ARG;);
1098 API_MSG_VAR_REF(msg).conn = conn;
1104 sys_now() + conn->send_timeout */
1121 * @param conn the TCP netconn to close
1125 netconn_close(struct netconn *conn)
1128 return netconn_close_shutdown(conn, NETCONN_SHUT_RDWR);
1135 * @param conn the netconn to get the error from
1139 netconn_err(struct netconn *conn)
1143 if (conn == NULL) {
1147 err = conn->pending_err;
1148 conn->pending_err = ERR_OK;
1157 * @param conn the TCP netconn to shut down
1163 netconn_shutdown(struct netconn *conn, u8_t shut_rx, u8_t shut_tx)
1165 return netconn_close_shutdown(conn, (u8_t)((shut_rx ? NETCONN_SHUT_RD : 0) | (shut_tx ? NETCONN_SHUT_WR : 0)));
1173 * @param conn the UDP netconn for which to change multicast addresses
1181 netconn_join_leave_group(struct netconn *conn,
1189 LWIP_ERROR("netconn_join_leave_group: invalid conn", (conn != NULL), return ERR_ARG;);
1203 API_MSG_VAR_REF(msg).conn = conn;
1216 * @param conn the UDP netconn for which to change multicast addresses
1223 netconn_join_leave_group_netif(struct netconn *conn,
1231 LWIP_ERROR("netconn_join_leave_group: invalid conn", (conn != NULL), return ERR_ARG;);
1245 API_MSG_VAR_REF(msg).conn = conn;