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