On Saturday 27 July 2013 04:41:45 Damian Johnson wrote:
Hi ra, glad to see that you're using stem!
Sure, stem works really great!
If you have any questions, suggestions, feature requests,
These parts were a bit tricky to figure out for me: -) When I wanted to check if a certain node is an exit node it took me some time to figure out that looking for an exit flag is not sufficient because some nodes are in fact exit nodes but don't have an exit flag. One has to look at the nodes exit policy which is unaccessible by default because of microdescriptors. Maybe returning some meaningful message when one uses get_server_descriptor() and microdescriptors are enabled would help..? -) It is not safe to use extend_circuit in parallel for creating new circuits. I think this is not mentioned anywhere. -) Router status V2/V3 also took me some time but this has already been fixed.
or would like a code review then let me know.
That would be awesome!
As of just four weeks ago the Controller started providing v3 responses
I missed that obviously. Fixed in [0].
circ.build_flags.count('IS_INTERNAL') == 0
This would more commonly be done as... 'IS_INTERNAL' not in circ.build_flags
Fixed in [0].
try: controller.reset_conf("__DisablePredictedCircuits") controller.reset_conf("__LeaveStreamsUnattached") controller.close()
except NameError: pass
What raises a NameError?
This was a leftover where it has been possible that "controller" doesn't exist at that time. Fixed in [0].
# close circuit, but ignore if it does not exist anymore
try: self._controller.get_circuit(self._cid) self._controller.close_circuit(self._cid)
except (ValueError, InvalidArguments): pass
What is the purpose of the get_circuit() call? If it's not superfluous
It doesn't do any harm but is definitely superfluous. Fixed in [0].
try: controller = Controller.from_port()
except SocketError: sys.stderr.write("ERROR: Couldn't connect to Tor.\n") sys.exit(1)
controller.authenticate()
This is certainly a fine way of doing it, but you might want to also look at connection.connect_port()...
https://stem.torproject.org/api/connection.html#stem.connection.connect_por t
It is intended to be a quick and easy method of getting a Controller for command-line applications. For instance, it will present a password prompt if tor is configured to use password authentication. Just realized I should have included it in a tutorial somewhere...
I didn't know that. Since the script now depends on stem version > 1.0.1 anyway, I integrated it.
Thank you for your feedback so far!
Your code looks great! If you wouldn't mind I'd love to reference it on stem's examples page...
Sure, go ahead.
Shall I reference 'https://bitbucket.org/ra_/tor-rtt/' or do you anticipate your project having a more permanent home? (this might be a question for Mike as much as you)
I would not mind but I don't have any plans for that. Mike only asked me to make the code accessible online.
Best, Robert
[0] https://bitbucket.org/ra_/tor- rtt/commits/666e0b173871ba3f699c8bc07bfb156f653adf7a