[tor-dev] Status report - Stream-RTT

ra r_a at lavabit.com
Sun Jul 28 23:16:10 UTC 2013

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.


[0] https://bitbucket.org/ra_/tor-
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.torproject.org/pipermail/tor-dev/attachments/20130729/323f49b4/attachment.sig>

More information about the tor-dev mailing list