/*------------------------------------------------------------------------- * drawElements C++ Base Library * ----------------------------- * * Copyright 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *//*! * \file * \brief deSocket C++ wrapper. *//*--------------------------------------------------------------------*/ #include "deSocket.hpp" #include <new> #include <exception> namespace de { // SocketAddress SocketAddress::SocketAddress (void) { m_address = deSocketAddress_create(); if (!m_address) throw std::bad_alloc(); } SocketAddress::~SocketAddress (void) { deSocketAddress_destroy(m_address); } void SocketAddress::setHost (const char* host) { if (!deSocketAddress_setHost(m_address, host)) throw std::runtime_error("SocketAddress::setHost()"); } void SocketAddress::setPort (int port) { if (!deSocketAddress_setPort(m_address, port)) throw std::runtime_error("SocketAddress::setPort()"); } void SocketAddress::setFamily (deSocketFamily family) { if (!deSocketAddress_setFamily(m_address, family)) throw std::runtime_error("SocketAddress::setFamily()"); } void SocketAddress::setType (deSocketType type) { if (!deSocketAddress_setType(m_address, type)) throw std::runtime_error("SocketAddress::setType()"); } void SocketAddress::setProtocol (deSocketProtocol protocol) { if (!deSocketAddress_setProtocol(m_address, protocol)) throw std::runtime_error("SocketAddress::setProtocol()"); } // Socket Socket::Socket (void) { m_socket = deSocket_create(); if (!m_socket) throw std::bad_alloc(); } Socket::~Socket (void) { deSocket_destroy(m_socket); } void Socket::setFlags (deUint32 flags) { if (!deSocket_setFlags(m_socket, flags)) throw SocketError("Setting socket flags failed"); } void Socket::listen (const SocketAddress& address) { if (!deSocket_listen(m_socket, address)) throw SocketError("Listening on socket failed"); } void Socket::connect (const SocketAddress& address) { if (!deSocket_connect(m_socket, address)) throw SocketError("Connecting socket failed"); } void Socket::shutdown (void) { if (!deSocket_shutdown(m_socket, DE_SOCKETCHANNEL_BOTH)) throw SocketError("Socket shutdown failed"); } void Socket::shutdownSend (void) { if (!deSocket_shutdown(m_socket, DE_SOCKETCHANNEL_SEND)) throw SocketError("Socket send channel shutdown failed"); } void Socket::shutdownReceive (void) { if (!deSocket_shutdown(m_socket, DE_SOCKETCHANNEL_RECEIVE)) throw SocketError("Socket receive channel shutdown failed"); } void Socket::close (void) { if (!deSocket_close(m_socket)) throw SocketError("Closing socket failed"); } Socket* Socket::accept (deSocketAddress* clientAddress) { deSocket* clientSocket = deSocket_accept(m_socket, clientAddress); if (!clientSocket) throw SocketError("Accepting connection to socket failed"); try { return new Socket(clientSocket); } catch (...) { deSocket_destroy(clientSocket); throw; } } } // de