summaryrefslogtreecommitdiff
path: root/components/net/sal_socket/impl
diff options
context:
space:
mode:
authorMan, Jianting (Meco) <[email protected]>2022-02-19 11:07:45 -0500
committerGitHub <[email protected]>2022-02-20 00:07:45 +0800
commit6895da53071358cdd4da8f15f32c977dfedfbe89 (patch)
treec65401f29a630222c0928487415b1d0346b0488b /components/net/sal_socket/impl
parent5a61304a09bb2341565407d8fdc0a14f03c50aa3 (diff)
[net] adjust folder structure (#5587)
* [net] adjust folder structure - 将lwip相关的文件夹,移入lwip文件夹 - Kconfig 分散到at netdev lwip sal文件夹中,使用menuconfig代替menu
Diffstat (limited to 'components/net/sal_socket/impl')
-rw-r--r--components/net/sal_socket/impl/af_inet.h38
-rw-r--r--components/net/sal_socket/impl/af_inet_at.c114
-rw-r--r--components/net/sal_socket/impl/af_inet_lwip.c337
-rw-r--r--components/net/sal_socket/impl/proto_mbedtls.c249
4 files changed, 0 insertions, 738 deletions
diff --git a/components/net/sal_socket/impl/af_inet.h b/components/net/sal_socket/impl/af_inet.h
deleted file mode 100644
index 421d15bfae..0000000000
--- a/components/net/sal_socket/impl/af_inet.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2018-08-25 ChenYong First version
- */
-
-#ifndef __AF_INET_H__
-#define __AF_INET_H__
-
-#include <rtthread.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef SAL_USING_LWIP
-
-/* Set lwIP network interface device protocol family information */
-int sal_lwip_netdev_set_pf_info(struct netdev *netdev);
-
-#endif /* SAL_USING_LWIP */
-
-#ifdef SAL_USING_AT
-
-/* Set AT network interface device protocol family information */
-int sal_at_netdev_set_pf_info(struct netdev *netdev);
-
-#endif /* SAL_USING_AT */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __AF_INET_H__ */
diff --git a/components/net/sal_socket/impl/af_inet_at.c b/components/net/sal_socket/impl/af_inet_at.c
deleted file mode 100644
index 07dff0018c..0000000000
--- a/components/net/sal_socket/impl/af_inet_at.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2018-06-06 ChenYong First version
- */
-
-#include <rtthread.h>
-
-#include <netdb.h>
-#include <sal.h>
-
-#include <at_socket.h>
-#include <af_inet.h>
-
-#include <netdev.h>
-
-#ifdef SAL_USING_POSIX
-#include <poll.h>
-#endif
-
-#ifdef SAL_USING_AT
-
-#ifdef SAL_USING_POSIX
-static int at_poll(struct dfs_fd *file, struct rt_pollreq *req)
-{
- int mask = 0;
- struct at_socket *sock;
- struct sal_socket *sal_sock;
-
- sal_sock = sal_get_socket((int) file->data);
- if(!sal_sock)
- {
- return -1;
- }
-
- sock = at_get_socket((int)sal_sock->user_data);
- if (sock != NULL)
- {
- rt_base_t level;
-
- rt_poll_add(&sock->wait_head, req);
-
- level = rt_hw_interrupt_disable();
- if (sock->rcvevent)
- {
- mask |= POLLIN;
- }
- if (sock->sendevent)
- {
- mask |= POLLOUT;
- }
- if (sock->errevent)
- {
- mask |= POLLERR;
- }
- rt_hw_interrupt_enable(level);
- }
-
- return mask;
-}
-#endif
-
-static const struct sal_socket_ops at_socket_ops =
-{
- at_socket,
- at_closesocket,
- at_bind,
- NULL,
- at_connect,
- NULL,
- at_sendto,
- at_recvfrom,
- at_getsockopt,
- at_setsockopt,
- at_shutdown,
- NULL,
- NULL,
- NULL,
-#ifdef SAL_USING_POSIX
- at_poll,
-#endif /* SAL_USING_POSIX */
-};
-
-static const struct sal_netdb_ops at_netdb_ops =
-{
- at_gethostbyname,
- NULL,
- at_getaddrinfo,
- at_freeaddrinfo,
-};
-
-static const struct sal_proto_family at_inet_family =
-{
- AF_AT,
- AF_INET,
- &at_socket_ops,
- &at_netdb_ops,
-};
-
-
-/* Set AT network interface device protocol family information */
-int sal_at_netdev_set_pf_info(struct netdev *netdev)
-{
- RT_ASSERT(netdev);
-
- netdev->sal_user_data = (void *) &at_inet_family;
- return 0;
-}
-
-#endif /* SAL_USING_AT */
diff --git a/components/net/sal_socket/impl/af_inet_lwip.c b/components/net/sal_socket/impl/af_inet_lwip.c
deleted file mode 100644
index 2cf0958ee4..0000000000
--- a/components/net/sal_socket/impl/af_inet_lwip.c
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2018-05-17 ChenYong First version
- */
-
-#include <rtthread.h>
-
-#include <lwip/sockets.h>
-#include <lwip/netdb.h>
-#include <lwip/api.h>
-#include <lwip/init.h>
-#include <lwip/netif.h>
-
-#ifdef SAL_USING_POSIX
-#include <poll.h>
-#endif
-
-#include <sal.h>
-#include <af_inet.h>
-
-#include <netdev.h>
-
-#if (LWIP_VERSION < 0x2000000) && NETDEV_IPV6
-#error "The lwIP version is not support IPV6, please disable netdev IPV6 configuration "
-#elif (LWIP_VERSION > 0x2000000) && (NETDEV_IPV6 != LWIP_IPV6)
-#error "IPV6 configuration error, Please check and synchronize netdev and lwip IPV6 configuration."
-#endif
-
-#if LWIP_VERSION < 0x2000000
-#define SELWAIT_T int
-#else
-#ifndef SELWAIT_T
-#define SELWAIT_T u8_t
-#endif
-#endif
-
-#ifdef SAL_USING_LWIP
-
-#ifdef SAL_USING_POSIX
-
-#if LWIP_VERSION >= 0x20100ff
-#include <lwip/priv/sockets_priv.h>
-#else /* LWIP_VERSION < 0x20100ff */
-/*
- * Re-define lwip socket
- *
- * NOTE: please make sure the definitions same in lwip::net_socket.c
- */
-struct lwip_sock {
- /** sockets currently are built on netconns, each socket has one netconn */
- struct netconn *conn;
- /** data that was left from the previous read */
- void *lastdata;
- /** offset in the data that was left from the previous read */
- u16_t lastoffset;
- /** number of times data was received, set by event_callback(),
- tested by the receive and select functions */
- s16_t rcvevent;
- /** number of times data was ACKed (free send buffer), set by event_callback(),
- tested by select */
- u16_t sendevent;
- /** error happened for this socket, set by event_callback(), tested by select */
- u16_t errevent;
- /** last error that occurred on this socket */
-#if LWIP_VERSION < 0x2000000
- int err;
-#else
- u8_t err;
-#endif
- /** counter of how many threads are waiting for this socket using select */
- SELWAIT_T select_waiting;
-
- rt_wqueue_t wait_head;
-};
-#endif /* LWIP_VERSION >= 0x20100ff */
-
-extern struct lwip_sock *lwip_tryget_socket(int s);
-
-static void event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len)
-{
- int s;
- struct lwip_sock *sock;
- uint32_t event = 0;
- SYS_ARCH_DECL_PROTECT(lev);
-
- LWIP_UNUSED_ARG(len);
-
- /* Get socket */
- if (conn)
- {
- s = conn->socket;
- if (s < 0)
- {
- /* Data comes in right away after an accept, even though
- * the server task might not have created a new socket yet.
- * Just count down (or up) if that's the case and we
- * will use the data later. Note that only receive events
- * can happen before the new socket is set up. */
- SYS_ARCH_PROTECT(lev);
- if (conn->socket < 0)
- {
- if (evt == NETCONN_EVT_RCVPLUS)
- {
- conn->socket--;
- }
- SYS_ARCH_UNPROTECT(lev);
- return;
- }
- s = conn->socket;
- SYS_ARCH_UNPROTECT(lev);
- }
-
- sock = lwip_tryget_socket(s);
- if (!sock)
- {
- return;
- }
- }
- else
- {
- return;
- }
-
- SYS_ARCH_PROTECT(lev);
- /* Set event as required */
- switch (evt)
- {
- case NETCONN_EVT_RCVPLUS:
- sock->rcvevent++;
- break;
- case NETCONN_EVT_RCVMINUS:
- sock->rcvevent--;
- break;
- case NETCONN_EVT_SENDPLUS:
- sock->sendevent = 1;
- break;
- case NETCONN_EVT_SENDMINUS:
- sock->sendevent = 0;
- break;
- case NETCONN_EVT_ERROR:
- sock->errevent = 1;
- break;
- default:
- LWIP_ASSERT("unknown event", 0);
- break;
- }
-
-#if LWIP_VERSION >= 0x20100ff
- if ((void*)(sock->lastdata.pbuf) || (sock->rcvevent > 0))
-#else
- if ((void*)(sock->lastdata) || (sock->rcvevent > 0))
-#endif
- event |= POLLIN;
- if (sock->sendevent)
- event |= POLLOUT;
- if (sock->errevent)
- event |= POLLERR;
-
- SYS_ARCH_UNPROTECT(lev);
-
- if (event)
- {
- rt_wqueue_wakeup(&sock->wait_head, (void*) event);
- }
-}
-#endif /* SAL_USING_POSIX */
-
-static int inet_socket(int domain, int type, int protocol)
-{
-#ifdef SAL_USING_POSIX
- int socket;
-
- socket = lwip_socket(domain, type, protocol);
- if (socket >= 0)
- {
- struct lwip_sock *lwsock;
-
- lwsock = lwip_tryget_socket(socket);
- lwsock->conn->callback = event_callback;
-
- rt_wqueue_init(&lwsock->wait_head);
- }
-
- return socket;
-#else
- return lwip_socket(domain, type, protocol);
-#endif /* SAL_USING_POSIX */
-}
-
-static int inet_accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
-{
-#ifdef SAL_USING_POSIX
- int new_socket;
-
- new_socket = lwip_accept(socket, addr, addrlen);
- if (new_socket >= 0)
- {
- struct lwip_sock *lwsock;
-
- lwsock = lwip_tryget_socket(new_socket);
-
- rt_wqueue_init(&lwsock->wait_head);
- }
-
- return new_socket;
-#else
- return lwip_accept(socket, addr, addrlen);
-#endif /* SAL_USING_POSIX */
-}
-
-static int inet_getsockname(int socket, struct sockaddr *name, socklen_t *namelen)
-{
-#if LWIP_VERSION_MAJOR < 2U
- rt_kprintf("ERROR: Your lwIP version is not supported. Please using lwIP 2.0.0+.\n");
- RT_ASSERT(LWIP_VERSION_MAJOR >= 2U);
-#endif
-
- return lwip_getsockname(socket, name, namelen);
-}
-
-int inet_ioctlsocket(int socket, long cmd, void *arg)
-{
- switch (cmd)
- {
- case F_GETFL:
- case F_SETFL:
- return lwip_fcntl(socket, cmd, (int) arg);
-
- default:
- return lwip_ioctl(socket, cmd, arg);
- }
-}
-
-#ifdef SAL_USING_POSIX
-static int inet_poll(struct dfs_fd *file, struct rt_pollreq *req)
-{
- int mask = 0;
- struct lwip_sock *sock;
- struct sal_socket *sal_sock;
-
- sal_sock = sal_get_socket((int) file->data);
- if(!sal_sock)
- {
- return -1;
- }
-
- sock = lwip_tryget_socket((int)sal_sock->user_data);
- if (sock != NULL)
- {
- rt_base_t level;
-
- rt_poll_add(&sock->wait_head, req);
-
- level = rt_hw_interrupt_disable();
-
-#if LWIP_VERSION >= 0x20100ff
- if ((void*)(sock->lastdata.pbuf) || sock->rcvevent)
-#else
- if ((void*)(sock->lastdata) || sock->rcvevent)
-#endif
- {
- mask |= POLLIN;
- }
- if (sock->sendevent)
- {
- mask |= POLLOUT;
- }
- if (sock->errevent)
- {
- mask |= POLLERR;
- /* clean error event */
- sock->errevent = 0;
- }
- rt_hw_interrupt_enable(level);
- }
-
- return mask;
-}
-#endif
-
-static const struct sal_socket_ops lwip_socket_ops =
-{
- inet_socket,
- lwip_close,
- lwip_bind,
- lwip_listen,
- lwip_connect,
- inet_accept,
- (int (*)(int, const void *, size_t, int, const struct sockaddr *, socklen_t))lwip_sendto,
- (int (*)(int, void *, size_t, int, struct sockaddr *, socklen_t *))lwip_recvfrom,
- lwip_getsockopt,
- //TODO fix on 1.4.1
- lwip_setsockopt,
- lwip_shutdown,
- lwip_getpeername,
- inet_getsockname,
- inet_ioctlsocket,
-#ifdef SAL_USING_POSIX
- inet_poll,
-#endif
-};
-
-static const struct sal_netdb_ops lwip_netdb_ops =
-{
- lwip_gethostbyname,
- lwip_gethostbyname_r,
- lwip_getaddrinfo,
- lwip_freeaddrinfo,
-};
-
-static const struct sal_proto_family lwip_inet_family =
-{
- AF_INET,
-#if LWIP_VERSION > 0x2000000
- AF_INET6,
-#else
- AF_INET,
-#endif
- &lwip_socket_ops,
- &lwip_netdb_ops,
-};
-
-/* Set lwIP network interface device protocol family information */
-int sal_lwip_netdev_set_pf_info(struct netdev *netdev)
-{
- RT_ASSERT(netdev);
-
- netdev->sal_user_data = (void *) &lwip_inet_family;
- return 0;
-}
-
-#endif /* SAL_USING_LWIP */
diff --git a/components/net/sal_socket/impl/proto_mbedtls.c b/components/net/sal_socket/impl/proto_mbedtls.c
deleted file mode 100644
index 338792c948..0000000000
--- a/components/net/sal_socket/impl/proto_mbedtls.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2018-11-12 ChenYong First version
- */
-
-#include <rtthread.h>
-
-#ifdef RT_USING_DFS
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/statfs.h>
-#endif
-
-#ifdef SAL_USING_TLS
-#include <sal_tls.h>
-#endif
-#include <netdb.h>
-#include <sal.h>
-
-#include <netdev.h>
-
-#ifdef SAL_USING_TLS
-
-#if !defined(MBEDTLS_CONFIG_FILE)
-#include <mbedtls/config.h>
-#else
-#include MBEDTLS_CONFIG_FILE
-#endif
-
-#include <tls_certificate.h>
-#include <tls_client.h>
-
-#ifndef SAL_MEBDTLS_BUFFER_LEN
-#define SAL_MEBDTLS_BUFFER_LEN 1024
-#endif
-
-static void *mebdtls_socket(int socket)
-{
- MbedTLSSession *session = RT_NULL;
- char *pers = "mbedtls";
-
- if (socket < 0)
- {
- return RT_NULL;
- }
-
- session = (MbedTLSSession *) tls_calloc(1, sizeof(MbedTLSSession));
- if (session == RT_NULL)
- {
- return RT_NULL;
- }
-
- session->buffer_len = SAL_MEBDTLS_BUFFER_LEN;
- session->buffer = tls_calloc(1, session->buffer_len);
- if (session->buffer == RT_NULL)
- {
- tls_free(session);
- session = RT_NULL;
-
- return RT_NULL;
- }
-
- /* initialize TLS Client sesison */
- if (mbedtls_client_init(session, (void *) pers, rt_strlen(pers)) != RT_EOK)
- {
- mbedtls_client_close(session);
- return RT_NULL;
- }
- session->server_fd.fd = socket;
-
- return (void *)session;
-}
-
-int mbedtls_net_send_cb(void *ctx, const unsigned char *buf, size_t len)
-{
- struct sal_socket *sock;
- int socket, ret;
- struct sal_proto_family *pf;
-
- RT_ASSERT(ctx);
- RT_ASSERT(buf);
-
- socket = ((mbedtls_net_context *) ctx)->fd;
- sock = sal_get_socket(socket);
- if (sock == RT_NULL)
- {
- return -1;
- }
-
- pf = (struct sal_proto_family *)sock->netdev->sal_user_data;
-
- /* Register scoket sendto option to TLS send data callback */
- ret = pf->skt_ops->sendto((int) sock->user_data, (void *)buf, len, 0, RT_NULL, RT_NULL);
- if (ret < 0)
- {
-#ifdef RT_USING_DFS
- if ((fcntl(socket, F_GETFL) & O_NONBLOCK) == O_NONBLOCK)
- return MBEDTLS_ERR_SSL_WANT_WRITE;
-#endif
- if (errno == ECONNRESET)
- return MBEDTLS_ERR_NET_CONN_RESET;
- if ( errno == EINTR)
- return MBEDTLS_ERR_SSL_WANT_READ;
-
- return MBEDTLS_ERR_NET_SEND_FAILED ;
- }
-
- return ret;
-}
-
-int mbedtls_net_recv_cb( void *ctx, unsigned char *buf, size_t len)
-{
- struct sal_socket *sock;
- struct sal_proto_family *pf;
- int socket, ret;
-
- RT_ASSERT(ctx);
- RT_ASSERT(buf);
-
- socket = ((mbedtls_net_context *) ctx)->fd;
- sock = sal_get_socket(socket);
- if (sock == RT_NULL)
- {
- return -1;
- }
-
- pf = (struct sal_proto_family *)sock->netdev->sal_user_data;
-
- /* Register scoket recvfrom option to TLS recv data callback */
- ret = pf->skt_ops->recvfrom((int) sock->user_data, (void *)buf, len, 0, RT_NULL, RT_NULL);
- if (ret < 0)
- {
-#ifdef RT_USING_DFS
- if ((fcntl(socket, F_GETFL) & O_NONBLOCK) == O_NONBLOCK)
- return MBEDTLS_ERR_SSL_WANT_WRITE;
-#endif
- if (errno == ECONNRESET)
- return MBEDTLS_ERR_NET_CONN_RESET;
- if ( errno == EINTR)
- return MBEDTLS_ERR_SSL_WANT_READ;
-
- return MBEDTLS_ERR_NET_RECV_FAILED ;
- }
-
- return ret;
-}
-
-static int mbedtls_connect(void *sock)
-{
- MbedTLSSession *session = RT_NULL;
- int ret = 0;
-
- RT_ASSERT(sock);
-
- session = (MbedTLSSession *) sock;
-
- /* Set the SSL Configure infromation */
- ret = mbedtls_client_context(session);
- if (ret < 0)
- {
- goto __exit;
- }
-
- /* Set the underlying BIO callbacks for write, read and read-with-timeout. */
- mbedtls_ssl_set_bio(&session->ssl, &session->server_fd, mbedtls_net_send_cb, mbedtls_net_recv_cb, RT_NULL);
-
- while ((ret = mbedtls_ssl_handshake(&session->ssl)) != 0)
- {
- if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE)
- {
- goto __exit;
- }
- }
-
- /* Return the result of the certificate verification */
- ret = mbedtls_ssl_get_verify_result(&session->ssl);
- if (ret != 0)
- {
- rt_memset(session->buffer, 0x00, session->buffer_len);
- mbedtls_x509_crt_verify_info((char *)session->buffer, session->buffer_len, " ! ", ret);
- goto __exit;
- }
-
- return ret;
-
-__exit:
- if (session)
- {
- mbedtls_client_close(session);
- }
-
- return ret;
-}
-
-static int mbedtls_closesocket(void *sock)
-{
- struct sal_socket *ssock;
- int socket;
-
- if (sock == RT_NULL)
- {
- return 0;
- }
-
- socket = ((MbedTLSSession *) sock)->server_fd.fd;
- ssock = sal_get_socket(socket);
- if (ssock == RT_NULL)
- {
- return -1;
- }
-
- /* Close TLS client session, and clean user-data in SAL socket */
- mbedtls_client_close((MbedTLSSession *) sock);
- ssock->user_data_tls = RT_NULL;
-
- return 0;
-}
-
-static const struct sal_proto_tls_ops mbedtls_proto_ops=
-{
- RT_NULL,
- mebdtls_socket,
- mbedtls_connect,
- (int (*)(void *sock, const void *data, size_t size)) mbedtls_client_write,
- (int (*)(void *sock, void *mem, size_t len)) mbedtls_client_read,
- mbedtls_closesocket,
-};
-
-static const struct sal_proto_tls mbedtls_proto =
-{
- "mbedtls",
- &mbedtls_proto_ops,
-};
-
-int sal_mbedtls_proto_init(void)
-{
- /* register MbedTLS protocol options to SAL */
- sal_proto_tls_register(&mbedtls_proto);
-
- return 0;
-}
-INIT_COMPONENT_EXPORT(sal_mbedtls_proto_init);
-
-#endif /* SAL_USING_TLS */