Vidalia  0.3.1
RouterDescriptor.h
Go to the documentation of this file.
1 /*
2 ** This file is part of Vidalia, and is subject to the license terms in the
3 ** LICENSE file, found in the top level directory of this distribution. If
4 ** you did not receive the LICENSE file with this file, you may obtain it
5 ** from the Vidalia source package distributed by the Vidalia Project at
6 ** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
7 ** including this file, may be copied, modified, propagated, or distributed
8 ** except according to the terms described in the LICENSE file.
9 */
10 
11 /*
12 ** \file RouterDescriptor.h
13 ** \brief Parses a blob of router descriptor text from Tor
14 */
15 
16 #ifndef _ROUTERDESCRIPTOR_H
17 #define _ROUTERDESCRIPTOR_H
18 
19 #include <QCoreApplication>
20 #include <QStringList>
21 #include <QDateTime>
22 #include <QList>
23 #include <QHostAddress>
24 
25 
27 {
28  Q_DECLARE_TR_FUNCTIONS(RouterDescriptor)
29 
30 public:
31  /** Possible router states. */
32  enum RouterStatus {
33  Online, /**< Router is online and reachable. */
34  Hibernating, /**< Router is currently hibernating. */
35  Offline /**< Router is unresponsive. */
36  };
37 
38  /** Default constructor. */
40  /** Constructor. */
41  RouterDescriptor(QStringList descriptor);
42 
43  /** Returns the router's name. */
44  QString name() const { return _name; }
45  /** Returns the router's IP address. */
46  QHostAddress ip() const { return _ip; }
47  /** Returns the router's ORPort. */
48  quint16 orPort() const { return _orPort; }
49  /** Returns the router's DirPort. */
50  quint16 dirPort() const { return _dirPort; }
51  /** Returns the router's ID. */
52  QString id() const { return _id; }
53  /** Returns the platform on which this router is running. */
54  QString platform() const { return _platform; }
55  /** Returns the length of time this router has been up. */
56  quint64 uptime() const { return _uptime; }
57  /** Returns the router's contact information. */
58  QString contact() const { return _contact; }
59  /** Returns the date and time the router was published. */
60  QDateTime published() const { return _published; }
61  /** Returns the fingerprint for this router. */
62  QString fingerprint() const { return _fingerprint; }
63  /** Returns the average bandwidth for this router. */
64  quint64 averageBandwidth() const { return _avgBandwidth; }
65  /** Returns the burst bandwidth for this router. */
66  quint64 burstBandwidth() const { return _burstBandwidth; }
67  /** Returns the observed bandwidth for this router. */
68  quint64 observedBandwidth() const { return _observedBandwidth; }
69  /** Returns true if this router is online and responsive. */
70  bool online() const { return _status == Online; }
71  /** Returns true if this router is unresponsive. */
72  bool offline() const { return _status == Offline; }
73  /** Returns true if this router is hibernating. */
74  bool hibernating() const { return _status == Hibernating; }
75  /** Returns true if the router has neither a nickname or an ID. */
76  bool isEmpty() { return (_id.isEmpty() && _name.isEmpty()); }
77  /** Returns a string representation of the status of this router. */
78  QString status();
79 
80  /** Returns geographic location information for this router. Note that this
81  * information is NOT part of the Tor directory protocol, but can be
82  * determined out of band and set using setLocation(). */
83  QString location() const { return _location; }
84  /** Sets geographic location information for this router. */
85  void setLocation(QString location) { _location = location; }
86  /** Sets the descriptors status to Offline if <b>offline</b> is true. */
87  void setOffline(bool offline) { _status = (offline ? Offline : Online); }
88 
89 private:
90  /** Parses this router's descriptor for relevant information. */
91  void parseDescriptor(QStringList descriptor);
92 
93  RouterStatus _status; /**< Availability status of this router. */
94  QString _id; /**< Router's descriptor ID. */
95  QString _name; /**< The router's name. */
96  QString _fingerprint; /**< Router's fingerprint. */
97  QString _platform; /**< Platform on which router is running. */
98  QString _contact; /**< Router operator contact information. */
99  QHostAddress _ip; /**< Router's IP address. */
100  quint16 _orPort; /**< Router's ORPort. */
101  quint16 _dirPort; /**< Router's DirPort. */
102  QDateTime _published; /**< Date router descriptor was published. */
103  quint64 _uptime; /**< Time the router has been online. */
104  quint64 _avgBandwidth; /**< Average bandwidth. */
105  quint64 _burstBandwidth; /**< Burst bandwidth. */
106  quint64 _observedBandwidth; /**< Observed bandwidth. */
107  QString _location; /**< Geographic location information. */
108 };
109 
110 #endif
111 
RouterDescriptor::parseDescriptor
void parseDescriptor(QStringList descriptor)
Definition: RouterDescriptor.cpp:32
RouterDescriptor::fingerprint
QString fingerprint() const
Definition: RouterDescriptor.h:62
RouterDescriptor::hibernating
bool hibernating() const
Definition: RouterDescriptor.h:74
RouterDescriptor::isEmpty
bool isEmpty()
Definition: RouterDescriptor.h:76
RouterDescriptor::orPort
quint16 orPort() const
Definition: RouterDescriptor.h:48
RouterDescriptor::contact
QString contact() const
Definition: RouterDescriptor.h:58
RouterDescriptor::Offline
@ Offline
Definition: RouterDescriptor.h:35
RouterDescriptor::dirPort
quint16 dirPort() const
Definition: RouterDescriptor.h:50
RouterDescriptor::_fingerprint
QString _fingerprint
Definition: RouterDescriptor.h:96
RouterDescriptor::_location
QString _location
Definition: RouterDescriptor.h:107
RouterDescriptor::name
QString name() const
Definition: RouterDescriptor.h:44
RouterDescriptor::_id
QString _id
Definition: RouterDescriptor.h:94
RouterDescriptor::_name
QString _name
Definition: RouterDescriptor.h:95
RouterDescriptor::offline
bool offline() const
Definition: RouterDescriptor.h:72
RouterDescriptor::observedBandwidth
quint64 observedBandwidth() const
Definition: RouterDescriptor.h:68
RouterDescriptor::_orPort
quint16 _orPort
Definition: RouterDescriptor.h:100
RouterDescriptor::uptime
quint64 uptime() const
Definition: RouterDescriptor.h:56
RouterDescriptor::_avgBandwidth
quint64 _avgBandwidth
Definition: RouterDescriptor.h:104
RouterDescriptor::_ip
QHostAddress _ip
Definition: RouterDescriptor.h:99
RouterDescriptor::RouterDescriptor
RouterDescriptor()
Definition: RouterDescriptor.h:39
RouterDescriptor::id
QString id() const
Definition: RouterDescriptor.h:52
RouterDescriptor::_published
QDateTime _published
Definition: RouterDescriptor.h:102
RouterDescriptor::_platform
QString _platform
Definition: RouterDescriptor.h:97
RouterStatus
Definition: RouterStatus.h:25
RouterDescriptor::Online
@ Online
Definition: RouterDescriptor.h:33
RouterDescriptor::location
QString location() const
Definition: RouterDescriptor.h:83
RouterDescriptor::burstBandwidth
quint64 burstBandwidth() const
Definition: RouterDescriptor.h:66
RouterDescriptor::ip
QHostAddress ip() const
Definition: RouterDescriptor.h:46
RouterDescriptor::Hibernating
@ Hibernating
Definition: RouterDescriptor.h:34
RouterDescriptor::_status
RouterStatus _status
Definition: RouterDescriptor.h:93
RouterDescriptor
Definition: RouterDescriptor.h:26
RouterDescriptor::_observedBandwidth
quint64 _observedBandwidth
Definition: RouterDescriptor.h:106
RouterDescriptor::_dirPort
quint16 _dirPort
Definition: RouterDescriptor.h:101
RouterDescriptor::setLocation
void setLocation(QString location)
Definition: RouterDescriptor.h:85
RouterDescriptor::status
QString status()
Definition: RouterDescriptor.cpp:73
RouterDescriptor::online
bool online() const
Definition: RouterDescriptor.h:70
RouterDescriptor::setOffline
void setOffline(bool offline)
Definition: RouterDescriptor.h:87
RouterDescriptor::platform
QString platform() const
Definition: RouterDescriptor.h:54
RouterDescriptor::_uptime
quint64 _uptime
Definition: RouterDescriptor.h:103
RouterDescriptor::_burstBandwidth
quint64 _burstBandwidth
Definition: RouterDescriptor.h:105
RouterDescriptor::published
QDateTime published() const
Definition: RouterDescriptor.h:60
RouterDescriptor::_contact
QString _contact
Definition: RouterDescriptor.h:98
RouterDescriptor::averageBandwidth
quint64 averageBandwidth() const
Definition: RouterDescriptor.h:64