Standardize on ArrayBuffer as the type of WebRTC messages
Two problems:
- The proxy receives binary messages over an RTCDataChannel without specifying what the type of those messages should be. Some debugging code is written to handle the type ArrayBuffer, but when I tried it the type was actually Blob, which crashed the debug code.
- Snowflake uses exclusively binary WebRTC data, but the test code uses strings as message contents rather than one of the binary data types.
This wasn't a huge problem, because strings ArrayBuffer
s and Blob
s are all valid to pass to WebSocket.send
. The only other thing we do other than send
them is take their length for the purpose of rate limiting, and that is broken.
https://gitweb.torproject.org/user/dcf/snowflake.git/log/?h=arraybuffer&id=73f328fef8a9351afc47bb65a68b549fbab90cad https://gitweb.torproject.org/user/dcf/snowflake.git/diff/?h=arraybuffer&id=73f328fef8a9351afc47bb65a68b549fbab90cad&id2=5817c257c1568c403a41e108d195b209e4e5f589
This branch sets binaryType = "arraybuffer" so that we don't get unexpected Blob
objects. It then makes changes to the test and rate-limiting code to standardize on the ArrayBuffer interface everywhere.