diff --git a/apps/enclave/libsockthread/src/platform.hpp b/apps/enclave/libsockthread/src/platform.hpp index d9b83e66e..7e8f4b03c 100644 --- a/apps/enclave/libsockthread/src/platform.hpp +++ b/apps/enclave/libsockthread/src/platform.hpp @@ -27,7 +27,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: platform.hpp,v 1.4 2004/07/16 23:54:45 mpc Exp $ + * $Id: platform.hpp,v 1.5 2004/07/22 03:54:01 mpc Exp $ */ /* @@ -56,6 +56,7 @@ #endif #include #include +#include #include #include #include @@ -65,10 +66,12 @@ #ifndef WINTHREAD #include #endif +#include // TODO replace with Boost's version #include #if defined WINSOCK || defined WINTHREAD #include #endif using namespace std; +#include "types.hpp" #endif // LIBSOCKTHREAD_PLATFORM_HPP diff --git a/apps/enclave/libsockthread/src/socket.cpp b/apps/enclave/libsockthread/src/socket.cpp index 5eb552def..04a620f79 100644 --- a/apps/enclave/libsockthread/src/socket.cpp +++ b/apps/enclave/libsockthread/src/socket.cpp @@ -27,7 +27,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: socket.cpp,v 1.7 2004/07/22 03:54:01 mpc Exp $ + * $Id: socket.cpp,v 1.8 2004/07/22 22:08:20 mpc Exp $ */ #include "platform.hpp" @@ -35,10 +35,38 @@ #include "socket.hpp" using namespace Libsockthread; +/* + * Closes the socket + */ +void Socket::close() +{ + if (sock != SERR) { + if (close(sock) == -1) + ; // FIXME log the error + } + sock = SERR; +} + +/* + * Changes the address associated with the socket + */ +void Socket::set_addr(Socket_addr& addr) +{ + close(); + this->addr = addr; + setup_socket(); +} + +/* + * Prepares the socket for use + */ void Socket::setup_socket() { + assert(sock == SERR); // the descriptor shouldn't be active if (!addr.is_ready()) - throw Socket_error("Socket isn't ready"); + throw Socket_error("Couldn't create socket: address isn't ready"); - sock = socket(addr.get_family(), get_type(), 0); + sock = socket(addr.get_family(), addr.get_type(), 0); + if (sock == SERR) + throw Socket_error(strerror(errno)); } diff --git a/apps/enclave/libsockthread/src/socket.hpp b/apps/enclave/libsockthread/src/socket.hpp index d226d6c29..af4a578ab 100644 --- a/apps/enclave/libsockthread/src/socket.hpp +++ b/apps/enclave/libsockthread/src/socket.hpp @@ -27,7 +27,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: socket.hpp,v 1.7 2004/07/22 03:54:01 mpc Exp $ + * $Id: socket.hpp,v 1.8 2004/07/22 22:08:20 mpc Exp $ */ #ifndef LIBSOCKTHREAD_SOCKET_HPP @@ -36,19 +36,32 @@ namespace Libsockthread { class Socket { public: + #ifdef WINSOCK + typedef SOCKET socket_t; + enum { SERR = SOCKET_ERROR }; + #else + typedef int socket_t; + enum { SERR = -1 }; + #endif + + Socket() + : addr(), sock(SERR) {} Socket(Socket_addr& addr) // throws Socket_error - : addr(addr) { setup_socket(); } + : addr(addr), sock(SERR) { setup_socket(); } void close(); - size_t read(string& buf, size_t max); - void set_addr(Socket_addr& addr) // throws Socket_error - { this->addr = addr; setup_socket(); } + size_t read(vector& buf, size_t max = 0); + size_t read_until(vector& buf, uchar_t delim = '\n'); + void set_addr(Socket_addr& addr); // throws Socket_error void set_blocking(bool blocking); + size_t write(vector& buf); + void write_all(vector& buf); + size_t write_until(vector + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the author nor the names of any contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + */ + +#ifndef LIBSOCKTHREAD_TYPES_HPP +#define LIBSOCKTHREAD_TYPES_HPP + +/* + * Shorten some standard variable types + */ +typedef signed char schar_t; +typedef unsigned char uchar_t; +typedef unsigned int uint_t; +typedef unsigned long ulong_t; +typedef unsigned short ushort_t; + +#endif // LIBSOCKTHREAD_TYPES_HPP