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