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

# User Rev Content
1 Douglas Thrift 11 // Host Update
2     //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7     #include "Host.hpp"
8    
9 Douglas Thrift 12 Host::Host(const string& host, const string& name, const string& address, const
10     string& platform)
11 Douglas Thrift 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 Douglas Thrift 12 setPlatform(platform);
29 Douglas Thrift 11 }
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 Douglas Thrift 15 memcpy(&address, *(ent->h_addr_list), ent->h_length);
56 Douglas Thrift 11 }
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 Douglas Thrift 15 memcpy(&this->address, &value, sizeof(in_addr_t));
70 Douglas Thrift 11 }
71    
72     if (lookup)
73     {
74 Douglas Thrift 15 struct hostent* ent = gethostbyaddr((char*)(&this->address),
75 Douglas Thrift 11 sizeof(in_addr), AF_INET);
76    
77 Douglas Thrift 12 if (ent != NULL) name = ent->h_name;
78 Douglas Thrift 11 }
79     }
80    
81 Douglas Thrift 13 bool Host::operator==(const Host& host) const
82 Douglas Thrift 11 {
83 Douglas Thrift 13 if (this->host == host.host)
84     {
85     if (name == host.name)
86     {
87 Douglas Thrift 15 if (string(inet_ntoa(address)) == inet_ntoa(host.address))
88 Douglas Thrift 13 {
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 Douglas Thrift 15 string file = string("hosts") + slash + host;
110 Douglas Thrift 11
111 Douglas Thrift 15 ifstream fin(file.c_str());
112    
113 Douglas Thrift 13 if (fin.is_open())
114     {
115     getline(fin, name);
116 Douglas Thrift 15
117     string address;
118 Douglas Thrift 19
119 Douglas Thrift 15 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 Douglas Thrift 13 getline(fin, platform);
133     fin.close();
134     }
135    
136     return *this;
137 Douglas Thrift 11 }
138    
139 Douglas Thrift 13 Host Host::operator++(int)
140 Douglas Thrift 11 {
141 Douglas Thrift 13 Host old = *this;
142    
143     ++*this;
144    
145     return old;
146     }
147    
148     Host Host::operator--()
149     {
150 Douglas Thrift 15 string file = string("hosts") + slash + host;
151 Douglas Thrift 19
152 Douglas Thrift 15 ofstream fout(file.c_str());
153 Douglas Thrift 11
154 Douglas Thrift 15 fout << name << '\n'
155     << inet_ntoa(address) << '\n'
156     << platform << '\n';
157 Douglas Thrift 11
158     fout.close();
159 Douglas Thrift 13
160     return *this;
161 Douglas Thrift 11 }
162    
163 Douglas Thrift 13 Host Host::operator--(int)
164     {
165     Host old = *this;
166    
167     --*this;
168    
169     return old;
170     }
171    
172 Douglas Thrift 11 #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