xref: /aosp_15_r20/external/deqp/framework/delibs/deutil/deSocket.h (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _DESOCKET_H
2*35238bceSAndroid Build Coastguard Worker #define _DESOCKET_H
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Utility Library
5*35238bceSAndroid Build Coastguard Worker  * ----------------------------
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker  *
9*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker  *
15*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker  *
21*35238bceSAndroid Build Coastguard Worker  *//*!
22*35238bceSAndroid Build Coastguard Worker  * \file
23*35238bceSAndroid Build Coastguard Worker  * \brief Socket abstraction.
24*35238bceSAndroid Build Coastguard Worker  *
25*35238bceSAndroid Build Coastguard Worker  * Socket API is thread-safe except to:
26*35238bceSAndroid Build Coastguard Worker  *  - listen()
27*35238bceSAndroid Build Coastguard Worker  *  - connect()
28*35238bceSAndroid Build Coastguard Worker  *  - destroy()
29*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
30*35238bceSAndroid Build Coastguard Worker 
31*35238bceSAndroid Build Coastguard Worker #include "deDefs.h"
32*35238bceSAndroid Build Coastguard Worker 
33*35238bceSAndroid Build Coastguard Worker DE_BEGIN_EXTERN_C
34*35238bceSAndroid Build Coastguard Worker 
35*35238bceSAndroid Build Coastguard Worker /* Socket types. */
36*35238bceSAndroid Build Coastguard Worker typedef struct deSocket_s deSocket;
37*35238bceSAndroid Build Coastguard Worker typedef struct deSocketAddress_s deSocketAddress;
38*35238bceSAndroid Build Coastguard Worker 
39*35238bceSAndroid Build Coastguard Worker typedef enum deSocketFamily_e
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker     DE_SOCKETFAMILY_INET4 = 0,
42*35238bceSAndroid Build Coastguard Worker     DE_SOCKETFAMILY_INET6,
43*35238bceSAndroid Build Coastguard Worker 
44*35238bceSAndroid Build Coastguard Worker     DE_SOCKETFAMILY_LAST
45*35238bceSAndroid Build Coastguard Worker } deSocketFamily;
46*35238bceSAndroid Build Coastguard Worker 
47*35238bceSAndroid Build Coastguard Worker typedef enum deSocketType_e
48*35238bceSAndroid Build Coastguard Worker {
49*35238bceSAndroid Build Coastguard Worker     DE_SOCKETTYPE_STREAM = 0,
50*35238bceSAndroid Build Coastguard Worker     DE_SOCKETTYPE_DATAGRAM,
51*35238bceSAndroid Build Coastguard Worker 
52*35238bceSAndroid Build Coastguard Worker     DE_SOCKETTYPE_LAST
53*35238bceSAndroid Build Coastguard Worker } deSocketType;
54*35238bceSAndroid Build Coastguard Worker 
55*35238bceSAndroid Build Coastguard Worker typedef enum deSocketProtocol_e
56*35238bceSAndroid Build Coastguard Worker {
57*35238bceSAndroid Build Coastguard Worker     DE_SOCKETPROTOCOL_TCP = 0,
58*35238bceSAndroid Build Coastguard Worker     DE_SOCKETPROTOCOL_UDP,
59*35238bceSAndroid Build Coastguard Worker 
60*35238bceSAndroid Build Coastguard Worker     DE_SOCKETPROTOCOL_LAST
61*35238bceSAndroid Build Coastguard Worker } deSocketProtocol;
62*35238bceSAndroid Build Coastguard Worker 
63*35238bceSAndroid Build Coastguard Worker typedef enum deSocketFlag_e
64*35238bceSAndroid Build Coastguard Worker {
65*35238bceSAndroid Build Coastguard Worker     DE_SOCKET_KEEPALIVE     = (1 << 0),
66*35238bceSAndroid Build Coastguard Worker     DE_SOCKET_NODELAY       = (1 << 1),
67*35238bceSAndroid Build Coastguard Worker     DE_SOCKET_NONBLOCKING   = (1 << 2),
68*35238bceSAndroid Build Coastguard Worker     DE_SOCKET_CLOSE_ON_EXEC = (1 << 3)
69*35238bceSAndroid Build Coastguard Worker } deSocketFlag;
70*35238bceSAndroid Build Coastguard Worker 
71*35238bceSAndroid Build Coastguard Worker /* \todo [2012-07-09 pyry] Separate closed bits for send and receive channels. */
72*35238bceSAndroid Build Coastguard Worker 
73*35238bceSAndroid Build Coastguard Worker typedef enum deSocketState_e
74*35238bceSAndroid Build Coastguard Worker {
75*35238bceSAndroid Build Coastguard Worker     DE_SOCKETSTATE_CLOSED       = 0,
76*35238bceSAndroid Build Coastguard Worker     DE_SOCKETSTATE_CONNECTED    = 1,
77*35238bceSAndroid Build Coastguard Worker     DE_SOCKETSTATE_LISTENING    = 2,
78*35238bceSAndroid Build Coastguard Worker     DE_SOCKETSTATE_DISCONNECTED = 3,
79*35238bceSAndroid Build Coastguard Worker 
80*35238bceSAndroid Build Coastguard Worker     DE_SOCKETSTATE_LAST
81*35238bceSAndroid Build Coastguard Worker } deSocketState;
82*35238bceSAndroid Build Coastguard Worker 
83*35238bceSAndroid Build Coastguard Worker typedef enum deSocketResult_e
84*35238bceSAndroid Build Coastguard Worker {
85*35238bceSAndroid Build Coastguard Worker     DE_SOCKETRESULT_SUCCESS               = 0,
86*35238bceSAndroid Build Coastguard Worker     DE_SOCKETRESULT_WOULD_BLOCK           = 1,
87*35238bceSAndroid Build Coastguard Worker     DE_SOCKETRESULT_CONNECTION_CLOSED     = 2,
88*35238bceSAndroid Build Coastguard Worker     DE_SOCKETRESULT_CONNECTION_TERMINATED = 3,
89*35238bceSAndroid Build Coastguard Worker     DE_SOCKETRESULT_ERROR                 = 4,
90*35238bceSAndroid Build Coastguard Worker 
91*35238bceSAndroid Build Coastguard Worker     DE_SOCKETRESULT_LAST
92*35238bceSAndroid Build Coastguard Worker } deSocketResult;
93*35238bceSAndroid Build Coastguard Worker 
94*35238bceSAndroid Build Coastguard Worker typedef enum deSocketChannel_e
95*35238bceSAndroid Build Coastguard Worker {
96*35238bceSAndroid Build Coastguard Worker     DE_SOCKETCHANNEL_RECEIVE = (1 << 0),
97*35238bceSAndroid Build Coastguard Worker     DE_SOCKETCHANNEL_SEND    = (1 << 1),
98*35238bceSAndroid Build Coastguard Worker 
99*35238bceSAndroid Build Coastguard Worker     DE_SOCKETCHANNEL_BOTH = DE_SOCKETCHANNEL_RECEIVE | DE_SOCKETCHANNEL_SEND
100*35238bceSAndroid Build Coastguard Worker } deSocketChannel;
101*35238bceSAndroid Build Coastguard Worker 
102*35238bceSAndroid Build Coastguard Worker /* Socket API, similar to Berkeley sockets. */
103*35238bceSAndroid Build Coastguard Worker 
104*35238bceSAndroid Build Coastguard Worker deSocketAddress *deSocketAddress_create(void);
105*35238bceSAndroid Build Coastguard Worker void deSocketAddress_destroy(deSocketAddress *address);
106*35238bceSAndroid Build Coastguard Worker 
107*35238bceSAndroid Build Coastguard Worker bool deSocketAddress_setFamily(deSocketAddress *address, deSocketFamily family);
108*35238bceSAndroid Build Coastguard Worker deSocketFamily deSocketAddress_getFamily(const deSocketAddress *address);
109*35238bceSAndroid Build Coastguard Worker bool deSocketAddress_setType(deSocketAddress *address, deSocketType type);
110*35238bceSAndroid Build Coastguard Worker deSocketType deSocketAddress_getType(const deSocketAddress *address);
111*35238bceSAndroid Build Coastguard Worker bool deSocketAddress_setProtocol(deSocketAddress *address, deSocketProtocol protocol);
112*35238bceSAndroid Build Coastguard Worker deSocketProtocol deSocketAddress_getProtocol(const deSocketAddress *address);
113*35238bceSAndroid Build Coastguard Worker bool deSocketAddress_setPort(deSocketAddress *address, int port);
114*35238bceSAndroid Build Coastguard Worker int deSocketAddress_getPort(const deSocketAddress *address);
115*35238bceSAndroid Build Coastguard Worker bool deSocketAddress_setHost(deSocketAddress *address, const char *host);
116*35238bceSAndroid Build Coastguard Worker const char *deSocketAddress_getHost(const deSocketAddress *address);
117*35238bceSAndroid Build Coastguard Worker 
118*35238bceSAndroid Build Coastguard Worker deSocket *deSocket_create(void);
119*35238bceSAndroid Build Coastguard Worker void deSocket_destroy(deSocket *socket);
120*35238bceSAndroid Build Coastguard Worker 
121*35238bceSAndroid Build Coastguard Worker deSocketState deSocket_getState(const deSocket *socket);
122*35238bceSAndroid Build Coastguard Worker uint32_t deSocket_getOpenChannels(const deSocket *socket);
123*35238bceSAndroid Build Coastguard Worker 
124*35238bceSAndroid Build Coastguard Worker bool deSocket_setFlags(deSocket *socket, uint32_t flags);
125*35238bceSAndroid Build Coastguard Worker 
126*35238bceSAndroid Build Coastguard Worker bool deSocket_listen(deSocket *socket, const deSocketAddress *address);
127*35238bceSAndroid Build Coastguard Worker deSocket *deSocket_accept(deSocket *socket, deSocketAddress *clientAddress);
128*35238bceSAndroid Build Coastguard Worker 
129*35238bceSAndroid Build Coastguard Worker bool deSocket_connect(deSocket *socket, const deSocketAddress *address);
130*35238bceSAndroid Build Coastguard Worker 
131*35238bceSAndroid Build Coastguard Worker bool deSocket_shutdown(deSocket *socket, uint32_t channels);
132*35238bceSAndroid Build Coastguard Worker bool deSocket_close(deSocket *socket);
133*35238bceSAndroid Build Coastguard Worker 
134*35238bceSAndroid Build Coastguard Worker deSocketResult deSocket_send(deSocket *socket, const void *buf, size_t bufSize, size_t *numSent);
135*35238bceSAndroid Build Coastguard Worker deSocketResult deSocket_receive(deSocket *socket, void *buf, size_t bufSize, size_t *numReceived);
136*35238bceSAndroid Build Coastguard Worker 
137*35238bceSAndroid Build Coastguard Worker /* Utilities. */
138*35238bceSAndroid Build Coastguard Worker 
139*35238bceSAndroid Build Coastguard Worker const char *deGetSocketFamilyName(deSocketFamily family);
140*35238bceSAndroid Build Coastguard Worker const char *deGetSocketResultName(deSocketResult result);
141*35238bceSAndroid Build Coastguard Worker 
142*35238bceSAndroid Build Coastguard Worker DE_END_EXTERN_C
143*35238bceSAndroid Build Coastguard Worker 
144*35238bceSAndroid Build Coastguard Worker #endif /* _DESOCKET_H */
145