00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <QtGlobal>
00029
00030 #include "routerdescriptor.h"
00031
00032
00033
00034
00035
00036 RouterDescriptor::RouterDescriptor(QStringList descriptor)
00037 {
00038 _status = Online;
00039 parseDescriptor(descriptor);
00040 }
00041
00042
00043 void
00044 RouterDescriptor::parseDescriptor(QStringList descriptor)
00045 {
00046 foreach (QString line, descriptor) {
00047 if (line.startsWith("router ")) {
00048 QStringList parts = line.remove(0,qstrlen("router ")).split(" ");
00049 _name = parts.at(0);
00050 _ip = QHostAddress(parts.at(1));
00051 _orPort = (quint16)parts.at(2).toUInt();
00052 _dirPort = (quint16)parts.at(4).toUInt();
00053 } else if (line.startsWith("platform ")) {
00054 _platform = line.remove(0,qstrlen("platform "));
00055 } else if (line.startsWith("published ")) {
00056 _published = QDateTime::fromString(
00057 line.remove(0,qstrlen("published ")),
00058 "yyyy-MM-dd HH:mm:ss");
00059 } else if (line.startsWith("opt fingerprint ")) {
00060 _fingerprint = line.remove(0,qstrlen("opt fingerprint "));
00061 _id = _fingerprint.remove(" ");
00062 } else if (line.startsWith("fingerprint ")) {
00063 _fingerprint = line.remove(0,qstrlen("fingerprint "));
00064 _id = _fingerprint.remove(" ");
00065 } else if (line.startsWith("uptime ")) {
00066 _uptime = (quint64)line.remove(0,qstrlen("uptime ")).toULongLong();
00067 } else if (line.startsWith("bandwidth ")) {
00068 QStringList bw = line.remove(0,qstrlen("bandwidth ")).split(" ");
00069 _avgBandwidth = (quint64)bw.at(0).toULongLong();
00070 _burstBandwidth = (quint64)bw.at(1).toULongLong();
00071 _observedBandwidth = (quint64)bw.at(2).toULongLong();
00072 } else if (line.startsWith("contact ")) {
00073 _contact = line.remove(0,qstrlen("contact "));
00074 } else if (line.startsWith("hibernating ")) {
00075 if (line.remove(0,qstrlen("hibernating ")).trimmed() == "1") {
00076 _status = Hibernating;
00077 }
00078 }
00079 }
00080 }
00081
00082
00083 QString
00084 RouterDescriptor::status()
00085 {
00086 if (_status == Online) {
00087 return tr("Online");
00088 } else if (_status == Hibernating) {
00089 return tr("Hibernating");
00090 }
00091 return tr("Offline");
00092 }
00093