1 #ifndef _DESOCKET_HPP 2 #define _DESOCKET_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements C++ Base 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 deSocket C++ wrapper. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "deDefs.hpp" 27 #include "deSocket.h" 28 29 #include <string> 30 #include <stdexcept> 31 32 namespace de 33 { 34 35 class SocketError : public std::runtime_error 36 { 37 public: SocketError(const std::string & message)38 SocketError (const std::string& message) : std::runtime_error(message) {} 39 }; 40 41 class SocketAddress 42 { 43 public: 44 SocketAddress (void); 45 ~SocketAddress (void); 46 47 void setHost (const char* host); 48 void setPort (int port); 49 void setFamily (deSocketFamily family); 50 void setType (deSocketType type); 51 void setProtocol (deSocketProtocol protocol); 52 getHost(void) const53 const char* getHost (void) const { return deSocketAddress_getHost(m_address); } getPort(void) const54 int getPort (void) const { return deSocketAddress_getPort(m_address); } getFamily(void) const55 deSocketFamily getFamily (void) const { return deSocketAddress_getFamily(m_address); } getType(void) const56 deSocketType getType (void) const { return deSocketAddress_getType(m_address); } getProtocol(void) const57 deSocketProtocol getProtocol (void) const { return deSocketAddress_getProtocol(m_address); } 58 operator deSocketAddress*()59 operator deSocketAddress* () { return m_address; } operator const deSocketAddress*() const60 operator const deSocketAddress* () const { return m_address; } 61 getPtr(void)62 deSocketAddress* getPtr (void) { return m_address; } 63 64 65 private: 66 SocketAddress (const SocketAddress& other); 67 SocketAddress& operator= (const SocketAddress& other); 68 69 deSocketAddress* m_address; 70 }; 71 72 class Socket 73 { 74 public: 75 Socket (void); 76 ~Socket (void); 77 78 void setFlags (deUint32 flags); 79 getState(void) const80 deSocketState getState (void) const { return deSocket_getState(m_socket); } isConnected(void) const81 bool isConnected (void) const { return getState() == DE_SOCKETSTATE_CONNECTED; } 82 83 void listen (const SocketAddress& address); accept(SocketAddress & clientAddress)84 Socket* accept (SocketAddress& clientAddress) { return accept(clientAddress.getPtr()); } accept(void)85 Socket* accept (void) { return accept(DE_NULL); } 86 87 void connect (const SocketAddress& address); 88 89 void shutdown (void); 90 void shutdownSend (void); 91 void shutdownReceive (void); 92 isSendOpen(void)93 bool isSendOpen (void) { return (deSocket_getOpenChannels(m_socket) & DE_SOCKETCHANNEL_SEND ) != 0; } isReceiveOpen(void)94 bool isReceiveOpen (void) { return (deSocket_getOpenChannels(m_socket) & DE_SOCKETCHANNEL_RECEIVE ) != 0; } 95 96 void close (void); 97 send(const void * buf,int bufSize,int * numSent)98 deSocketResult send (const void* buf, int bufSize, int* numSent) { return deSocket_send(m_socket, buf, bufSize, numSent); } receive(void * buf,int bufSize,int * numRecv)99 deSocketResult receive (void* buf, int bufSize, int* numRecv) { return deSocket_receive(m_socket, buf, bufSize, numRecv); } 100 101 private: Socket(deSocket * socket)102 Socket (deSocket* socket) : m_socket(socket) {} 103 Socket (const Socket& other); 104 Socket& operator= (const Socket& other); 105 106 Socket* accept (deSocketAddress* clientAddress); 107 108 deSocket* m_socket; 109 }; 110 111 } // de 112 113 #endif // _DESOCKET_HPP 114