xref: /aosp_15_r20/external/deqp/framework/delibs/decpp/deSocket.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _DESOCKET_HPP
2*35238bceSAndroid Build Coastguard Worker #define _DESOCKET_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements C++ Base 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 deSocket C++ wrapper.
24*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include "deDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "deSocket.h"
28*35238bceSAndroid Build Coastguard Worker 
29*35238bceSAndroid Build Coastguard Worker #include <string>
30*35238bceSAndroid Build Coastguard Worker #include <stdexcept>
31*35238bceSAndroid Build Coastguard Worker 
32*35238bceSAndroid Build Coastguard Worker namespace de
33*35238bceSAndroid Build Coastguard Worker {
34*35238bceSAndroid Build Coastguard Worker 
35*35238bceSAndroid Build Coastguard Worker class SocketError : public std::runtime_error
36*35238bceSAndroid Build Coastguard Worker {
37*35238bceSAndroid Build Coastguard Worker public:
SocketError(const std::string & message)38*35238bceSAndroid Build Coastguard Worker     SocketError(const std::string &message) : std::runtime_error(message)
39*35238bceSAndroid Build Coastguard Worker     {
40*35238bceSAndroid Build Coastguard Worker     }
41*35238bceSAndroid Build Coastguard Worker };
42*35238bceSAndroid Build Coastguard Worker 
43*35238bceSAndroid Build Coastguard Worker class SocketAddress
44*35238bceSAndroid Build Coastguard Worker {
45*35238bceSAndroid Build Coastguard Worker public:
46*35238bceSAndroid Build Coastguard Worker     SocketAddress(void);
47*35238bceSAndroid Build Coastguard Worker     ~SocketAddress(void);
48*35238bceSAndroid Build Coastguard Worker 
49*35238bceSAndroid Build Coastguard Worker     void setHost(const char *host);
50*35238bceSAndroid Build Coastguard Worker     void setPort(int port);
51*35238bceSAndroid Build Coastguard Worker     void setFamily(deSocketFamily family);
52*35238bceSAndroid Build Coastguard Worker     void setType(deSocketType type);
53*35238bceSAndroid Build Coastguard Worker     void setProtocol(deSocketProtocol protocol);
54*35238bceSAndroid Build Coastguard Worker 
getHost(void) const55*35238bceSAndroid Build Coastguard Worker     const char *getHost(void) const
56*35238bceSAndroid Build Coastguard Worker     {
57*35238bceSAndroid Build Coastguard Worker         return deSocketAddress_getHost(m_address);
58*35238bceSAndroid Build Coastguard Worker     }
getPort(void) const59*35238bceSAndroid Build Coastguard Worker     int getPort(void) const
60*35238bceSAndroid Build Coastguard Worker     {
61*35238bceSAndroid Build Coastguard Worker         return deSocketAddress_getPort(m_address);
62*35238bceSAndroid Build Coastguard Worker     }
getFamily(void) const63*35238bceSAndroid Build Coastguard Worker     deSocketFamily getFamily(void) const
64*35238bceSAndroid Build Coastguard Worker     {
65*35238bceSAndroid Build Coastguard Worker         return deSocketAddress_getFamily(m_address);
66*35238bceSAndroid Build Coastguard Worker     }
getType(void) const67*35238bceSAndroid Build Coastguard Worker     deSocketType getType(void) const
68*35238bceSAndroid Build Coastguard Worker     {
69*35238bceSAndroid Build Coastguard Worker         return deSocketAddress_getType(m_address);
70*35238bceSAndroid Build Coastguard Worker     }
getProtocol(void) const71*35238bceSAndroid Build Coastguard Worker     deSocketProtocol getProtocol(void) const
72*35238bceSAndroid Build Coastguard Worker     {
73*35238bceSAndroid Build Coastguard Worker         return deSocketAddress_getProtocol(m_address);
74*35238bceSAndroid Build Coastguard Worker     }
75*35238bceSAndroid Build Coastguard Worker 
operator deSocketAddress*()76*35238bceSAndroid Build Coastguard Worker     operator deSocketAddress *()
77*35238bceSAndroid Build Coastguard Worker     {
78*35238bceSAndroid Build Coastguard Worker         return m_address;
79*35238bceSAndroid Build Coastguard Worker     }
operator const deSocketAddress*() const80*35238bceSAndroid Build Coastguard Worker     operator const deSocketAddress *() const
81*35238bceSAndroid Build Coastguard Worker     {
82*35238bceSAndroid Build Coastguard Worker         return m_address;
83*35238bceSAndroid Build Coastguard Worker     }
84*35238bceSAndroid Build Coastguard Worker 
getPtr(void)85*35238bceSAndroid Build Coastguard Worker     deSocketAddress *getPtr(void)
86*35238bceSAndroid Build Coastguard Worker     {
87*35238bceSAndroid Build Coastguard Worker         return m_address;
88*35238bceSAndroid Build Coastguard Worker     }
89*35238bceSAndroid Build Coastguard Worker 
90*35238bceSAndroid Build Coastguard Worker private:
91*35238bceSAndroid Build Coastguard Worker     SocketAddress(const SocketAddress &other);
92*35238bceSAndroid Build Coastguard Worker     SocketAddress &operator=(const SocketAddress &other);
93*35238bceSAndroid Build Coastguard Worker 
94*35238bceSAndroid Build Coastguard Worker     deSocketAddress *m_address;
95*35238bceSAndroid Build Coastguard Worker };
96*35238bceSAndroid Build Coastguard Worker 
97*35238bceSAndroid Build Coastguard Worker class Socket
98*35238bceSAndroid Build Coastguard Worker {
99*35238bceSAndroid Build Coastguard Worker public:
100*35238bceSAndroid Build Coastguard Worker     Socket(void);
101*35238bceSAndroid Build Coastguard Worker     ~Socket(void);
102*35238bceSAndroid Build Coastguard Worker 
103*35238bceSAndroid Build Coastguard Worker     void setFlags(uint32_t flags);
104*35238bceSAndroid Build Coastguard Worker 
getState(void) const105*35238bceSAndroid Build Coastguard Worker     deSocketState getState(void) const
106*35238bceSAndroid Build Coastguard Worker     {
107*35238bceSAndroid Build Coastguard Worker         return deSocket_getState(m_socket);
108*35238bceSAndroid Build Coastguard Worker     }
isConnected(void) const109*35238bceSAndroid Build Coastguard Worker     bool isConnected(void) const
110*35238bceSAndroid Build Coastguard Worker     {
111*35238bceSAndroid Build Coastguard Worker         return getState() == DE_SOCKETSTATE_CONNECTED;
112*35238bceSAndroid Build Coastguard Worker     }
113*35238bceSAndroid Build Coastguard Worker 
114*35238bceSAndroid Build Coastguard Worker     void listen(const SocketAddress &address);
accept(SocketAddress & clientAddress)115*35238bceSAndroid Build Coastguard Worker     Socket *accept(SocketAddress &clientAddress)
116*35238bceSAndroid Build Coastguard Worker     {
117*35238bceSAndroid Build Coastguard Worker         return accept(clientAddress.getPtr());
118*35238bceSAndroid Build Coastguard Worker     }
accept(void)119*35238bceSAndroid Build Coastguard Worker     Socket *accept(void)
120*35238bceSAndroid Build Coastguard Worker     {
121*35238bceSAndroid Build Coastguard Worker         return accept(DE_NULL);
122*35238bceSAndroid Build Coastguard Worker     }
123*35238bceSAndroid Build Coastguard Worker 
124*35238bceSAndroid Build Coastguard Worker     void connect(const SocketAddress &address);
125*35238bceSAndroid Build Coastguard Worker 
126*35238bceSAndroid Build Coastguard Worker     void shutdown(void);
127*35238bceSAndroid Build Coastguard Worker     void shutdownSend(void);
128*35238bceSAndroid Build Coastguard Worker     void shutdownReceive(void);
129*35238bceSAndroid Build Coastguard Worker 
isSendOpen(void)130*35238bceSAndroid Build Coastguard Worker     bool isSendOpen(void)
131*35238bceSAndroid Build Coastguard Worker     {
132*35238bceSAndroid Build Coastguard Worker         return (deSocket_getOpenChannels(m_socket) & DE_SOCKETCHANNEL_SEND) != 0;
133*35238bceSAndroid Build Coastguard Worker     }
isReceiveOpen(void)134*35238bceSAndroid Build Coastguard Worker     bool isReceiveOpen(void)
135*35238bceSAndroid Build Coastguard Worker     {
136*35238bceSAndroid Build Coastguard Worker         return (deSocket_getOpenChannels(m_socket) & DE_SOCKETCHANNEL_RECEIVE) != 0;
137*35238bceSAndroid Build Coastguard Worker     }
138*35238bceSAndroid Build Coastguard Worker 
139*35238bceSAndroid Build Coastguard Worker     void close(void);
140*35238bceSAndroid Build Coastguard Worker 
send(const void * buf,size_t bufSize,size_t * numSent)141*35238bceSAndroid Build Coastguard Worker     deSocketResult send(const void *buf, size_t bufSize, size_t *numSent)
142*35238bceSAndroid Build Coastguard Worker     {
143*35238bceSAndroid Build Coastguard Worker         return deSocket_send(m_socket, buf, bufSize, numSent);
144*35238bceSAndroid Build Coastguard Worker     }
receive(void * buf,size_t bufSize,size_t * numRecv)145*35238bceSAndroid Build Coastguard Worker     deSocketResult receive(void *buf, size_t bufSize, size_t *numRecv)
146*35238bceSAndroid Build Coastguard Worker     {
147*35238bceSAndroid Build Coastguard Worker         return deSocket_receive(m_socket, buf, bufSize, numRecv);
148*35238bceSAndroid Build Coastguard Worker     }
149*35238bceSAndroid Build Coastguard Worker 
150*35238bceSAndroid Build Coastguard Worker private:
Socket(deSocket * socket)151*35238bceSAndroid Build Coastguard Worker     Socket(deSocket *socket) : m_socket(socket)
152*35238bceSAndroid Build Coastguard Worker     {
153*35238bceSAndroid Build Coastguard Worker     }
154*35238bceSAndroid Build Coastguard Worker     Socket(const Socket &other);
155*35238bceSAndroid Build Coastguard Worker     Socket &operator=(const Socket &other);
156*35238bceSAndroid Build Coastguard Worker 
157*35238bceSAndroid Build Coastguard Worker     Socket *accept(deSocketAddress *clientAddress);
158*35238bceSAndroid Build Coastguard Worker 
159*35238bceSAndroid Build Coastguard Worker     deSocket *m_socket;
160*35238bceSAndroid Build Coastguard Worker };
161*35238bceSAndroid Build Coastguard Worker 
162*35238bceSAndroid Build Coastguard Worker } // namespace de
163*35238bceSAndroid Build Coastguard Worker 
164*35238bceSAndroid Build Coastguard Worker #endif // _DESOCKET_HPP
165