1 // License: BSD/LGPL
2 // Copyright (C) 2011-2018 Thomas d'Otreppe
3 using System;
4 using System.Collections.Generic;
5 
6 namespace WirelessPanda
7 {
8     public class AccessPoint : WirelessDevice, IEquatable<AccessPoint>
9     {
10         #region Properties
11         /// <summary>
12         /// Max Rate
13         /// </summary>
14         public double MaxRate
15         {
16             get
17             {
18                 return (double)this.getDictValue("Max Rate");
19             }
20             set
21             {
22                 this.setDictValue("Max Rate", value);
23             }
24         }
25 
26         /// <summary>
27         /// Max Seen Rate
28         /// </summary>
29         public double MaxSeenRate
30         {
31             get
32             {
33                 return (double)this.getDictValue("Max Seen Rate");
34             }
35             set
36             {
37                 this.setDictValue("Max Seen Rate", value);
38             }
39         }
40 
41         /// <summary>
42         /// Privacy
43         /// </summary>
44         public string Privacy
45         {
46             get
47             {
48                 return (string)this.getDictValue("Privacy");
49             }
50             set
51             {
52                 this.setDictValue("Privacy", value);
53             }
54         }
55 
56         /// <summary>
57         /// Cipher
58         /// </summary>
59         public string Cipher
60         {
61             get
62             {
63                 return (string)this.getDictValue("Cipher");
64             }
65             set
66             {
67                 this.setDictValue("Cipher", value);
68             }
69         }
70 
71         /// <summary>
72         /// Authentication
73         /// </summary>
74         public string Authentication
75         {
76             get
77             {
78                 return (string)this.getDictValue("Authentication");
79             }
80             set
81             {
82                 this.setDictValue("Authentication", value);
83             }
84         }
85 
86         /// <summary>
87         /// # Data Frames
88         /// </summary>
89         public ulong DataFrames
90         {
91             get
92             {
93                 return (ulong)this.getDictValue("Data");
94             }
95             set
96             {
97                 this.setDictValue("Data", value);
98             }
99         }
100 
101         /// <summary>
102         /// Beacons
103         /// </summary>
104         public long Beacons
105         {
106             get
107             {
108                 return (long)this.getDictValue("Beacons");
109             }
110             set
111             {
112                 this.setDictValue("Beacons", value);
113             }
114         }
115 
116         /// <summary>
117         /// IP Address
118         /// </summary>
119         public string IP
120         {
121             get
122             {
123                 return (string)this.getDictValue("IP");
124             }
125             set
126             {
127                 this.setDictValue("IP", value);
128             }
129         }
130 
131         /// <summary>
132         /// IP Type
133         /// </summary>
134         public int IPType
135         {
136             get
137             {
138                 return (int)this.getDictValue("IP Type");
139             }
140             set
141             {
142                 this.setDictValue("IP Type", value);
143             }
144         }
145 
146         /// <summary>
147         /// ESSID
148         /// </summary>
149         public string ESSID
150         {
151             get
152             {
153                 return (string)this.getDictValue("ESSID");
154             }
155             set
156             {
157                 this.setDictValue("ESSID", value);
158             }
159         }
160 
161         /// <summary>
162         /// ESSID Length
163         /// </summary>
164         public byte ESSIDLength
165         {
166             get
167             {
168                 return (byte)this.getDictValue("ESSID Length");
169             }
170             set
171             {
172                 this.setDictValue("ESSID Length", value);
173             }
174         }
175 
176         /// <summary>
177         /// Key
178         /// </summary>
179         public string Key
180         {
181             get
182             {
183                 return (string)this.getDictValue("Key");
184             }
185             set
186             {
187                 this.setDictValue("Key", value);
188             }
189         }
190 
191         /// <summary>
192         /// Network Type
193         /// </summary>
194         public string NetworkType
195         {
196             get
197             {
198                 return (string)this.getDictValue("Network Type");
199             }
200             set
201             {
202                 this.setDictValue("Network Type", value);
203             }
204         }
205 
206         /// <summary>
207         /// Info
208         /// </summary>
209         public string Info
210         {
211             get
212             {
213                 return (string)this.getDictValue("Info");
214             }
215             set
216             {
217                 this.setDictValue("Info", value);
218             }
219         }
220 
221         /// <summary>
222         /// Encoding
223         /// </summary>
224         public string Encoding
225         {
226             get
227             {
228                 return (string)this.getDictValue("Encoding");
229             }
230             set
231             {
232                 this.setDictValue("Encoding", value);
233             }
234         }
235 
236         /// <summary>
237         /// Cloaked ?
238         /// </summary>
239         public bool Cloaked
240         {
241             get
242             {
243                 return (bool)this.getDictValue("Cloaked");
244             }
245             set
246             {
247                 this.setDictValue("Cloaked", value);
248             }
249         }
250 
251         /// <summary>
252         /// Encryption
253         /// </summary>
254         public string Encryption
255         {
256             get
257             {
258                 return (string)this.getDictValue("Encryption");
259             }
260             set
261             {
262                 this.setDictValue("Encryption", value);
263             }
264         }
265 
266         /// <summary>
267         /// Is the traffic decrypted?
268         /// </summary>
269         public bool Decrypted
270         {
271             get
272             {
273                 return (bool)this.getDictValue("Decrypted");
274             }
275             set
276             {
277                 this.setDictValue("Decrypted", value);
278             }
279         }
280 
281         /// <summary>
282         /// # Beacon Frames
283         /// </summary>
284         public ulong Beacon
285         {
286             get
287             {
288                 return (ulong)this.getDictValue("Beacon");
289             }
290             set
291             {
292                 this.setDictValue("Beacon", value);
293             }
294         }
295 
296         /// <summary>
297         /// # LLC Frames
298         /// </summary>
299         public ulong LLC
300         {
301             get
302             {
303                 return (ulong)this.getDictValue("LLC");
304             }
305             set
306             {
307                 this.setDictValue("LLC", value);
308             }
309         }
310 
311         /// <summary>
312         /// # Crypt Frames
313         /// </summary>
314         public ulong Crypt
315         {
316             get
317             {
318                 return (ulong)this.getDictValue("Crypt");
319             }
320             set
321             {
322                 this.setDictValue("Crypt", value);
323             }
324         }
325 
326         /// <summary>
327         /// # Weak Frames
328         /// </summary>
329         public ulong Weak
330         {
331             get
332             {
333                 return (ulong)this.getDictValue("Weak");
334             }
335             set
336             {
337                 this.setDictValue("Weak", value);
338             }
339         }
340 
341         /// <summary>
342         /// Total Nb of Frames
343         /// </summary>
344         public ulong Total
345         {
346             get
347             {
348                 return (ulong)this.getDictValue("Total");
349             }
350             set
351             {
352                 this.setDictValue("Total", value);
353             }
354         }
355 
356         /// <summary>
357         /// Carrier
358         /// </summary>
359         public string Carrier
360         {
361             get
362             {
363                 return (string)this.getDictValue("Carrier");
364             }
365             set
366             {
367                 this.setDictValue("Carrier", value);
368             }
369         }
370 
371         /// <summary>
372         /// Best Quality
373         /// </summary>
374         public int BestQuality
375         {
376             get
377             {
378                 return (int)this.getDictValue("BestQuality");
379             }
380             set
381             {
382                 this.setDictValue("BestQuality", value);
383             }
384         }
385 
386         /// <summary>
387         /// Best Signal
388         /// </summary>
389         public int BestSignal
390         {
391             get
392             {
393                 return (int)this.getDictValue("Best Signal");
394             }
395             set
396             {
397                 this.setDictValue("Best Signal", value);
398             }
399         }
400 
401         /// <summary>
402         /// Best Noise
403         /// </summary>
404         public int BestNoise
405         {
406             get
407             {
408                 return (int)this.getDictValue("Best Noise");
409             }
410             set
411             {
412                 this.setDictValue("Best Noise", value);
413             }
414         }
415 
416         /// <summary>
417         /// Min Location
418         /// </summary>
419         public Coordinates MinLocation
420         {
421             get
422             {
423                 return (Coordinates)this.getDictValue("Min Location");
424             }
425             set
426             {
427                 this.setDictValue("Min Location", value);
428             }
429         }
430 
431         /// <summary>
432         /// Best Location
433         /// </summary>
434         public Coordinates BestLocation
435         {
436             get
437             {
438                 return (Coordinates)this.getDictValue("Best Location");
439             }
440             set
441             {
442                 this.setDictValue("Best Location", value);
443             }
444         }
445 
446         /// <summary>
447         /// Max Location
448         /// </summary>
449         public Coordinates MaxLocation
450         {
451             get
452             {
453                 return (Coordinates)this.getDictValue("Max Location");
454             }
455             set
456             {
457                 this.setDictValue("Max Location", value);
458             }
459         }
460 
461         /// <summary>
462         /// Data Size
463         /// </summary>
464         public ulong DataSize
465         {
466             get
467             {
468                 return (ulong)this.getDictValue("Data Size");
469             }
470             set
471             {
472                 this.setDictValue("Data Size", value);
473             }
474         }
475         #endregion
476 
477         /// <summary>
478         /// Internal list of client
479         /// </summary>
480         private List<Station> _clientList = new List<Station>();
481 
482         /// <summary>
483         /// Add a client to our list
484         /// </summary>
485         /// <param name="sta"></param>
addClient(Station sta)486         public void addClient(Station sta)
487         {
488             this._clientList.Add(sta);
489             sta.AP = this;
490         }
491 
492         /// <summary>
493         /// Returns the client list
494         /// </summary>
495         public List<Station> ClientList
496         {
497             get
498             {
499                 return this._clientList;
500             }
501         }
502 
503         /// <summary>
504         /// Implements IEquatable
505         /// </summary>
506         /// <param name="other">Other AccessPoint to compare to</param>
507         /// <returns>true if equals, false if not</returns>
Equals(AccessPoint other)508         public bool Equals(AccessPoint other)
509         {
510             try
511             {
512                 if (this.BSSID == other.BSSID)
513                 {
514                     return true;
515                 }
516             }
517             catch { }
518 
519             return false;
520         }
521     }
522 }
523