summaryrefslogtreecommitdiffstats
path: root/src/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/shared/platform/linux-sgx/untrusted/socket.c
blob: 6f598ab8ffbc32a49a47f1cf95ce8341f07e15bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
 * Copyright (C) 2019 Intel Corporation.  All rights reserved.
 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 */
#include <sys/types.h>
#include <sys/socket.h>
#include <stdint.h>
#include <stddef.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int
ocall_socket(int domain, int type, int protocol)
{
    return socket(domain, type, protocol);
}

int
ocall_getsockopt(int sockfd, int level, int optname, void *val_buf,
                 unsigned int val_buf_size, void *len_buf)
{
    return getsockopt(sockfd, level, optname, val_buf, (socklen_t *)len_buf);
}

ssize_t
ocall_sendmsg(int sockfd, void *msg_buf, unsigned int msg_buf_size, int flags)
{
    struct msghdr *msg = (struct msghdr *)msg_buf;
    int i;
    ssize_t ret;

    if (msg->msg_name != NULL)
        msg->msg_name = msg_buf + (unsigned)(uintptr_t)msg->msg_name;

    if (msg->msg_control != NULL)
        msg->msg_control = msg_buf + (unsigned)(uintptr_t)msg->msg_control;

    if (msg->msg_iov != NULL) {
        msg->msg_iov = msg_buf + (unsigned)(uintptr_t)msg->msg_iov;
        for (i = 0; i < msg->msg_iovlen; i++) {
            msg->msg_iov[i].iov_base =
                msg_buf + (unsigned)(uintptr_t)msg->msg_iov[i].iov_base;
        }
    }

    return sendmsg(sockfd, msg, flags);
}

ssize_t
ocall_recvmsg(int sockfd, void *msg_buf, unsigned int msg_buf_size, int flags)
{
    struct msghdr *msg = (struct msghdr *)msg_buf;
    int i;
    ssize_t ret;

    if (msg->msg_name != NULL)
        msg->msg_name = msg_buf + (unsigned)(uintptr_t)msg->msg_name;

    if (msg->msg_control != NULL)
        msg->msg_control = msg_buf + (unsigned)(uintptr_t)msg->msg_control;

    if (msg->msg_iov != NULL) {
        msg->msg_iov = msg_buf + (unsigned)(uintptr_t)msg->msg_iov;
        for (i = 0; i < msg->msg_iovlen; i++) {
            msg->msg_iov[i].iov_base =
                msg_buf + (unsigned)(uintptr_t)msg->msg_iov[i].iov_base;
        }
    }

    return recvmsg(sockfd, msg, flags);
}

int
ocall_shutdown(int sockfd, int how)
{
    return shutdown(sockfd, how);
}

int
ocall_setsockopt(int sockfd, int level, int optname, void *optval,
                 unsigned int optlen)
{
    return setsockopt(sockfd, level, optname, optval, optlen);
}

int
ocall_bind(int sockfd, const void *addr, uint32_t addrlen)
{
    return bind(sockfd, (const struct sockaddr *)addr, addrlen);
}

int
ocall_getsockname(int sockfd, void *addr, uint32_t *addrlen, uint32_t addr_size)
{
    return getsockname(sockfd, (struct sockaddr *)addr, addrlen);
}

int
ocall_getpeername(int sockfd, void *addr, uint32_t *addrlen, uint32_t addr_size)
{
    return getpeername(sockfd, (struct sockaddr *)addr, addrlen);
}

int
ocall_listen(int sockfd, int backlog)
{
    return listen(sockfd, backlog);
}

int
ocall_accept(int sockfd, void *addr, uint32_t *addrlen, uint32_t addr_size)
{
    return accept(sockfd, (struct sockaddr *)addr, addrlen);
}

int
ocall_recv(int sockfd, void *buf, size_t len, int flags)
{
    return recv(sockfd, buf, len, flags);
}

ssize_t
ocall_recvfrom(int sockfd, void *buf, size_t len, int flags, void *src_addr,
               uint32_t *addrlen, uint32_t addr_size)
{
    return recvfrom(sockfd, buf, len, flags, (struct sockaddr *)src_addr,
                    addrlen);
}

int
ocall_send(int sockfd, const void *buf, size_t len, int flags)
{
    return send(sockfd, buf, len, flags);
}

ssize_t
ocall_sendto(int sockfd, const void *buf, size_t len, int flags,
             void *dest_addr, uint32_t addrlen)
{
    return sendto(sockfd, buf, len, flags, (struct sockaddr *)dest_addr,
                  addrlen);
}

int
ocall_connect(int sockfd, void *addr, uint32_t addrlen)
{
    return connect(sockfd, (const struct sockaddr *)addr, addrlen);
}