ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/HostUpdate/Host.cpp
(Generate patch)

Comparing HostUpdate/Host.cpp (file contents):
Revision 11 by Douglas Thrift, 2003-11-06T20:37:52-08:00 vs.
Revision 19 by Douglas Thrift, 2003-11-10T19:46:19-08:00

# Line 6 | Line 6
6  
7   #include "Host.hpp"
8  
9 < Host::Host(const string& host, const string& name, const string& address)
9 > Host::Host(const string& host, const string& name, const string& address, const
10 >        string& platform)
11   {
12   #ifdef _WIN32
13          if (count == 0)
# Line 21 | Line 22 | Host::Host(const string& host, const str
22          count++;
23   #endif
24  
24        this->address = new struct in_addr;
25
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        delete address;
34
33   #ifdef _WIN32
34          count--;
35  
# Line 54 | Line 52 | void Host::setName(const string& name, b
52          {
53                  struct hostent* ent = gethostbyname(this->name.c_str());
54  
55 <                memcpy(address, *(ent->h_addr_list), ent->h_length);
55 >                memcpy(&address, *(ent->h_addr_list), ent->h_length);
56          }
57   }
58  
# Line 65 | Line 63 | void Host::setAddress(const string& addr
63          if (value == INADDR_NONE)
64          {
65                  cerr << "Host.setAddress(): INADDR_NONE\n";
68                exit(1);
66          }
67          else
68          {
69 <                memcpy(this->address, &value, sizeof(in_addr_t));
69 >                memcpy(&this->address, &value, sizeof(in_addr_t));
70          }
71  
72          if (lookup)
73          {
74 <                cerr << "Here!\n";
78 <                struct hostent* ent = gethostbyaddr((char*)(this->address),
74 >                struct hostent* ent = gethostbyaddr((char*)(&this->address),
75                          sizeof(in_addr), AF_INET);
76  
77 <                name = ent->h_name;
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 < void Host::operator++()
139 > Host Host::operator++(int)
140   {
141 <        ifstream fin(host.c_str());
141 >        Host old = *this;
142  
143 <        getline(fin, name);
143 >        ++*this;
144  
145 <        fin.read((char*)(address), sizeof(in_addr));
92 <        fin.close();
145 >        return old;
146   }
147  
148 < void Host::operator--()
148 > Host Host::operator--()
149   {
150 <        ofstream fout(host.c_str());
150 >        string file = string("hosts") + slash + host;
151 >
152 >        ofstream fout(file.c_str());
153  
154 <        fout << name << '\n';
154 >        fout << name << '\n'
155 >                << inet_ntoa(address) << '\n'
156 >                << platform << '\n';
157  
101        fout.write((char*)(address), sizeof(in_addr));
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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines