ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/HostUpdate/Host.cpp
Revision: 19
Committed: 2003-11-10T19:46:19-08:00 (21 years, 7 months ago) by Douglas Thrift
File size: 2474 byte(s)
Log Message:
Hello, nurse!

File Contents

# Content
1 // Host Update
2 //
3 // Douglas Thrift
4 //
5 // $Id$
6
7 #include "Host.hpp"
8
9 Host::Host(const string& host, const string& name, const string& address, const
10 string& platform)
11 {
12 #ifdef _WIN32
13 if (count == 0)
14 {
15 if (WSAStartup(MAKEWORD(2, 0), &data) != 0)
16 {
17 cerr << "Host(): WSAStartup()\n";
18 exit(1);
19 }
20 }
21
22 count++;
23 #endif
24
25 setHost(host);
26 if (name != "") setName(name, address == "");
27 if (address != "") setAddress(address, name == "");
28 setPlatform(platform);
29 }
30
31 Host::~Host()
32 {
33 #ifdef _WIN32
34 count--;
35
36 if (count == 0)
37 {
38 if (WSACleanup() != 0)
39 {
40 cerr << "~Host(): WSACleanup()\n";
41 exit(1);
42 }
43 }
44 #endif
45 }
46
47 void Host::setName(const string& name, bool lookup)
48 {
49 this->name = name;
50
51 if (lookup)
52 {
53 struct hostent* ent = gethostbyname(this->name.c_str());
54
55 memcpy(&address, *(ent->h_addr_list), ent->h_length);
56 }
57 }
58
59 void Host::setAddress(const string& address, bool lookup)
60 {
61 in_addr_t value = inet_addr(address.c_str());
62
63 if (value == INADDR_NONE)
64 {
65 cerr << "Host.setAddress(): INADDR_NONE\n";
66 }
67 else
68 {
69 memcpy(&this->address, &value, sizeof(in_addr_t));
70 }
71
72 if (lookup)
73 {
74 struct hostent* ent = gethostbyaddr((char*)(&this->address),
75 sizeof(in_addr), AF_INET);
76
77 if (ent != NULL) name = ent->h_name;
78 }
79 }
80
81 bool Host::operator==(const Host& host) const
82 {
83 if (this->host == host.host)
84 {
85 if (name == host.name)
86 {
87 if (string(inet_ntoa(address)) == inet_ntoa(host.address))
88 {
89 return platform == host.platform;
90 }
91 else
92 {
93 return false;
94 }
95 }
96 else
97 {
98 return false;
99 }
100 }
101 else
102 {
103 return false;
104 }
105 }
106
107 Host Host::operator++()
108 {
109 string file = string("hosts") + slash + host;
110
111 ifstream fin(file.c_str());
112
113 if (fin.is_open())
114 {
115 getline(fin, name);
116
117 string address;
118
119 getline(fin, address);
120
121 in_addr_t value = inet_addr(address.c_str());
122
123 if (value == INADDR_NONE)
124 {
125 cerr << "Host.operator++(): INADDR_NONE\n";
126 }
127 else
128 {
129 memcpy(&this->address, &value, sizeof(in_addr_t));
130 }
131
132 getline(fin, platform);
133 fin.close();
134 }
135
136 return *this;
137 }
138
139 Host Host::operator++(int)
140 {
141 Host old = *this;
142
143 ++*this;
144
145 return old;
146 }
147
148 Host Host::operator--()
149 {
150 string file = string("hosts") + slash + host;
151
152 ofstream fout(file.c_str());
153
154 fout << name << '\n'
155 << inet_ntoa(address) << '\n'
156 << platform << '\n';
157
158 fout.close();
159
160 return *this;
161 }
162
163 Host Host::operator--(int)
164 {
165 Host old = *this;
166
167 --*this;
168
169 return old;
170 }
171
172 #ifdef _WIN32
173
174 unsigned Host::count = 0;
175 WSADATA Host::data;
176
177 #endif

Properties

Name Value
svn:eol-style native
svn:keywords Id