1 /******************************************************************************/
2 /* _______ _______ */
3 /* | | | | This file is part of the TTrack distribution */
4 /* --| |-- --| |-- */
5 /* | | | | Copyright (C) 1999 Michael Mleczko */
6 /* |_| |_| RACK */
7 /* */
8 /* Fido : 2:2444/1101.47 */
9 /* Internet : 667@atomicfront.de */
10 /* Snail : Hustadtring 63, 44801 Bochum */
11 /* */
12 /******************************************************************************/
13 #include <string>
14 #include <fstream>
15 #include <iostream>
16 extern "C"
17 {
18 #include "../smapi/msgapi.h"
19 }
20 #include "ftnaddr.h"
21
CFtnAddr()22 CFtnAddr::CFtnAddr()
23 {
24 // initialize with default values
25 zone = 65535;
26 anyzone = false;
27 net = 65535;
28 anynet = false;
29 node = 65535;
30 anynode = false;
31 point = 65535;
32 anypoint = false;
33 domain = "";
34 anydomain = false;
35 }
36
CFtnAddr(const CFtnAddr & in)37 CFtnAddr::CFtnAddr(const CFtnAddr & in)
38 {
39 // initialize with values from in
40 zone = in.zone;
41 anyzone = in.anyzone;
42 net = in.net;
43 anynet = in.anynet;
44 node = in.node;
45 anynode = in.anynode;
46 point = in.point;
47 anypoint = in.anypoint;
48 domain = in.domain;
49 anydomain = in.anydomain;
50 }
51
CFtnAddr(const string & str)52 CFtnAddr::CFtnAddr(const string& str)
53 {
54 // get data from string
55 this->getFromStr(str);
56 }
57
~CFtnAddr()58 CFtnAddr::~CFtnAddr()
59 {
60 }
61
operator <<(ostream & os,CFtnAddr out)62 ostream& operator<<(ostream& os, CFtnAddr out)
63 {
64 os << out.Zone() << ":" << out.Net() << "/" << out.Node() << "." << out.Point() << "@" << out.Domain();
65 return os;
66 }
67
operator >>(string & str,CFtnAddr & in)68 string& operator>>(string& str, CFtnAddr& in)
69 {
70 in.getFromStr(str);
71 return str;
72 }
73
operator >>(istream & is,CFtnAddr & in)74 istream& operator>>(istream& is, CFtnAddr& in)
75 {
76 string str;
77 is >> str;
78 in.getFromStr(str);
79 return is;
80 }
81
operator =(const CFtnAddr & in)82 CFtnAddr &CFtnAddr::operator=(const CFtnAddr &in)
83 {
84 zone = in.zone;
85 anyzone = in.anyzone;
86 net = in.net;
87 anynet = in.anynet;
88 node = in.node;
89 anynode = in.anynode;
90 point = in.point;
91 anypoint = in.anypoint;
92 domain = in.domain;
93 anydomain = in.anydomain;
94
95 return (*this);
96 }
97
operator =(const string & str)98 CFtnAddr &CFtnAddr::operator=(const string &str)
99 {
100 getFromStr(str);
101 return (*this);
102 }
103
operator =(const NETADDR & addr)104 CFtnAddr &CFtnAddr::operator=(const NETADDR &addr)
105 {
106 zone = addr.zone;
107 anyzone = false;
108 net = addr.net;
109 anynet = false;
110 node = addr.node;
111 anynode = false;
112 point = addr.point;
113 anypoint = false;
114 domain = "";
115 anydomain = false;
116
117 return (*this);
118 }
119
operator =(const char * str)120 CFtnAddr &CFtnAddr::operator=(const char *str)
121 {
122 string str2;
123
124 str2 = str;
125 getFromStr(str2);
126
127 return (*this);
128 }
129
130
131
operator ==(const CFtnAddr & arg1,const CFtnAddr & arg2)132 bool operator==(const CFtnAddr& arg1, const CFtnAddr& arg2)
133 {
134 bool equal = true;
135
136 if ((arg1.zone != arg2.zone) && !arg1.anyzone && !arg2.anyzone)
137 equal=false;
138 if ((arg1.net != arg2.net) && !arg1.anynet && !arg2.anynet)
139 equal=false;
140 if ((arg1.node != arg2.node) && !arg1.anynode && !arg2.anynode)
141 equal=false;
142 if ((arg1.point != arg2.point) && !arg1.anypoint && !arg2.anypoint)
143 equal=false;
144 if ((arg1.domain != arg2.domain) && !arg1.anydomain && !arg2.anydomain)
145 equal=false;
146
147 return equal;
148 }
149
operator ==(const CFtnAddr & arg1,const char * arg2)150 bool operator==(const CFtnAddr &arg1, const char * arg2)
151 {
152 bool equal=false;
153 CFtnAddr addr;
154
155 addr = arg2;
156 if (arg1 == addr) equal=true;
157 return equal;
158 }
159
isPoint() const160 bool CFtnAddr::isPoint() const
161 {
162 if (point == 0) return false;
163 else return true;
164 }
165
getFromStr(const string & str)166 void CFtnAddr::getFromStr(const string& str)
167 {
168 string Z, Ne, No, P, Dom;
169 bool ZDone=false;
170 bool NeDone=false;
171 bool NoDone=false;
172 bool PDone=false;
173 bool DomDone=false;
174
175 for (unsigned int i=0;i<str.length();i++)
176 {
177 if (str[i]==':') { ZDone=true; i++; }
178 if (str[i]=='/') { NeDone=true; i++; }
179 if (str[i]=='.' && PDone==false) { NoDone=true; i++; }
180 if (str[i]=='@') { PDone=true; i++; }
181
182 if (!ZDone)
183 Z+=str[i];
184 else
185 if (!NeDone)
186 Ne+=str[i];
187 else
188 if (!NoDone)
189 No+=str[i];
190 else
191 if (!PDone)
192 P+=str[i];
193 else
194 if (!DomDone)
195 Dom+=str[i];
196
197 }
198 zone=atoi(Z.c_str());
199 net=atoi(Ne.c_str());
200 node=atoi(No.c_str());
201 point=atoi(P.c_str());
202 domain=Dom;
203
204 anyzone = (Z == "*") || (Z == "");
205 anynet = (Ne == "*") || (Ne == "");
206 anynode = (No == "*") || (No == "");
207 anypoint = (P == "*") || (P == "");
208 anydomain = (Dom == "*") || (Dom == "");
209
210 }
211
Zone() const212 int CFtnAddr::Zone() const
213 {
214 return zone;
215 };
216
Net() const217 int CFtnAddr::Net() const
218 {
219 return net;
220 }
221
Node() const222 int CFtnAddr::Node() const
223 {
224 return node;
225 }
226
Point() const227 int CFtnAddr::Point() const
228 {
229 return point;
230 }
231
Domain() const232 string CFtnAddr::Domain() const
233 {
234 return domain;
235 };
236
237