Stem PathSupport project idea
Damian Johnson

Damian Johnson commited on 2012-02-26 23:01:45
Zeige 1 geänderte Dateien mit 62 Einfügungen und 0 Löschungen.


Adding a project that I'd really like to mentor this GSoC: a stem port for
TorCtl's PathSupport module. Hopefully this idea will get a few interested
students...


... ...
@@ -524,6 +524,11 @@ meetings around the world.</li>
524 524
     testing, documentation, and API. This project is not yet feature complete.
525 525
     </p>
526 526
     
527
+    <p>
528
+    <b>Project Ideas:</b><br />
529
+    <i><a href="#stemPathsupport">Stem PathSupport Capabilities</a></i>
530
+    </p>
531
+    
527 532
     <a id="project-metrics"></a>
528 533
     <h3><a href="https://metrics.torproject.org/">Metrics</a> (code: <a
529 534
     href="https://gitweb.torproject.org/metrics-db.git">db</a>, <a
... ...
@@ -820,6 +825,63 @@ meetings around the world.</li>
820 825
     robustness.</p>
821 826
     </li>
822 827
     
828
+    <a id="stemPathsupport"></a>
829
+    <li>
830
+    <b>Stem PathSupport Capabilities</b>
831
+    <br>
832
+    Priority: <i>Medium</i>
833
+    <br>
834
+    Effort Level: <i>High</i>
835
+    <br>
836
+    Skill Level: <i>Medium</i>
837
+    <br>
838
+    Likely Mentors: <i>Damian (atagar)</i>
839
+    <p><a
840
+    href="https://trac.torproject.org/projects/tor/wiki/doc/stem">Stem</a> is a
841
+    python controller library for tor. Like it's predecessor, <a
842
+    href="#project-torctl">TorCtl</a>, it uses tor's <a
843
+    href="https://gitweb.torproject.org/torspec.git/blob/HEAD:/control-spec.txt">control
844
+    protocol</a> to help developers program against the tor process, enabling
845
+    them to build things similar to <a href="#project-vidalia">Vidalia</a> and
846
+    <a href="#project-arm">arm</a>.</p>
847
+    
848
+    <p>While TorCtl provided a fine first draft for this sort of functionality,
849
+    it has not proved to be extensible nor maintainable. Stem is a rewrite of
850
+    TorCtl with a heavy focus on testing, documentation, and providing a
851
+    developer friendly API.</p>
852
+    
853
+    <p>At the moment stem is still very much incomplete, missing several pieces
854
+    of functionality that TorCtl provides. This is a project to fix that by
855
+    porting TorCtl's <a
856
+    href="https://gitweb.torproject.org/pytorctl.git/blob/HEAD:/PathSupport.py">PathSupport
857
+    module</a> to stem, writing tests for it, and migrate a couple clients to
858
+    use it.</p>
859
+    
860
+    <p>PathSupport provides applications with programmatic control over how
861
+    tor's circuits are built, for instance letting you exit from particular
862
+    relays. This is used by projects like <a href="#project-torbel">TorBEL</a>,
863
+    <a href="#project-torflow">the Bandwidth Scanners, and SoaT</a>.</p>
864
+    
865
+    <p>This project can be broken into three parts...</p>
866
+    
867
+    <ol style="list-style-type: decimal">
868
+      <li><p>Look at PathSupport's clients to figure out how it is used and
869
+      come up with the API that we will use for stem. Note that the goal if
870
+      this project is <b>not</b> to simply copy PathSupport, but to make it
871
+      better. This task would ideally be done as part of writing the GSoC
872
+      application.</p></li>
873
+      <li><p>Implement the PathSupport counterpart for stem. This should be
874
+      done in an incremental fashion, writing the feature, tests, and going
875
+      through a code review before moving on. I'll be pretty anal about making
876
+      it as good as we can during these code reviews so plan for this to take a
877
+      while. ;)</p></li>
878
+      <li><p>The real test of the API that you've developed will come when we
879
+      use it in some real applications. Try to migrate a TorCtl client or two
880
+      to stem, filling in functionality that we're missing and improving our
881
+      API as we discover issues. A particularly good client to start with would
882
+      be TorBEL.</p></li>
883
+    </ol>
884
+    
823 885
     <a id="geoIPUpgrade"></a>
824 886
     <li>
825 887
     <b>Improve our GeoIP file format</b>
826 888