Changeset 2977 for vidalia/trunk/src
- Timestamp:
- 08/16/08 21:28:25 (3 months ago)
- Location:
- vidalia/trunk/src
- Files:
-
- 17 modified
-
torcontrol/circuit.cpp (modified) (5 diffs)
-
torcontrol/circuit.h (modified) (4 diffs)
-
torcontrol/circuitevent.h (modified) (2 diffs)
-
torcontrol/stream.cpp (modified) (6 diffs)
-
torcontrol/stream.h (modified) (4 diffs)
-
torcontrol/streamevent.h (modified) (1 diff)
-
torcontrol/torcontrol.cpp (modified) (3 diffs)
-
torcontrol/torcontrol.h (modified) (1 diff)
-
vidalia/network/circuititem.cpp (modified) (1 diff)
-
vidalia/network/circuititem.h (modified) (1 diff)
-
vidalia/network/circuitlistwidget.cpp (modified) (2 diffs)
-
vidalia/network/circuitlistwidget.h (modified) (2 diffs)
-
vidalia/network/netviewer.cpp (modified) (5 diffs)
-
vidalia/network/netviewer.h (modified) (2 diffs)
-
vidalia/network/streamitem.h (modified) (1 diff)
-
vidalia/network/tormapwidget.cpp (modified) (11 diffs)
-
vidalia/network/tormapwidget.h (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
vidalia/trunk/src/torcontrol/circuit.cpp
r2511 r2977 18 18 #include <QRegExp> 19 19 20 #include "tcglobal.h" 20 21 #include "circuit.h" 21 22 … … 24 25 Circuit::Circuit() 25 26 { 26 _circId = 0;27 27 _status = Unknown; 28 28 _isValid = false; … … 39 39 Circuit::Circuit(const QString &circuit) 40 40 { 41 _isValid = false; 42 43 QStringList parts = circuit.split(" "); 41 QStringList parts = circuit.split(" ", QString::SkipEmptyParts); 44 42 if (parts.size() >= 2) { 45 43 /* Get the circuit ID */ 46 _circId = (quint64)parts.at(0).toULongLong(); 44 _circId = parts.at(0); 45 if (! isValidCircuitId(_circId)) 46 goto err; 47 47 48 /* Get the circuit status value */ 48 49 _status = Circuit::toStatus(parts.at(1)); … … 53 54 QStringList parts = hop.split(QRegExp("[=~]")); 54 55 if (parts.size() != 2) 55 return;56 goto err; 56 57 57 58 _ids << parts.at(0).mid(1); … … 62 63 _isValid = true; 63 64 } 65 return; 66 67 err: 68 tc::warn("Improperly formatted circuit: '%1'").arg(circuit); 69 _isValid = false; 70 } 71 72 /** Returns true iff <b>circId</b> consists of only between 1 and 16 73 * (inclusive) ASCII-encoded letters and numbers. */ 74 bool 75 Circuit::isValidCircuitId(const CircuitId &circId) 76 { 77 int length = circId.length(); 78 if (length < 1 || length > 16) 79 return false; 80 81 for (int i = 0; i < length; i++) { 82 char c = circId[i].toAscii(); 83 if (c < '0' && c > '9' && c < 'A' && c > 'Z' && c < 'a' && c > 'z') 84 return false; 85 } 86 return true; 64 87 } 65 88 -
vidalia/trunk/src/torcontrol/circuit.h
r2511 r2977 21 21 #include <QStringList> 22 22 23 /** Circuit IDs contains 1-16 alphanumeric ASCII characters. */ 24 typedef QString CircuitId; 25 23 26 24 27 class Circuit … … 40 43 Circuit(); 41 44 /** Constructor. */ 42 Circuit(const QString&circuit);45 Circuit(const CircuitId &circuit); 43 46 44 47 /** Returns true if this circuit is valid. */ … … 46 49 47 50 /** Returns the ID for this circuit */ 48 quint64id() const { return _circId; }51 CircuitId id() const { return _circId; } 49 52 /** Returns the status of this circuit */ 50 53 Status status() const { return _status; } … … 61 64 static Status toStatus(const QString &strStatus); 62 65 66 /** Returns true iff <b>circId</b> consists of only between 1 and 16 67 * (inclusive) ASCII-encoded letters and numbers. */ 68 static bool isValidCircuitId(const CircuitId &circId); 69 63 70 private: 64 quint64_circId; /**< Circuit ID. */71 CircuitId _circId; /**< Circuit ID. */ 65 72 Status _status; /**< Circuit status. */ 66 73 QStringList _names; /**< Nicknames of the routers in the circuit. */ -
vidalia/trunk/src/torcontrol/circuitevent.h
r2511 r2977 19 19 20 20 #include <QEvent> 21 #include <QString> 21 22 22 23 #include "eventtype.h" … … 35 36 Circuit circuit() const { return _circuit; } 36 37 /** Returns the ID for this circuit event. */ 37 quint64id() const { return _circuit.id(); }38 CircuitId id() const { return _circuit.id(); } 38 39 /** Returns the status of this circuit event. */ 39 40 Circuit::Status status() const { return _circuit.status(); } -
vidalia/trunk/src/torcontrol/stream.cpp
r2362 r2977 16 16 17 17 #include <QStringList> 18 18 19 #include "circuit.h" 19 20 #include "stream.h" 20 21 … … 23 24 Stream::Stream() 24 25 { 25 _streamId = 0;26 26 _status = Unknown; 27 _circuitId = 0;28 27 _port = 0; 29 28 } 30 29 31 30 /** Constructor */ 32 Stream::Stream(quint64 streamId, Status status, quint64 circuitId, 33 QString address, quint16 port) 31 Stream::Stream(const StreamId &streamId, Status status, 32 const CircuitId &circuitId, const QString &address, 33 quint16 port) 34 34 { 35 35 _streamId = streamId; … … 41 41 42 42 /** Constructor */ 43 Stream::Stream(quint64 streamId, Status status, quint64 circuitId, QString target) 43 Stream::Stream(const StreamId &streamId, Status status, 44 const CircuitId &circuitId, const QString &target) 44 45 { 45 46 _streamId = streamId; … … 61 62 */ 62 63 Stream 63 Stream::fromString( QStringstream)64 Stream::fromString(const QString &stream) 64 65 { 65 QStringList parts = stream.split(" " );66 QStringList parts = stream.split(" ", QString::SkipEmptyParts); 66 67 if (parts.size() >= 4) { 67 68 /* Get the stream ID */ 68 quint64 streamId = (quint64)parts.at(0).toULongLong();69 StreamId streamId = parts.at(0); 69 70 /* Get the stream status value */ 70 71 Stream::Status status = Stream::toStatus(parts.at(1)); 71 72 /* Get the ID of the circuit on which this stream travels */ 72 quint64 circId = (quint64)parts.at(2).toULongLong();73 CircuitId circId = parts.at(2); 73 74 /* Get the target address for this stream */ 74 75 QString target = parts.at(3); … … 79 80 } 80 81 82 /** Returns true iff <b>streamId</b> consists of only between 1 and 16 83 * (inclusive) ASCII-encoded letters and numbers. */ 84 bool 85 Stream::isValidStreamId(const StreamId &streamId) 86 { 87 int length = streamId.length(); 88 if (length < 1 || length > 16) 89 return false; 90 91 for (int i = 0; i < length; i++) { 92 char c = streamId[i].toAscii(); 93 if (c < '0' && c > '9' && c < 'A' && c > 'Z' && c < 'a' && c > 'z') 94 return false; 95 } 96 return true; 97 } 98 81 99 /** Converts a string description of a stream's status to its enum value */ 82 100 Stream::Status 83 Stream::toStatus( QStringstrStatus)101 Stream::toStatus(const QString &strStatus) 84 102 { 85 Status status; 86 strStatus = strStatus.toUpper(); 87 if (strStatus == "NEW") { 88 status = New; 89 } else if (strStatus == "NEWRESOLVE") { 90 status = NewResolve; 91 } else if (strStatus == "SENTCONNECT") { 92 status = SentConnect; 93 } else if (strStatus == "SENTRESOLVE") { 94 status = SentResolve; 95 } else if (strStatus == "SUCCEEDED") { 96 status = Succeeded; 97 } else if (strStatus == "FAILED") { 98 status = Failed; 99 } else if (strStatus == "CLOSED") { 100 status = Closed; 101 } else if (strStatus == "DETACHED") { 102 status = Detached; 103 } else if (strStatus == "REMAP") { 104 status = Remap; 105 } else { 106 status = Unknown; 107 } 108 return status; 103 if (!strStatus.compare("NEW", Qt::CaseInsensitive)) 104 return New; 105 if (!strStatus.compare("NEWRESOLVE", Qt::CaseInsensitive)) 106 return NewResolve; 107 if (!strStatus.compare("SENTCONNECT", Qt::CaseInsensitive)) 108 return SentConnect; 109 if (!strStatus.compare("SENTRESOLVE", Qt::CaseInsensitive)) 110 return SentResolve; 111 if (!strStatus.compare("SUCCEEDED", Qt::CaseInsensitive)) 112 return Succeeded; 113 if (!strStatus.compare("FAILED", Qt::CaseInsensitive)) 114 return Failed; 115 if (!strStatus.compare("CLOSED", Qt::CaseInsensitive)) 116 return Closed; 117 if (!strStatus.compare("DETACHED", Qt::CaseInsensitive)) 118 return Detached; 119 if (!strStatus.compare("REMAP", Qt::CaseInsensitive)) 120 return Remap; 121 return Unknown; 109 122 } 110 123 … … 130 143 } 131 144 132 /** Returns true if all fields in this Stream object are empty. */145 /** Returns true if all fields in this Stream object are valid. */ 133 146 bool 134 Stream::is Empty() const147 Stream::isValid() const 135 148 { 136 return (!_streamId && !_circuitId && 137 (_status == Unknown) && _address.isEmpty() && !_port); 149 return (isValidStreamId(_streamId) 150 && Circuit::isValidCircuitId(_circuitId) 151 && (_status != Unknown) 152 && !_address.isEmpty()); 138 153 } 139 154 -
vidalia/trunk/src/torcontrol/stream.h
r2510 r2977 23 23 #include <QList> 24 24 25 #include "circuit.h" 26 27 /** Stream IDs contains 1-16 alphanumeric ASCII characters. */ 28 typedef QString StreamId; 29 25 30 26 31 class Stream … … 46 51 Stream(); 47 52 /** Constructor */ 48 Stream(quint64 streamId, Status status, quint64 circuitId, QString target); 53 Stream(const StreamId &streamId, Status status, const CircuitId &circuitId, 54 const QString &target); 49 55 /** Constructor */ 50 Stream( quint64 streamId, Status status, quint64circuitId,51 QStringaddress, quint16 port);56 Stream(const StreamId &streamId, Status status, const CircuitId &circuitId, 57 const QString &address, quint16 port); 52 58 53 59 /** Parses the given string for a stream, in Tor control protocol format. */ 54 static Stream fromString( QStringstream);60 static Stream fromString(const QString &stream); 55 61 /** Converts a string description of a stream's status to its enum value */ 56 static Status toStatus( QStringstrStatus);62 static Status toStatus(const QString &strStatus); 57 63 58 /** Returns true if the Stream object's fields are all empty. */59 bool is Empty() const;64 /** Returns true iff the Stream object's fields are all valid. */ 65 bool isValid() const; 60 66 61 67 /** Returns the ID for this stream. */ 62 quint64id() const { return _streamId; }68 StreamId id() const { return _streamId; } 63 69 /** Returns the status for this stream. */ 64 70 Status status() const { return _status; } … … 66 72 QString statusString() const; 67 73 /** Returns the ID of the circuit to which this stream is assigned. */ 68 quint64circuitId() const { return _circuitId; }74 CircuitId circuitId() const { return _circuitId; } 69 75 /** Returns the target address and port for this stream. */ 70 76 QString target() const { return (_address + ":" + QString::number(_port)); } … … 74 80 quint16 targetPort() const { return _port; } 75 81 82 /** Returns true iff <b>streamId</b> consists of only between 1 and 16 83 * (inclusive) ASCII-encoded letters and numbers. */ 84 static bool isValidStreamId(const StreamId &streamId); 85 76 86 private: 77 quint64 _streamId; /**< Unique ID associated with this stream. */ 87 StreamId _streamId; /**< Unique ID associated with this stream. */ 88 CircuitId _circuitId; /**< ID of the circuit carrying this stream. */ 89 QString _address; /**< Stream target address. */ 78 90 Status _status; /**< Stream status value. */ 79 quint64 _circuitId; /**< ID of the circuit carrying this stream. */80 QString _address; /**< Stream target address. */81 91 quint16 _port; /**< Stream target port. */ 82 92 }; -
vidalia/trunk/src/torcontrol/streamevent.h
r2362 r2977 35 35 Stream stream() const { return _stream; } 36 36 /** Returns the ID for this stream event. */ 37 quint64id() const { return _stream.id(); }37 StreamId id() const { return _stream.id(); } 38 38 /** Returns the status for this stream event. */ 39 39 Stream::Status status() const { return _stream.status(); } 40 40 /** Returns the ID of the circuit to which this stream is assigned */ 41 quint64circuitId() const { return _stream.circuitId(); }41 CircuitId circuitId() const { return _stream.circuitId(); } 42 42 /** Returns the target for this stream event. */ 43 43 QString target() const { return _stream.target(); } -
vidalia/trunk/src/torcontrol/torcontrol.cpp
r2919 r2977 975 975 } 976 976 977 /** Closes the circuit specified by <b>circ id</b>. If <b>ifUnused</b> is977 /** Closes the circuit specified by <b>circId</b>. If <b>ifUnused</b> is 978 978 * true, then the circuit will not be closed unless it is unused. */ 979 979 bool 980 TorControl::closeCircuit( quint64 circid, bool ifUnused, QString *errmsg)981 { 982 ControlCommand cmd("CLOSECIRCUIT", QString::number(circid));980 TorControl::closeCircuit(const CircuitId &circId, bool ifUnused, QString *errmsg) 981 { 982 ControlCommand cmd("CLOSECIRCUIT", circId); 983 983 if (ifUnused) { 984 984 cmd.addArgument("IfUnused"); … … 1000 1000 QString msg = reply.getMessage(); 1001 1001 s = Stream::fromString(msg.mid(msg.indexOf("=")+1)); 1002 if ( !s.isEmpty()) {1002 if (s.isValid()) 1003 1003 streams << s; 1004 }1005 1004 1006 /* The rest of the streams j sut come as data, one per line */1005 /* The rest of the streams just come as data, one per line */ 1007 1006 foreach (QString line, reply.getData()) { 1008 1007 s = Stream::fromString(line); 1009 if ( !s.isEmpty()) {1008 if (s.isValid()) 1010 1009 streams << s; 1011 }1012 1010 } 1013 1011 } … … 1015 1013 } 1016 1014 1017 /** Closes the stream specified by <b>stream id</b>. */1018 bool 1019 TorControl::closeStream( quint64 streamid, QString *errmsg)1020 { 1021 ControlCommand cmd("CLOSESTREAM", QString::number(streamid));1015 /** Closes the stream specified by <b>streamId</b>. */ 1016 bool 1017 TorControl::closeStream(const StreamId &streamId, QString *errmsg) 1018 { 1019 ControlCommand cmd("CLOSESTREAM", streamId); 1022 1020 cmd.addArgument("1"); /* 1 == REASON_MISC (tor-spec.txt) */ 1023 1021 return send(cmd, errmsg); -
vidalia/trunk/src/torcontrol/torcontrol.h
r2780 r2977 197 197 198 198 public slots: 199 /** Closes the circuit specified by <b>circ id</b>. If <b>ifUnused</b> is199 /** Closes the circuit specified by <b>circId</b>. If <b>ifUnused</b> is 200 200 * true, then the circuit will not be closed unless it is unused. */ 201 bool closeCircuit(quint64 circid, bool ifUnused = false, QString *errmsg = 0); 202 /** Closes the stream specified by <b>streamid</b>. */ 203 bool closeStream(quint64 streamid, QString *errmsg = 0); 201 bool closeCircuit(const CircuitId &circId, bool ifUnused = false, 202 QString *errmsg = 0); 203 /** Closes the stream specified by <b>streamId</b>. */ 204 bool closeStream(const StreamId &streamId, QString *errmsg = 0); 204 205 205 206 signals: -
vidalia/trunk/src/vidalia/network/circuititem.cpp
r2511 r2977 65 65 /** Returns a list of all stream items on this circuit. */ 66 66 QList<StreamItem *> 67 CircuitItem::streams() 67 CircuitItem::streams() const 68 68 { 69 69 QList<StreamItem *> streams; -
vidalia/trunk/src/vidalia/network/circuititem.h
r2511 r2977 41 41 void update(const Circuit &circuit); 42 42 /** Returns the ID for this circuit. */ 43 quint64 id(){ return _circuit.id(); }43 CircuitId id() const { return _circuit.id(); } 44 44 /** Returns the Circuit object for this item. */ 45 Circuit circuit() { return _circuit; }45 Circuit circuit() const { return _circuit; } 46 46 /** Returns a list of all stream items on this circuit. */ 47 QList<StreamItem *> streams() ;47 QList<StreamItem *> streams() const; 48 48 49 49 private: -
vidalia/trunk/src/vidalia/network/circuitlistwidget.cpp
r2511 r2977 272 272 * circuit's item in the list. */ 273 273 CircuitItem* 274 CircuitListWidget::findCircuitItem( quint64circid)274 CircuitListWidget::findCircuitItem(const CircuitId &circid) 275 275 { 276 276 int numCircs = topLevelItemCount(); … … 287 287 * item in the list. */ 288 288 StreamItem* 289 CircuitListWidget::findStreamItem( quint64streamid)289 CircuitListWidget::findStreamItem(const StreamId &streamid) 290 290 { 291 291 int numCircs = topLevelItemCount(); -
vidalia/trunk/src/vidalia/network/circuitlistwidget.h
r2511 r2977 55 55 void circuitSelected(Circuit circuit); 56 56 /** Emitted when a circuit is removed from the list. */ 57 void circuitRemoved( quint64circid);57 void circuitRemoved(CircuitId circid); 58 58 /** Emitted when the user selects a circuit to be closed. */ 59 void closeCircuit( quint64circid);59 void closeCircuit(CircuitId circid); 60 60 /** Emitted when the user selects a stream to be closed. */ 61 void closeStream( quint64streamid);61 void closeStream(StreamId streamid); 62 62 /** Emitted when the user selects a circuit to zoom to. */ 63 void zoomToCircuit( quint64circid);63 void zoomToCircuit(CircuitId circid); 64 64 65 65 public slots: … … 87 87 void removeStream(StreamItem *stream); 88 88 /** Finds the circuit with the given ID. */ 89 CircuitItem* findCircuitItem( quint64circid);89 CircuitItem* findCircuitItem(const CircuitId &circid); 90 90 /** Finds the stream with the given ID. */ 91 StreamItem* findStreamItem( quint64streamid);91 StreamItem* findStreamItem(const StreamId &streamid); 92 92 /** Schedules the given circuit item to be removed after the given timeout. */ 93 93 void scheduleCircuitRemoval(CircuitItem *circuit, int delay); -
vidalia/trunk/src/vidalia/network/netviewer.cpp
r2575 r2977 96 96 connect(ui.treeCircuitList, SIGNAL(circuitSelected(Circuit)), 97 97 this, SLOT(circuitSelected(Circuit))); 98 connect(ui.treeCircuitList, SIGNAL(circuitRemoved( quint64)),99 _map, SLOT(removeCircuit( quint64)));100 connect(ui.treeCircuitList, SIGNAL(zoomToCircuit( quint64)),101 _map, SLOT(zoomToCircuit( quint64)));102 connect(ui.treeCircuitList, SIGNAL(closeCircuit( quint64)),103 _torControl, SLOT(closeCircuit( quint64)));104 connect(ui.treeCircuitList, SIGNAL(closeStream( quint64)),105 _torControl, SLOT(closeStream( quint64)));98 connect(ui.treeCircuitList, SIGNAL(circuitRemoved(CircuitId)), 99 _map, SLOT(removeCircuit(CircuitId))); 100 connect(ui.treeCircuitList, SIGNAL(zoomToCircuit(CircuitId)), 101 _map, SLOT(zoomToCircuit(CircuitId))); 102 connect(ui.treeCircuitList, SIGNAL(closeCircuit(CircuitId)), 103 _torControl, SLOT(closeCircuit(CircuitId))); 104 connect(ui.treeCircuitList, SIGNAL(closeStream(StreamId)), 105 _torControl, SLOT(closeStream(StreamId))); 106 106 107 107 /* Respond to changes in the status of the control connection */ … … 331 331 /** Adds an IP address to the resolve queue and updates the queue timers. */ 332 332 void 333 NetViewer::addToResolveQueue( QHostAddress ip, QStringid)333 NetViewer::addToResolveQueue(const QHostAddress &ip, const QString &id) 334 334 { 335 335 QString ipstr = ip.toString(); … … 359 359 * list. */ 360 360 void 361 NetViewer::circuitSelected( Circuitcircuit)361 NetViewer::circuitSelected(const Circuit &circuit) 362 362 { 363 363 /* Clear any selected items. */ … … 383 383 /** Called when the user selects a router from the router list. */ 384 384 void 385 NetViewer::routerSelected( RouterDescriptorrouter)385 NetViewer::routerSelected(const RouterDescriptor &router) 386 386 { 387 387 _map->deselectAll(); … … 415 415 /** Called when a list of GeoIp information has been resolved. */ 416 416 void 417 NetViewer::resolved(int id, QList<GeoIp>geoips)417 NetViewer::resolved(int id, const QList<GeoIp> &geoips) 418 418 { 419 419 Q_UNUSED(id); -
vidalia/trunk/src/vidalia/network/netviewer.h
r2511 r2977 62 62 void refresh(); 63 63 /** Called when the user selects a circuit on the circuit list */ 64 void circuitSelected( Circuitcircuit);64 void circuitSelected(const Circuit &circuit); 65 65 /** Called when an IP has been resolved to geographic information. */ 66 void resolved(int id, QList<GeoIp>geoips);66 void resolved(int id, const QList<GeoIp> &geoips); 67 67 /** Called when the user selects a router in the list. */ 68 void routerSelected( RouterDescriptorrouter);68 void routerSelected(const RouterDescriptor &router); 69 69 /** Handles when we get connected to Tor network */ 70 70 void onAuthenticated(); … … 76 76 private: 77 77 /** Adds an IP address to the resolve queue and updates the queue timers. */ 78 void addToResolveQueue( QHostAddress ip, QStringid);78 void addToResolveQueue(const QHostAddress &ip, const QString &id); 79 79 /** Retrieves a list of all running routers from Tor and their descriptors, 80 80 * and adds them to the RouterListWidget. */ -
vidalia/trunk/src/vidalia/network/streamitem.h
r2362 r2977 31 31 void update(const Stream &stream); 32 32 /** Returns the ID of the stream associated with this tree item. */ 33 quint64id() const { return _id; }33 StreamId id() const { return _id; } 34 34 35 35 private: 36 quint64_id; /**< ID for this stream. */36 StreamId _id; /**< ID for this stream. */ 37 37 }; 38 38 -
vidalia/trunk/src/vidalia/network/tormapwidget.cpp
r2362
