Commit graph

628 commits

Author SHA1 Message Date
David Fifield
dfb83c6606 Allow handling multiple SOCKS connections simultaneously.
Close the SOCKS connection in the same function that opens it.
2020-01-30 10:18:23 -07:00
David Fifield
20ac2029fd Have websocketconn.New return a pointer.
This makes the return type satisfy the io.ReadWriteCloser interface
directly.
2020-01-30 10:18:23 -07:00
David Fifield
e47dd5e2b4 Remove some redundancy in websocketconn naming.
Rename websocketconn.WebSocketConn to websocketconn.Conn, and
       websocketconn.NewWebSocketConn to websocketconn.New

Following the guidelines at
https://blog.golang.org/package-names#TOC_3%2e
2020-01-30 10:18:23 -07:00
David Fifield
5b01df9030 Initialize the global upgrader.CheckOrigin statically.
Only once, not again on every call to initServer.
2020-01-30 10:18:23 -07:00
David Fifield
a4287095c0 Also show message in the "error copying WebSocket to ORPort" case.
This was the only case out of the three not to show it.
2020-01-30 10:17:15 -07:00
Cecylia Bocovich
50673d4943 Remove client test with nil broker
We are no longer checking for nil BrokerChannels in Catch because this
case is caught from the return values of NewBrokerChannel. This change
caused a no longer necessary unit test to hang.
2020-01-29 11:40:29 -05:00
Cecylia Bocovich
7682986a45 Update client tests for NewBrokerChannel errors
We changed NewBrokerChannel to return an error value on failure. This
updates the tests to check that value.
2020-01-29 11:27:44 -05:00
David Fifield
57d4b0b5bd Use lowercase variable names in copyLoop. 2020-01-28 03:04:33 -07:00
David Fifield
bc5498cb4b Fix the order of arguments of client copyLoop to match the call.
The call was
	copyLoop(socks, snowflake)
but the function signature was
	func copyLoop(WebRTC, SOCKS io.ReadWriter) {

The mistake was mostly harmless, because both arguments were treated the
same, except that error logs would have reported the wrong direction.
2020-01-28 03:04:14 -07:00
David Fifield
db1ba4791b Simplify NewWebRTCDialer. 2020-01-27 20:53:27 -07:00
David Fifield
2fb52c8639 Check for an invalid broker URL at a higher level.
Instead of returning nil from NewBrokerChannel and having
WebRTCDialer.Catch check for nil, let NewBrokerChannel return an error
and bail out before calling WebRTCDialer.Catch.

Suggested by cohosh.
https://bugs.torproject.org/33040#comment:3
2020-01-27 20:50:26 -07:00
David Fifield
f1ab65b1c0 Close the melt channel, don't just send once on it.
Closing the channel makes it always immediately selectable.
2020-01-23 11:24:00 -07:00
David Fifield
febb4936f6 Refactor SOCKS-related logging. 2020-01-23 11:24:00 -07:00
David Fifield
aa3999857f Move ICE server logging out of parseIceServers. 2020-01-23 11:24:00 -07:00
David Fifield
509f634506 NewWebRTCDialer cannot return an error. 2020-01-23 11:24:00 -07:00
David Fifield
d6467ff585 Formatting improvements. 2020-01-23 10:43:31 -07:00
David Fifield
e27709080a Update a comment: we no longer keep track of handlers. 2020-01-23 10:42:35 -07:00
David Fifield
5ff75e1034 Remove erroneous logging around pt.*Error calls.
These functions are called for their side effect of sending a PT error
message on stdout; they also return a representation of the error
message as an error object for the caller to use if it wishes. These
functions *always* return a non-nil error object; it is not something to
be logged, any more than the return value of errors.New is.

The mistaken logging was added in
https://bugs.torproject.org/31794
b26c7a7a73
3ec9dd19fa
ed3d42e1ec
2020-01-20 23:57:31 -07:00
Jascha
37aaaffa15 proxy/make.js: add help output 2019-12-13 16:17:43 -07:00
Arlo Breault
1e45d48a3c Document setting the proxyType for metrics
Trac: 32499
2019-12-06 17:54:54 -05:00
Arlo Breault
af4cc52dc2 Add a build step / documentation for code reuse
Trac: 32499
2019-12-06 17:19:46 -05:00
Cecylia Bocovich
3bdcc3408e Increased test coverage for messages library 2019-12-06 11:30:34 -05:00
Cecylia Bocovich
0f99c5ab12 Touched up snowflake client tests
There were a few tests that needed refreshing since the introduction of
the pion library. Also added a few tests for the ICE server parsing
function in the client.
2019-12-06 11:30:34 -05:00
Cecylia Bocovich
dabdd847ce Expanded snowflake server tests
Now tests the proxy and initServer functionalities. The tests use the
same websocket library as the server and proxy-go implementations.
2019-12-06 11:28:41 -05:00
Cecylia Bocovich
06298eec73 Added another lock to protect broker stats
Added another lock to the metrics struct to synchronize accesses to the
broker stats. There's a possible race condition if stats are updated at
the same time they are being logged.
2019-12-05 10:17:20 -05:00
Cecylia Bocovich
42e16021c4 Add tests to check for data race in broker
We had some data races in the broker that occur when proxies and clients
modify the heap/snowflake map at the same time. This test has a client
and proxy access the broker simultaneously to check for data races.
2019-12-05 10:16:34 -05:00
Cecylia Bocovich
dccc15a6e9 Add synchronization to prevent race in broker
There's a race condition in the broker where both the proxy and the
client processes try to pop/remove the same snowflake from the heap.
This patch adds synchronization to prevent simultaneous accesses to
snowflakes.
2019-12-05 09:47:26 -05:00
Cecylia Bocovich
07f2cd8073 bump version to 0.2.0 2019-12-03 14:09:05 -05:00
Cecylia Bocovich
94de69aa36 Updated broker specification and comments 2019-11-28 13:52:58 -05:00
Cecylia Bocovich
97554e03e4 Updated proxyType variable name for readability 2019-11-28 13:52:58 -05:00
Cecylia Bocovich
981abffbd9 Add proxy type to stats exported by broker 2019-11-28 13:52:58 -05:00
Cecylia Bocovich
8ab81fc6cd Update proxy config to take proxy type
This allows badge and standalone proxies to tell the broker what proxy
type they are.
2019-11-28 13:52:58 -05:00
Cecylia Bocovich
7277bb37cd Update broker--proxy protocol with proxy type
Proxies now include information about what type they are when they poll
for client offers. The broker saves this information along with
snowflake ids and outputs it on the /debug page.
2019-11-28 13:52:58 -05:00
Arlo Breault
7092b2cb2c Revert abstracting copyloop 2019-11-21 19:33:39 -05:00
Arlo Breault
30b5ef8a9e Use gorilla websocket in proxy-go too
Trac: 32465
2019-11-20 19:33:28 -05:00
Cecylia Bocovich
7557e96a8d Remove unnecessary logging at broker 2019-11-13 15:01:03 -05:00
Cecylia Bocovich
742070a7fb Clean up proxy-go tests 2019-11-13 14:31:55 -05:00
Cecylia Bocovich
459286c143 Test proxy-go interactions with broker 2019-11-13 13:57:17 -05:00
Cecylia Bocovich
446f39a9e5 Use http.RoundTripper for connections to broker
This change makes it easier for us to write tests with mock transports
2019-11-13 13:57:14 -05:00
Cecylia Bocovich
574c57cc98 Created tests for proxy-go utility functions 2019-11-13 13:57:11 -05:00
Cecylia Bocovich
32bec89a84 Add tests for session descripion functions
Also removed some unnecessary code
2019-11-13 13:57:06 -05:00
Cecylia Bocovich
3ec2e8b89e Renamed existing test file 2019-11-13 13:57:02 -05:00
Cecylia Bocovich
2f37a73e71 bump version to 0.1.0 2019-11-13 13:36:30 -05:00
Cecylia Bocovich
a7040e2eee Update travis to use go v1.13.x 2019-11-13 11:39:33 -05:00
Cecylia Bocovich
b4b538a17f Implemented new broker messages for browser proxy 2019-11-13 10:54:48 -05:00
Cecylia Bocovich
c4ae64905b Redo protocol for proxy--broker messages
Switch to containing all communication between the proxy and the broker
in the HTTP response body. This will make things easier if we ever use
something other than HTTP communicate between different actors in the
snowflake system.

Other changes to the protocol are as follows:
- requests are accompanied by a version number so the broker can be
backwards compatable if desired in the future
- all responses are 200 OK unless the request was badly formatted
2019-11-13 10:54:48 -05:00
Arlo Breault
abefae1587 Restore sending close message before closing
And simplify EOF check.
2019-11-11 17:20:00 -05:00
Arlo Breault
c417fd5599 Stop using custom websocket library in server
Trac: 31028
2019-11-11 17:20:00 -05:00
Cecylia Bocovich
300a23c6a0 Changed variable name for multiplexed clients
The variable maxNumClients was unused, while connectionsPerClient was
used for spawning multiple proxyPairs. The former is a more appropriate
name for the multiplexing behaviour we use it for.

Multiplexing now just works thanks to implementing ticket #31310.
2019-10-31 12:08:43 -04:00
Cecylia Bocovich
64b66c855f Moved function comments to their definitions
Increase readability of code a bit, the function descriptions were
automatically placed in the constructor when we moved from coffeescript.
2019-10-31 11:59:13 -04:00