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