Update Files
This commit is contained in:
49
Kinc/Sources/kinc/libs/plat/optee/CMakeLists.txt
Normal file
49
Kinc/Sources/kinc/libs/plat/optee/CMakeLists.txt
Normal file
@ -0,0 +1,49 @@
|
||||
#
|
||||
# libwebsockets - small server side websockets and web server implementation
|
||||
#
|
||||
# Copyright (C) 2010 - 2020 Andy Green <andy@warmcat.com>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
#
|
||||
# The strategy is to only export to PARENT_SCOPE
|
||||
#
|
||||
# - changes to LIB_LIST
|
||||
# - changes to SOURCES
|
||||
# - includes via include_directories
|
||||
#
|
||||
# and keep everything else private
|
||||
|
||||
include_directories(.)
|
||||
|
||||
list(APPEND SOURCES
|
||||
plat/optee/lws-plat-optee.c
|
||||
)
|
||||
if (LWS_WITH_NETWORK)
|
||||
list(APPEND SOURCES
|
||||
plat/optee/network.c
|
||||
)
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot ../../../../lib/libutils/isoc/include -I../../../../lib/libutils/isoc/include -I../../../../lib/libutils/ext/include" )
|
||||
|
||||
#
|
||||
# Keep explicit parent scope exports at end
|
||||
#
|
||||
|
||||
exports_to_parent_scope()
|
261
Kinc/Sources/kinc/libs/plat/optee/lws-plat-optee.c
Normal file
261
Kinc/Sources/kinc/libs/plat/optee/lws-plat-optee.c
Normal file
@ -0,0 +1,261 @@
|
||||
/*
|
||||
* libwebsockets - small server side websockets and web server implementation
|
||||
*
|
||||
* Copyright (C) 2010 - 2019 Andy Green <andy@warmcat.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "private-lib-core.h"
|
||||
|
||||
#if !defined(LWS_WITH_NETWORK)
|
||||
#include <crypto/crypto.h>
|
||||
#endif
|
||||
|
||||
int errno;
|
||||
|
||||
#if !defined(LWS_WITH_NETWORK)
|
||||
char *
|
||||
strcpy(char *dest, const char *src)
|
||||
{
|
||||
char *desto = dest;
|
||||
|
||||
while (*src)
|
||||
*(dest++) = *(src++);
|
||||
|
||||
*(dest++) = '\0';
|
||||
|
||||
return desto;
|
||||
}
|
||||
|
||||
char *strncpy(char *dest, const char *src, size_t limit)
|
||||
{
|
||||
char *desto = dest;
|
||||
|
||||
while (*src && limit--)
|
||||
*(dest++) = *(src++);
|
||||
|
||||
if (limit)
|
||||
*(dest++) = '\0';
|
||||
|
||||
return desto;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int lws_plat_apply_FD_CLOEXEC(int n)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void TEE_GenerateRandom(void *randomBuffer, uint32_t randomBufferLen);
|
||||
#if defined(LWS_WITH_NETWORK)
|
||||
uint64_t
|
||||
lws_now_usecs(void)
|
||||
{
|
||||
return ((unsigned long long)time(NULL)) * 1000000;
|
||||
}
|
||||
#endif
|
||||
|
||||
size_t
|
||||
lws_get_random(struct lws_context *context, void *buf, size_t len)
|
||||
{
|
||||
#if defined(LWS_WITH_NETWORK)
|
||||
TEE_GenerateRandom(buf, len);
|
||||
#else
|
||||
crypto_rng_read(buf, len);
|
||||
#endif
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
static const char * const colours[] = {
|
||||
"[31;1m", /* LLL_ERR */
|
||||
"[36;1m", /* LLL_WARN */
|
||||
"[35;1m", /* LLL_NOTICE */
|
||||
"[32;1m", /* LLL_INFO */
|
||||
"[34;1m", /* LLL_DEBUG */
|
||||
"[33;1m", /* LLL_PARSER */
|
||||
"[33;1m", /* LLL_HEADER */
|
||||
"[33;1m", /* LLL_EXT */
|
||||
"[33;1m", /* LLL_CLIENT */
|
||||
"[33;1m", /* LLL_LATENCY */
|
||||
"[30;1m", /* LLL_USER */
|
||||
};
|
||||
|
||||
void lwsl_emit_optee(int level, const char *line)
|
||||
{
|
||||
char buf[50], linecp[512];
|
||||
int n, m = LWS_ARRAY_SIZE(colours) - 1;
|
||||
|
||||
lwsl_timestamp(level, buf, sizeof(buf));
|
||||
|
||||
n = 1 << (LWS_ARRAY_SIZE(colours) - 1);
|
||||
while (n) {
|
||||
if (level & n)
|
||||
break;
|
||||
m--;
|
||||
n >>= 1;
|
||||
}
|
||||
n = strlen(line);
|
||||
if ((unsigned int)n > sizeof(linecp) - 1)
|
||||
n = sizeof(linecp) - 1;
|
||||
if (n) {
|
||||
memcpy(linecp, line, n - 1);
|
||||
linecp[n - 1] = '\0';
|
||||
} else
|
||||
linecp[0] = '\0';
|
||||
EMSG("%c%s%s%s%c[0m", 27, colours[m], buf, linecp, 27);
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_set_nonblocking(lws_sockfd_type fd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_drop_app_privileges(struct lws_context *context, int actually_init)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_context_early_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
lws_plat_context_early_destroy(struct lws_context *context)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
lws_plat_context_late_destroy(struct lws_context *context)
|
||||
{
|
||||
#if defined(LWS_WITH_NETWORK)
|
||||
if (context->lws_lookup)
|
||||
lws_free(context->lws_lookup);
|
||||
#endif
|
||||
}
|
||||
|
||||
lws_fop_fd_t
|
||||
_lws_plat_file_open(const struct lws_plat_file_ops *fops,
|
||||
const char *filename, const char *vpath, lws_fop_flags_t *flags)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
_lws_plat_file_close(lws_fop_fd_t *fop_fd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
lws_fileofs_t
|
||||
_lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
_lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount,
|
||||
uint8_t *buf, lws_filepos_t len)
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
_lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount,
|
||||
uint8_t *buf, lws_filepos_t len)
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
lws_plat_init(struct lws_context *context,
|
||||
const struct lws_context_creation_info *info)
|
||||
{
|
||||
#if defined(LWS_WITH_NETWORK)
|
||||
/* context has the global fd lookup array */
|
||||
context->lws_lookup = lws_zalloc(sizeof(struct lws *) *
|
||||
context->max_fds, "lws_lookup");
|
||||
if (context->lws_lookup == NULL) {
|
||||
lwsl_err("OOM on lws_lookup array for %d connections\n",
|
||||
context->max_fds);
|
||||
return 1;
|
||||
}
|
||||
|
||||
lwsl_notice(" mem: platform fd map: %5lu bytes\n",
|
||||
(long)sizeof(struct lws *) * context->max_fds);
|
||||
#endif
|
||||
#ifdef LWS_WITH_PLUGINS
|
||||
if (info->plugin_dirs)
|
||||
lws_plat_plugins_init(context, info->plugin_dirs);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_write_file(const char *filename, void *buf, size_t len)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_read_file(const char *filename, void *buf, int len)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_recommended_rsa_bits(void)
|
||||
{
|
||||
return 4096;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_ntpclient_config(struct lws_context *context)
|
||||
{
|
||||
#if 0
|
||||
char *ntpsrv = getenv("LWS_NTP_SERVER");
|
||||
|
||||
if (ntpsrv && strlen(ntpsrv) < 64) {
|
||||
lws_system_blob_heap_append(lws_system_get_blob(context,
|
||||
LWS_SYSBLOB_TYPE_NTP_SERVER, 0),
|
||||
(const uint8_t *)ntpsrv,
|
||||
strlen(ntpsrv));
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
lws_msleep(unsigned int ms)
|
||||
{
|
||||
}
|
||||
|
||||
|
328
Kinc/Sources/kinc/libs/plat/optee/network.c
Normal file
328
Kinc/Sources/kinc/libs/plat/optee/network.c
Normal file
@ -0,0 +1,328 @@
|
||||
/*
|
||||
* libwebsockets - small server side websockets and web server implementation
|
||||
*
|
||||
* Copyright (C) 2010 - 2019 Andy Green <andy@warmcat.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "private-lib-core.h"
|
||||
|
||||
#if defined(LWS_WITH_MBEDTLS)
|
||||
#if defined(LWS_HAVE_MBEDTLS_NET_SOCKETS)
|
||||
#include "mbedtls/net_sockets.h"
|
||||
#else
|
||||
#include "mbedtls/net.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
int
|
||||
lws_plat_pipe_create(struct lws *wsi)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_pipe_signal(struct lws *wsi)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
lws_plat_pipe_close(struct lws *wsi)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_pipe_is_fd_assocated(struct lws_context *cx, int tsi, lws_sockfd_type fd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
lws_send_pipe_choked(struct lws *wsi)
|
||||
{
|
||||
struct lws *wsi_eff;
|
||||
|
||||
#if defined(LWS_WITH_HTTP2)
|
||||
wsi_eff = lws_get_network_wsi(wsi);
|
||||
#else
|
||||
wsi_eff = wsi;
|
||||
#endif
|
||||
|
||||
/* the fact we checked implies we avoided back-to-back writes */
|
||||
wsi_eff->could_have_pending = 0;
|
||||
|
||||
/* treat the fact we got a truncated send pending as if we're choked */
|
||||
if (lws_has_buffered_out(wsi_eff)
|
||||
#if defined(LWS_WITH_HTTP_STREAM_COMPRESSION)
|
||||
|| wsi->http.comp_ctx.buflist_comp ||
|
||||
wsi->http.comp_ctx.may_have_more
|
||||
#endif
|
||||
)
|
||||
return 1;
|
||||
|
||||
/* okay to send another packet without blocking */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
lws_poll_listen_fd(struct lws_pollfd *fd)
|
||||
{
|
||||
// return poll(fd, 1, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
_lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
|
||||
{
|
||||
lws_usec_t timeout_us = timeout_ms * LWS_US_PER_MS;
|
||||
struct lws_context_per_thread *pt;
|
||||
int n = -1, m, c, a = 0;
|
||||
//char buf;
|
||||
|
||||
/* stay dead once we are dead */
|
||||
|
||||
if (!context)
|
||||
return 1;
|
||||
|
||||
pt = &context->pt[tsi];
|
||||
|
||||
if (timeout_ms < 0)
|
||||
timeout_ms = 0;
|
||||
else
|
||||
timeout_ms = 2000000000;
|
||||
|
||||
if (!pt->service_tid_detected && context->vhost_list) {
|
||||
struct lws _lws;
|
||||
|
||||
memset(&_lws, 0, sizeof(_lws));
|
||||
_lws.context = context;
|
||||
|
||||
pt->service_tid = context->vhost_list->protocols[0].callback(
|
||||
&_lws, LWS_CALLBACK_GET_THREAD_ID, NULL, NULL, 0);
|
||||
pt->service_tid_detected = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* is there anybody with pending stuff that needs service forcing?
|
||||
*/
|
||||
if (lws_service_adjust_timeout(context, 1, tsi)) {
|
||||
again:
|
||||
a = 0;
|
||||
if (timeout_us) {
|
||||
lws_usec_t us;
|
||||
|
||||
lws_pt_lock(pt, __func__);
|
||||
/* don't stay in poll wait longer than next hr timeout */
|
||||
us = __lws_sul_service_ripe(pt->pt_sul_owner,
|
||||
LWS_COUNT_PT_SUL_OWNERS,
|
||||
lws_now_usecs());
|
||||
if (us && us < timeout_us)
|
||||
timeout_us = us;
|
||||
|
||||
lws_pt_unlock(pt);
|
||||
}
|
||||
|
||||
n = poll(pt->fds, pt->fds_count, timeout_us / LWS_US_PER_MS);
|
||||
|
||||
m = 0;
|
||||
|
||||
if (pt->context->tls_ops &&
|
||||
pt->context->tls_ops->fake_POLLIN_for_buffered)
|
||||
m = pt->context->tls_ops->fake_POLLIN_for_buffered(pt);
|
||||
|
||||
if (/*!pt->ws.rx_draining_ext_list && */!m && !n) /* nothing to do */
|
||||
return 0;
|
||||
} else
|
||||
a = 1;
|
||||
|
||||
m = lws_service_flag_pending(context, tsi);
|
||||
if (m)
|
||||
c = -1; /* unknown limit */
|
||||
else
|
||||
if (n < 0) {
|
||||
if (LWS_ERRNO != LWS_EINTR)
|
||||
return -1;
|
||||
return 0;
|
||||
} else
|
||||
c = n;
|
||||
|
||||
/* any socket with events to service? */
|
||||
for (n = 0; n < (int)pt->fds_count && c; n++) {
|
||||
if (!pt->fds[n].revents)
|
||||
continue;
|
||||
|
||||
c--;
|
||||
#if 0
|
||||
if (pt->fds[n].fd == pt->dummy_pipe_fds[0]) {
|
||||
if (read(pt->fds[n].fd, &buf, 1) != 1)
|
||||
lwsl_err("Cannot read from dummy pipe.");
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
m = lws_service_fd_tsi(context, &pt->fds[n], tsi);
|
||||
if (m < 0)
|
||||
return -1;
|
||||
/* if something closed, retry this slot */
|
||||
if (m)
|
||||
n--;
|
||||
}
|
||||
|
||||
if (a)
|
||||
goto again;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_service(struct lws_context *context, int timeout_ms)
|
||||
{
|
||||
return _lws_plat_service_tsi(context, timeout_ms, 0);
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_set_socket_options(struct lws_vhost *vhost, int fd, int unix_skt)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
lws_plat_write_cert(struct lws_vhost *vhost, int is_key, int fd, void *buf,
|
||||
size_t len)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* cast a struct sockaddr_in6 * into addr for ipv6 */
|
||||
|
||||
int
|
||||
lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr,
|
||||
size_t addrlen)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
void
|
||||
lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi)
|
||||
{
|
||||
struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi];
|
||||
|
||||
pt->fds[pt->fds_count++].revents = 0;
|
||||
}
|
||||
|
||||
void
|
||||
lws_plat_delete_socket_from_fds(struct lws_context *context,
|
||||
struct lws *wsi, int m)
|
||||
{
|
||||
struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi];
|
||||
|
||||
pt->fds_count--;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_change_pollfd(struct lws_context *context,
|
||||
struct lws *wsi, struct lws_pollfd *pfd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *
|
||||
lws_plat_inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
|
||||
{
|
||||
//return inet_ntop(af, src, dst, cnt);
|
||||
return "lws_plat_inet_ntop";
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_inet_pton(int af, const char *src, void *dst)
|
||||
{
|
||||
//return inet_pton(af, src, dst);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_set_socket_options_ip(int fd, uint8_t pri, unsigned int lws_flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_vhost_tls_client_ctx_init(struct lws_vhost *vhost)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(LWS_WITH_MBEDTLS)
|
||||
int
|
||||
lws_plat_mbedtls_net_send(void *ctx, const uint8_t *buf, size_t len)
|
||||
{
|
||||
int fd = ((mbedtls_net_context *) ctx)->fd;
|
||||
int ret;
|
||||
|
||||
if (fd < 0)
|
||||
return MBEDTLS_ERR_NET_INVALID_CONTEXT;
|
||||
|
||||
ret = write(fd, buf, len);
|
||||
if (ret >= 0)
|
||||
return ret;
|
||||
|
||||
if (errno == EAGAIN || errno == EWOULDBLOCK)
|
||||
return MBEDTLS_ERR_SSL_WANT_WRITE;
|
||||
|
||||
if (errno == EPIPE || errno == ECONNRESET)
|
||||
return MBEDTLS_ERR_NET_CONN_RESET;
|
||||
|
||||
if( errno == EINTR )
|
||||
return MBEDTLS_ERR_SSL_WANT_WRITE;
|
||||
|
||||
return MBEDTLS_ERR_NET_SEND_FAILED;
|
||||
}
|
||||
|
||||
int
|
||||
lws_plat_mbedtls_net_recv(void *ctx, unsigned char *buf, size_t len)
|
||||
{
|
||||
int fd = ((mbedtls_net_context *) ctx)->fd;
|
||||
int ret;
|
||||
|
||||
if (fd < 0)
|
||||
return MBEDTLS_ERR_NET_INVALID_CONTEXT;
|
||||
|
||||
ret = (int)read(fd, buf, len);
|
||||
if (ret >= 0)
|
||||
return ret;
|
||||
|
||||
if (errno == EAGAIN || errno == EWOULDBLOCK)
|
||||
return MBEDTLS_ERR_SSL_WANT_READ;
|
||||
|
||||
if (errno == EPIPE || errno == ECONNRESET)
|
||||
return MBEDTLS_ERR_NET_CONN_RESET;
|
||||
|
||||
if (errno == EINTR)
|
||||
return MBEDTLS_ERR_SSL_WANT_READ;
|
||||
|
||||
return MBEDTLS_ERR_NET_RECV_FAILED;
|
||||
}
|
||||
|
||||
#endif
|
51
Kinc/Sources/kinc/libs/plat/optee/private-lib-plat-optee.h
Normal file
51
Kinc/Sources/kinc/libs/plat/optee/private-lib-plat-optee.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* libwebsockets - small server side websockets and web server implementation
|
||||
*
|
||||
* Copyright (C) 2010 - 2019 Andy Green <andy@warmcat.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*
|
||||
* Included from lib/private-lib-core.h if LWS_WITH_OPTEE
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#define LWS_ERRNO errno
|
||||
#define LWS_EAGAIN EAGAIN
|
||||
#define LWS_EALREADY EALREADY
|
||||
#define LWS_EINPROGRESS EINPROGRESS
|
||||
#define LWS_EINTR EINTR
|
||||
#define LWS_EISCONN EISCONN
|
||||
#define LWS_ENOTCONN ENOTCONN
|
||||
#define LWS_EWOULDBLOCK EWOULDBLOCK
|
||||
#define LWS_EADDRINUSE EADDRINUSE
|
||||
|
||||
#define lws_set_blocking_send(wsi)
|
||||
|
||||
#define compatible_close(x) close(x)
|
||||
#define lws_plat_socket_offset() (0)
|
||||
#define wsi_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()]
|
||||
#define insert_wsi(A,B) assert(A->lws_lookup[B->desc.sockfd - \
|
||||
lws_plat_socket_offset()] == 0); \
|
||||
A->lws_lookup[B->desc.sockfd - \
|
||||
lws_plat_socket_offset()] = B
|
||||
#define delete_from_fd(A,B) assert((int)A->max_fds > B - lws_plat_socket_offset()); \
|
||||
A->lws_lookup[B - lws_plat_socket_offset()] = 0
|
||||
|
Reference in New Issue
Block a user