From a857c6a88f095afdd63bc997174dfd89b4e56897 Mon Sep 17 00:00:00 2001 From: mpc <mpc> Date: Fri, 23 Jul 2004 00:10:59 +0000 Subject: [PATCH] *** empty log message *** --- .../enclave/libsockthread/src/socket_addr.cpp | 37 +++++++++++++++++-- .../enclave/libsockthread/src/socket_addr.hpp | 12 +++--- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/apps/enclave/libsockthread/src/socket_addr.cpp b/apps/enclave/libsockthread/src/socket_addr.cpp index 4e2d51ee51..53f5167d70 100644 --- a/apps/enclave/libsockthread/src/socket_addr.cpp +++ b/apps/enclave/libsockthread/src/socket_addr.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$ + * $Id: socket_addr.cpp,v 1.3 2004/07/22 03:54:01 mpc Exp $ */ #include "platform.hpp" @@ -35,12 +35,27 @@ #include "socket_addr.hpp" using namespace Libsockthread; +Socket_addr::Socket_addr(Socket_addr& rhs) +{ + delete[] ip; + if (rhs.domain == AF_INET) { + ip = new char[INET_ADDRSTRLEN]; + else + ip = new char[INET6_ADDRSTRLEN]; + domain = rhs.domain; + host = rhs.host; + strcpy(ip, rhs.ip); + port = rhs.port; + type = rhs.type; +} + Socket_addr& Socket_addr::operator=(const Socket_addr& rhs) { - if (this == &rhs) // check for self-assignment: a = a + if (this == &rhs) // check for self-assignment: a = a return *this; - if (rhs.domain == AF_INET) { + delete[] ip; + if (rhs.domain == AF_INET) ip = new char[INET_ADDRSTRLEN]; else ip = new char[INET6_ADDRSTRLEN]; @@ -53,6 +68,9 @@ Socket_addr& Socket_addr::operator=(const Socket_addr& rhs) return *this; } +/* + * Performs a DNS lookup + */ void Socket_addr::resolve() { hostent* hent = gethostbyname(host.c_str()); @@ -60,9 +78,22 @@ void Socket_addr::resolve() throw Socket_error(hstrerror(h_errno)); assert(hent->h_addrtype == AF_INET || hent->h_addrtype == AF_INET6); domain = hent->h_addrtype; + delete[] ip; if (domain == AF_INET) { ip = new char[INET_ADDRSTRLEN]; else ip = new char[INET6_ADDRSTRLEN]; strcpy(ip, hent->h_addr_list[0]); } + +bool Socket_addr::operator==(const Socket_addr& rhs) +{ + if (rhs.domain == domain + && rhs.host == host + && strcmp(rhs.ip, ip) == 0 + && rhs.port == port + && rhs.type == type) + return true; + else + return false; +} diff --git a/apps/enclave/libsockthread/src/socket_addr.hpp b/apps/enclave/libsockthread/src/socket_addr.hpp index 6a2b9e4140..0fa769a75a 100644 --- a/apps/enclave/libsockthread/src/socket_addr.hpp +++ b/apps/enclave/libsockthread/src/socket_addr.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$ + * $Id: socket_addr.hpp,v 1.3 2004/07/22 03:54:01 mpc Exp $ */ #ifndef LIBSOCKTHREAD_SOCKET_ADDR_HPP @@ -36,21 +36,23 @@ namespace Libsockthread { class Socket_addr { public: + Socket_addr(Socket_addr& rhs); Socket_addr(int domain, int type, string& host, uint16_t port) : domain(domain), host(host), type(type), port(port) { resolve(); } // throws Socket_error ~Socket_addr() { delete[] ip; } - int get_domain() const // Has nothing to do with DNS domain - { return domain; } + int get_domain() const // Has nothing to do with DNS domain - + { return domain; } // returns either AF_INET or AF_INET6 const char* get_ip() const // Warning! This can be NULL! { return ip; } uint16_t get_port() const { return port; } int get_type() const { return type; - Socket_addr& Socket_addr::operator=(const Socket_addr& rhs); + Socket_addr& operator=(const Socket_addr& rhs); + bool operator==(const Socket_addr& rhs); void set_domain(int domain) { this->domain = domain; } void set_host(string& host) // throws Socket_error @@ -60,7 +62,7 @@ namespace Libsockthread { void set_type(int type) { this->type = type; } private: - void resolve(); + void resolve(); // throws Socket_error int domain; string host; -- GitLab