From e33e19d0587146859d48a134ec9fd94e7b7ba5cd Mon Sep 17 00:00:00 2001 From: "FWoltermann@gmail.com" Date: Thu, 8 Dec 2011 14:53:40 +0000 Subject: Initial upload --- NetEx/NetHost.cpp | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 NetEx/NetHost.cpp (limited to 'NetEx/NetHost.cpp') diff --git a/NetEx/NetHost.cpp b/NetEx/NetHost.cpp new file mode 100644 index 0000000..d42ec2a --- /dev/null +++ b/NetEx/NetHost.cpp @@ -0,0 +1,103 @@ +/* Project nGenEx + Destroyer Studios LLC + Copyright © 1997-2004. All Rights Reserved. + + SUBSYSTEM: NetEx.lib + FILE: NetHost.cpp + AUTHOR: John DiCamillo + + + OVERVIEW + ======== + Network Host +*/ + + +#include "MemDebug.h" +#include "NetHost.h" +#include "NetLayer.h" +#include + +NetHost::NetHost() +{ + char host_name[256]; + gethostname(host_name, sizeof(host_name)); + + Init(host_name); +} + +NetHost::NetHost(const char* host_name) +{ + Init(host_name); +} + +void NetHost::Init(const char* host_name) +{ + if (host_name && *host_name) { + HOSTENT* h = 0; + + if (isdigit(*host_name)) { + DWORD addr = inet_addr(host_name); + h = gethostbyaddr((const char*) &addr, 4, AF_INET); + } + else { + h = gethostbyname(host_name); + } + + if (h) { + name = h->h_name; + + char** alias = h->h_aliases; + while (*alias) { + aliases.append(new Text(*alias)); + alias++; + } + + char** addr = h->h_addr_list; + while (*addr) { + NetAddr* pna = new(__FILE__,__LINE__) NetAddr(**(DWORD**) addr); + if (pna) + addresses.append(pna); + addr++; + } + } + } +} + +NetHost::NetHost(const NetHost& n) +{ + if (&n != this) { + NetHost& nh = (NetHost&) n; + + name = nh.name; + + ListIter alias = nh.aliases; + while (++alias) + aliases.append(new Text(*alias.value())); + + ListIter addr = nh.addresses; + while (++addr) + addresses.append(new NetAddr(*addr.value())); + } +} + +NetHost::~NetHost() +{ + aliases.destroy(); + addresses.destroy(); +} + +const char* +NetHost::Name() +{ + return name; +} + +NetAddr +NetHost::Address() +{ + if (addresses.size()) + return *(addresses[0]); + + return NetAddr((DWORD) 0); +} \ No newline at end of file -- cgit v1.1