diff options
Diffstat (limited to 'NetEx/NetHost.cpp')
-rw-r--r-- | NetEx/NetHost.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/NetEx/NetHost.cpp b/NetEx/NetHost.cpp new file mode 100644 index 0000000..03330f0 --- /dev/null +++ b/NetEx/NetHost.cpp @@ -0,0 +1,127 @@ +/* Starshatter OpenSource Distribution + Copyright (c) 1997-2004, Destroyer Studios LLC. + 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 "Destroyer Studios" nor the names of its 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 HOLDER 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. + + SUBSYSTEM: NetEx.lib + FILE: NetHost.cpp + AUTHOR: John DiCamillo + + + OVERVIEW + ======== + Network Host +*/ + + +#include "MemDebug.h" +#include "NetHost.h" +#include "NetLayer.h" +#include <ctype.h> + +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<Text> alias = nh.aliases; + while (++alias) + aliases.append(new Text(*alias.value())); + + ListIter<NetAddr> 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 |