Tor Project: Snowflake Proxy on Android

Hey everyone! I am Hashik Donthineni. I am a GSoC 2020 student, and I will be working on “Tor Project: Snowflake Proxy on Android.” with the help of my mentors @cohosh @phw.

This will be the running topic where I share my weekly updates (blog).

I am super excited to start working with Tor Project!

1 Like

Week 1 of Community Bonding Period

This week has been fantastic! We got on the video call with my amazing mentors @cohosh @phw. Although Phillip had some technical issues joining, he tried his best. But, it’s okay Cohosh got Phillip covered. Cohosh explained to me how things workaround in the organization.

My mentors and community made things easy for me,

  1. There is an issue with the timezone standup meetings held very late at night in my time, so the Tor community is planning to change their schedule to make timings comfortable to people in Asia.

  2. Tor Project uses GitWeb and Trac, which I am very unfamiliar with, I am used to GitHub and PR’s; But not these platforms, Cohosh came to my rescue, she helped me set up my accounts, permissions. To show me the workflow, she told me to create a ticket on track and how to make a patch. In about an hour of the session with Cohosh, I got familiar with these platforms.

  3. I attended my first weekly meeting; I was nervous. I just went there to lurk and see how things go on in the organization; Cohosh encouraged me to attend the meeting. The community is very welcoming. They told me to send a mail on the mailing list introducing myself to all the team. They are amazing!

I am excited about another great week with the Tor team ahead of me!!


Week 2 of Community Bonding Period

Snowflake uses WebRTC to connect to client using broker as the signaling server. This week has been all about the WebRTC library on Android. I learned how to compile my own WebRTC library for Android. All the libraries readily available are either deprecated/out of date and precompiled Gradle updated versions of the WebRTC are not suited for Android.

I learned to compile and followed the instructions from Google’s official WebRTC documentation. Tested this with local WebRTC connection to send and receive messages.

The lack of documentation for WebRTC Android in Java in a major slow down for me. Although the documentations are in JavaScript I am managing to understand and implement them into Java and Android.

1 Like

Week 3 of Community Bonding Period

This week I had a standup with @phw @cohosh to discuss the plan and the approach towards the project. And I split the tasks into tickets and divided the tasks and placed them into a weekly schedule. I will include all the plans and tickets into the Tor wiki page at Snowflake proxy on Android.

1 Like

Week 4 of Community Bonding Period
This past week is the last of the community bonding period. So far, this week has been the most productive of all; I completed a significant amount of my test project. I will refactor, add some code, and make PR’s for my mentors to monitor and do a code review to make it to the actual product. Now, I am ahead of my schedule; it’s going to cover for my absence during my exams at the end of July. Yay!

Week 5 of GSoC’20
Week-1 of Coding Period

There is a lot of progress this week on the project, I managed to get 8 tickets closed and added a lot of code and functionality in the main project.

  • Setting up libraries
  • Setting up usable UI and notification is one of them.
  • Started a service that works in the background to relay our data.

I got news form my university, they are giving me assignments and online submission rather than mid-term exams and I will be unavailable for 5 days from 15th June and another 10 days from 6th of July the work I did prior to the date of official coding puts me ahead of schedule and the project submissions won’t be effected thankfully.

Week 6 of GSoC’20
Week-2 of Coding Period

Application is shaping up now, finished the Part A of the project. Although the UI doesn’t look fancy, the goal is to finish with the functionality in the initial stages of the application.

My code is under review this week; this is a big code patch, so it might take a week-long to review. This branch might get merged into production by the end of next week.

Very excited to move to the next part of the project after the review is completed.

Week 7 of GSoC’20
Week-3 of Coding Period

The Part A of the project is almost merged in to master after the review from my mentor. There are 2 tickets before moving on to the second phase of the project. The Tor project is switching to Gitlab from Trac, only for ticket management tho. The repositories are still hosted at Trac gitweb still.

Week 8 of GSoC’20
Week-4 of Coding Period

This week, we marked the completion of part A of the project and started mapping for part B and Part A is completely code reviewed and merged into master by my mentor. Comming week I will spending mapping on how to implement Part B, it should be much simpler than the first part, regardless there need to be planning of how to implement.

Week 9 of GSoC’20
Week-5 of Coding Period

This week, my mentor is off on vacation, so my merge requests are not reviewed. This week marks the end of the whole month of GSoC coding. The progress is excellent in my opinion, I finished with the functionality of the application, and next month, I’ll be moving slowly into UI of the application.

Apart from my project, since the progress is already swift and excellent, I am slowing down the contribution to the main project and fixing issues and learning other projects like Emma, BridgeDB, bridge-port-scan. I involve in the reading group of research papers the best I could; this is very interesting and exciting! I am curious as to what the update will be by the end of this month.

Week 10 of GSoC’20
Week-6 of Coding Period

This week I spent time adding a license, readme for the project. The major MR that is on hold now is the settings UI, my mentor completed the review, and I can expect it to be merged by EOD today. I also added support for CI to the project; MR is under review.

The next major task that I have to work on is the UI, after which we can test the app and make it ready for release. The UI right now is bare-bones, we are working on the design. However, I think the settings UI is more or less finished, except for the top bar. Nothing too fancy everything is Android native design, this was not initially planned for GSoC, but I am way ahead of schedules so we can afford the time to implement it.

Also, this week I developed Docker container for the Snowflake proxy-go so that people can run it on stand-alone headless servers:

1 Like

Week 11 of GSoC’20

Week-7 of Coding Period

This week I worked on one MR that shows users how many users they have helped circumvent censorship; the MR is currently under review. Additionally, I worked on a couple of designs for the application, just the designs, not the code.


These designs aren’t finalized yet. We are still working on it on the ticket.

Week 12 of GSoC’20

Week-8 of Coding Period

Off to a slow start, this week worked some changes on Docker container, I realized that the Docker container that is supposed to be lightweight is about 800MB.

Our image without the base image (and go not installed) is 55MB. However, the base image of go:1.13 is about 803MB I tried using go:alpine-1.13 and cut our image size to 415MB (360 base-image + 55 our-image); it’s working fine.

In an attempt to further reduce it, I tried manually building by using Alpine Linux as the base-image and installing only go, and it’s precisely 415MB so I guess It’s safe to say that the least we could go :slight_smile: is 415MB by using go:alpine-1.13 presumably because the Go alpine image did the same, just minimal install.

So, what do you think Philipp? which one should we keep at last?

  • Using base image go:1.13 -> ~850MB
  • Using base image go:alpine-1.13 -> 415MB
  • Using base image alpine:latest and installing the dependencies -> 415MB

We we went with go:alpine* in the end.

*This is not part of GSoC proposed project but I like contributing to other projects in the org aswell, so I think this is relavant.

Week 13 of GSoC’20

Week-9 of Coding Period

It’s been a good week; I moved the application to MVP for better segregation and testing in the future. In the coming week will continue my work on the UI.

Additionally, I worked on Wolpertinger which is a bridge distribution tool by Tor. Submitted my mentor review for this month. Nothing much to say for the week.

Week 14 of GSoC’20

Week-10 of Coding Period

There is some good progress on the UI, I made a WIP MR, which is under review.I think there is some room for improvement in the design for which our UX designer is looking in to. After this week I am going to still work on the UI for the next week.

1 Like

Week 15 of GSoC’20

Week-11 of Coding Period

I got my UI ticket merged, there are some improvements team’s UX designer had suggested, made ticket on them, and made an MR for the same. Made a couple of other tickets to handle the string or logs that we show to the user; additionally, there is an ongoing discussion about what kind of things we should notify users for via a non-silent notification.


1 Like

Week 16 of GSoC’20

Week-12 of Coding Period

This week has been slow. All the UI MRs have been merged so far. Working on the Networks checks tickets, which has been delayed due to some bugs that came up, should positively push the ticket by the end of next week. It seems like GSoC is coming to an end, I have to write about the work I’ve done so far and shared it with GSoC admins next week. I should complete the “blog” that I have to submit to GSoC folks additional to the ticket next week, so it seems like it’s packed.

1 Like

Week 17 of GSoC’20

Week-13 of Coding Period

This year, Google Summer of Code with The Tor Project has been a fantastic journey and a significant milestone in my career out of the university.

Being a final year bachelor’s student, I had planned my masters. COVID-19 disrupted all my plans; among all the things, the worst is that I didn’t graduate, I had to defer my masters admit, as writing my semester exams aren’t held yet, so I have to delay my masters furthermore. Now, I am as clueless as I was four months ago.

Among all these hardships, one thing, probably the only thing I enjoyed is working with The Tor Project. The community is welcoming; all the developers are down to earth, humble, and easy to approach for any technical difficulty despite having pretty hefty resumes.

A huge thanks to my mentors, Dial, The Tor Project, and Google, for providing me this excellent opportunity. This endeavor enabled me to love opensource even more! To any fellow student reading, good luck! And stay safe, everyone.