mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 20:11:19 -04:00
Make a WS class to eliminate globals
This commit is contained in:
parent
f3254e3402
commit
bd5887a876
5 changed files with 90 additions and 85 deletions
|
@ -18,6 +18,7 @@ FILES_SPEC = [
|
|||
'spec/broker.spec.coffee'
|
||||
'spec/proxypair.spec.coffee'
|
||||
'spec/snowflake.spec.coffee'
|
||||
'spec/websocket.spec.coffee'
|
||||
]
|
||||
FILES_ALL = FILES.concat FILES_SPEC
|
||||
OUTFILE = 'build/snowflake.js'
|
||||
|
|
|
@ -103,7 +103,7 @@ class ProxyPair
|
|||
if peer_ip?
|
||||
params.push(["client_ip", peer_ip])
|
||||
|
||||
@relay = makeWebsocket @relayAddr, params
|
||||
@relay = WS.makeWebsocket @relayAddr, params
|
||||
@relay.label = 'websocket-relay'
|
||||
@relay.onopen = =>
|
||||
if @timer
|
||||
|
|
|
@ -2,41 +2,6 @@
|
|||
jasmine tests for Snowflake utils
|
||||
###
|
||||
|
||||
describe 'BuildUrl', ->
|
||||
it 'should parse just protocol and host', ->
|
||||
expect(buildUrl('http', 'example.com')).toBe 'http://example.com'
|
||||
it 'should handle different ports', ->
|
||||
expect buildUrl 'http', 'example.com', 80
|
||||
.toBe 'http://example.com'
|
||||
expect buildUrl 'http', 'example.com', 81
|
||||
.toBe 'http://example.com:81'
|
||||
expect buildUrl 'http', 'example.com', 443
|
||||
.toBe 'http://example.com:443'
|
||||
expect buildUrl 'http', 'example.com', 444
|
||||
.toBe 'http://example.com:444'
|
||||
it 'should handle paths', ->
|
||||
expect buildUrl 'http', 'example.com', 80, '/'
|
||||
.toBe 'http://example.com/'
|
||||
expect buildUrl 'http', 'example.com', 80,'/test?k=%#v'
|
||||
.toBe 'http://example.com/test%3Fk%3D%25%23v'
|
||||
expect buildUrl 'http', 'example.com', 80, '/test'
|
||||
.toBe 'http://example.com/test'
|
||||
it 'should handle params', ->
|
||||
expect buildUrl 'http', 'example.com', 80, '/test', [['k', '%#v']]
|
||||
.toBe 'http://example.com/test?k=%25%23v'
|
||||
expect buildUrl 'http', 'example.com', 80, '/test', [['a', 'b'], ['c', 'd']]
|
||||
.toBe 'http://example.com/test?a=b&c=d'
|
||||
it 'should handle ips', ->
|
||||
expect buildUrl 'http', '1.2.3.4'
|
||||
.toBe 'http://1.2.3.4'
|
||||
expect buildUrl 'http', '1:2::3:4'
|
||||
.toBe 'http://[1:2::3:4]'
|
||||
it 'should handle bogus', ->
|
||||
expect buildUrl 'http', 'bog][us'
|
||||
.toBe 'http://bog%5D%5Bus'
|
||||
expect buildUrl 'http', 'bog:u]s'
|
||||
.toBe 'http://bog%3Au%5Ds'
|
||||
|
||||
describe 'Parse', ->
|
||||
|
||||
describe 'cookie', ->
|
||||
|
|
38
proxy/spec/websocket.spec.coffee
Normal file
38
proxy/spec/websocket.spec.coffee
Normal file
|
@ -0,0 +1,38 @@
|
|||
###
|
||||
jasmine tests for Snowflake websocket
|
||||
###
|
||||
|
||||
describe 'BuildUrl', ->
|
||||
it 'should parse just protocol and host', ->
|
||||
expect(WS.buildUrl('http', 'example.com')).toBe 'http://example.com'
|
||||
it 'should handle different ports', ->
|
||||
expect WS.buildUrl 'http', 'example.com', 80
|
||||
.toBe 'http://example.com'
|
||||
expect WS.buildUrl 'http', 'example.com', 81
|
||||
.toBe 'http://example.com:81'
|
||||
expect WS.buildUrl 'http', 'example.com', 443
|
||||
.toBe 'http://example.com:443'
|
||||
expect WS.buildUrl 'http', 'example.com', 444
|
||||
.toBe 'http://example.com:444'
|
||||
it 'should handle paths', ->
|
||||
expect WS.buildUrl 'http', 'example.com', 80, '/'
|
||||
.toBe 'http://example.com/'
|
||||
expect WS.buildUrl 'http', 'example.com', 80,'/test?k=%#v'
|
||||
.toBe 'http://example.com/test%3Fk%3D%25%23v'
|
||||
expect WS.buildUrl 'http', 'example.com', 80, '/test'
|
||||
.toBe 'http://example.com/test'
|
||||
it 'should handle params', ->
|
||||
expect WS.buildUrl 'http', 'example.com', 80, '/test', [['k', '%#v']]
|
||||
.toBe 'http://example.com/test?k=%25%23v'
|
||||
expect WS.buildUrl 'http', 'example.com', 80, '/test', [['a', 'b'], ['c', 'd']]
|
||||
.toBe 'http://example.com/test?a=b&c=d'
|
||||
it 'should handle ips', ->
|
||||
expect WS.buildUrl 'http', '1.2.3.4'
|
||||
.toBe 'http://1.2.3.4'
|
||||
expect WS.buildUrl 'http', '1:2::3:4'
|
||||
.toBe 'http://[1:2::3:4]'
|
||||
it 'should handle bogus', ->
|
||||
expect WS.buildUrl 'http', 'bog][us'
|
||||
.toBe 'http://bog%5D%5Bus'
|
||||
expect WS.buildUrl 'http', 'bog:u]s'
|
||||
.toBe 'http://bog%3Au%5Ds'
|
|
@ -2,14 +2,15 @@
|
|||
Only websocket-specific stuff.
|
||||
###
|
||||
|
||||
WSS_ENABLED = true
|
||||
DEFAULT_PORTS =
|
||||
class WS
|
||||
@WSS_ENABLED: true
|
||||
@DEFAULT_PORTS:
|
||||
http: 80
|
||||
https: 443
|
||||
|
||||
# Build an escaped URL string from unescaped components. Only scheme and host
|
||||
# are required. See RFC 3986, section 3.
|
||||
buildUrl = (scheme, host, port, path, params) ->
|
||||
@buildUrl: (scheme, host, port, path, params) ->
|
||||
parts = []
|
||||
parts.push(encodeURIComponent scheme)
|
||||
parts.push '://'
|
||||
|
@ -22,7 +23,7 @@ buildUrl = (scheme, host, port, path, params) ->
|
|||
else
|
||||
parts.push(encodeURIComponent host)
|
||||
|
||||
if undefined != port && DEFAULT_PORTS[scheme] != port
|
||||
if undefined != port && @DEFAULT_PORTS[scheme] != port
|
||||
parts.push ':'
|
||||
parts.push(encodeURIComponent port.toString())
|
||||
|
||||
|
@ -46,9 +47,9 @@ buildUrl = (scheme, host, port, path, params) ->
|
|||
|
||||
parts.join ''
|
||||
|
||||
makeWebsocket = (addr, params) ->
|
||||
wsProtocol = if WSS_ENABLED then 'wss' else 'ws'
|
||||
url = buildUrl wsProtocol, addr.host, addr.port, '/', params
|
||||
@makeWebsocket: (addr, params) ->
|
||||
wsProtocol = if @WSS_ENABLED then 'wss' else 'ws'
|
||||
url = @buildUrl wsProtocol, addr.host, addr.port, '/', params
|
||||
ws = new WebSocket url
|
||||
###
|
||||
'User agents can use this as a hint for how to handle incoming binary data: if
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue