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 <QStringList>
00029
00030 #include "stream.h"
00031
00032
00033
00034 Stream::Stream()
00035 {
00036 _streamId = 0;
00037 _status = Unknown;
00038 _circuitId = 0;
00039 _port = 0;
00040 }
00041
00042
00043 Stream::Stream(quint64 streamId, Status status, quint64 circuitId,
00044 QString address, quint16 port)
00045 {
00046 _streamId = streamId;
00047 _status = status;
00048 _circuitId = circuitId;
00049 _address = address;
00050 _port = port;
00051 }
00052
00053
00054 Stream::Stream(quint64 streamId, Status status, quint64 circuitId, QString target)
00055 {
00056 _streamId = streamId;
00057 _status = status;
00058 _circuitId = circuitId;
00059 _port = 0;
00060
00061 int i = target.indexOf(":");
00062 if (i >= 0)
00063 _address = target.mid(0, i);
00064 if (i + 1 < target.length())
00065 _port = target.mid(i+1).toUInt();
00066 }
00067
00068
00069
00070
00071
00072
00073 Stream
00074 Stream::fromString(QString stream)
00075 {
00076 QStringList parts = stream.split(" ");
00077 if (parts.size() >= 4) {
00078
00079 quint64 streamId = (quint64)parts.at(0).toULongLong();
00080
00081 Stream::Status status = Stream::toStatus(parts.at(1));
00082
00083 quint64 circId = (quint64)parts.at(2).toULongLong();
00084
00085 QString target = parts.at(3);
00086
00087 return Stream(streamId, status, circId, target);
00088 }
00089 return Stream();
00090 }
00091
00092
00093 Stream::Status
00094 Stream::toStatus(QString strStatus)
00095 {
00096 Status status;
00097 strStatus = strStatus.toUpper();
00098 if (strStatus == "NEW") {
00099 status = New;
00100 } else if (strStatus == "NEWRESOLVE") {
00101 status = NewResolve;
00102 } else if (strStatus == "SENTCONNECT") {
00103 status = SentConnect;
00104 } else if (strStatus == "SENTRESOLVE") {
00105 status = SentResolve;
00106 } else if (strStatus == "SUCCEEDED") {
00107 status = Succeeded;
00108 } else if (strStatus == "FAILED") {
00109 status = Failed;
00110 } else if (strStatus == "CLOSED") {
00111 status = Closed;
00112 } else if (strStatus == "DETACHED") {
00113 status = Detached;
00114 } else {
00115 status = Unknown;
00116 }
00117 return status;
00118 }
00119
00120
00121
00122 QString
00123 Stream::statusString()
00124 {
00125 QString status;
00126 switch (_status) {
00127 case New: status = tr("New"); break;
00128 case NewResolve:
00129 case SentResolve: status = tr("Resolving"); break;
00130 case SentConnect: status = tr("Connecting"); break;
00131 case Succeeded: status = tr("Open"); break;
00132 case Failed: status = tr("Failed"); break;
00133 case Closed: status = tr("Closed"); break;
00134 case Detached: status = tr("Retrying"); break;
00135 default: status = tr("Unknown"); break;
00136 }
00137 return status;
00138 }
00139
00140
00141 bool
00142 Stream::isEmpty()
00143 {
00144 return (!_streamId && !_circuitId &&
00145 (_status == Unknown) && _address.isEmpty() && !_port);
00146 }
00147