Vidalia  0.3.1
RouterDescriptor.cpp
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.cpp
13 ** \brief Parses a blob of router descriptor text from Tor
14 */
15 
16 #include "RouterDescriptor.h"
17 
18 #include <QtGlobal>
19 
20 
21 /** Constructor. Just assigns the ID and determines whether the router is
22  * responsive or not based on the presence of a "!" at the start of the ID.
23  * See tor-spec.txt for details. */
24 RouterDescriptor::RouterDescriptor(QStringList descriptor)
25 {
26  _status = Online;
27  parseDescriptor(descriptor);
28 }
29 
30 /** Parses this router's descriptor for relevant information. */
31 void
32 RouterDescriptor::parseDescriptor(QStringList descriptor)
33 {
34  foreach (QString line, descriptor) {
35  if (line.startsWith("router ")) {
36  QStringList parts = line.remove(0,qstrlen("router ")).split(" ");
37  _name = parts.at(0);
38  _ip = QHostAddress(parts.at(1));
39  _orPort = (quint16)parts.at(2).toUInt();
40  _dirPort = (quint16)parts.at(4).toUInt();
41  } else if (line.startsWith("platform ")) {
42  _platform = line.remove(0,qstrlen("platform "));
43  } else if (line.startsWith("published ")) {
44  _published = QDateTime::fromString(
45  line.remove(0,qstrlen("published ")),
46  "yyyy-MM-dd HH:mm:ss");
47  _published.setTimeSpec(Qt::UTC);
48  } else if (line.startsWith("opt fingerprint ")) {
49  _fingerprint = line.remove(0,qstrlen("opt fingerprint "));
50  _id = _fingerprint.remove(" ");
51  } else if (line.startsWith("fingerprint ")) {
52  _fingerprint = line.remove(0,qstrlen("fingerprint "));
53  _id = _fingerprint.remove(" ");
54  } else if (line.startsWith("uptime ")) {
55  _uptime = (quint64)line.remove(0,qstrlen("uptime ")).toULongLong();
56  } else if (line.startsWith("bandwidth ")) {
57  QStringList bw = line.remove(0,qstrlen("bandwidth ")).split(" ");
58  _avgBandwidth = (quint64)bw.at(0).toULongLong();
59  _burstBandwidth = (quint64)bw.at(1).toULongLong();
60  _observedBandwidth = (quint64)bw.at(2).toULongLong();
61  } else if (line.startsWith("contact ")) {
62  _contact = line.remove(0,qstrlen("contact "));
63  } else if (line.startsWith("hibernating ")) {
64  if (line.remove(0,qstrlen("hibernating ")).trimmed() == "1") {
66  }
67  }
68  }
69 }
70 
71 /** Returns a string representation of the status of this router. */
72 QString
74 {
75  if (_status == Online) {
76  return tr("Online");
77  } else if (_status == Hibernating) {
78  return tr("Hibernating");
79  }
80  return tr("Offline");
81 }
82 
RouterDescriptor::parseDescriptor
void parseDescriptor(QStringList descriptor)
Definition: RouterDescriptor.cpp:32
RouterDescriptor::_fingerprint
QString _fingerprint
Definition: RouterDescriptor.h:96
RouterDescriptor::_id
QString _id
Definition: RouterDescriptor.h:94
RouterDescriptor::_name
QString _name
Definition: RouterDescriptor.h:95
RouterDescriptor::_orPort
quint16 _orPort
Definition: RouterDescriptor.h:100
RouterDescriptor::_avgBandwidth
quint64 _avgBandwidth
Definition: RouterDescriptor.h:104
RouterDescriptor::_ip
QHostAddress _ip
Definition: RouterDescriptor.h:99
RouterDescriptor::RouterDescriptor
RouterDescriptor()
Definition: RouterDescriptor.h:39
RouterDescriptor::_published
QDateTime _published
Definition: RouterDescriptor.h:102
RouterDescriptor::_platform
QString _platform
Definition: RouterDescriptor.h:97
RouterDescriptor.h
RouterDescriptor::Online
@ Online
Definition: RouterDescriptor.h:33
RouterDescriptor::Hibernating
@ Hibernating
Definition: RouterDescriptor.h:34
RouterDescriptor::_status
RouterStatus _status
Definition: RouterDescriptor.h:93
RouterDescriptor::_observedBandwidth
quint64 _observedBandwidth
Definition: RouterDescriptor.h:106
RouterDescriptor::_dirPort
quint16 _dirPort
Definition: RouterDescriptor.h:101
RouterDescriptor::status
QString status()
Definition: RouterDescriptor.cpp:73
RouterDescriptor::_uptime
quint64 _uptime
Definition: RouterDescriptor.h:103
RouterDescriptor::_burstBandwidth
quint64 _burstBandwidth
Definition: RouterDescriptor.h:105
RouterDescriptor::_contact
QString _contact
Definition: RouterDescriptor.h:98