Advertisement
cheako

Start of a t2w websocket patch.

Aug 3rd, 2017
492
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 2.79 KB | None | 0 0
  1. diff --git a/tor2web/t2w.py b/tor2web/t2w.py
  2. index 72c59a0..cc38ef4 100644
  3. --- a/tor2web/t2w.py
  4. +++ b/tor2web/t2w.py
  5. @@ -432,6 +432,7 @@ class T2WRequest(http.Request):
  6.          self.transport = StringTransport() if queued else self.channel.transport
  7.  
  8.          self.obj = Tor2webObj()
  9. +        self.upgrade = 0
  10.          self.var = Storage()
  11.          self.var['version'] = __version__
  12.          self.var['basehost'] = config.basehost
  13. @@ -707,12 +708,21 @@ class T2WRequest(http.Request):
  14.          self.obj.headers.removeHeader(b'x-forwarded-for')
  15.  
  16.          self.obj.headers.setRawHeaders(b'host', [self.obj.onion])
  17. -        self.obj.headers.setRawHeaders(b'connection', [b'keep-alive'])
  18. -        self.obj.headers.setRawHeaders(b'accept-encoding', [b'gzip, chunked'])
  19.          self.obj.headers.setRawHeaders(b'x-tor2web', [b'1'])
  20.          self.obj.headers.setRawHeaders(b'x-forwarded-host', [req.host])
  21.          self.obj.headers.setRawHeaders(b'x-forwarded-proto', [b'http' if config.transport == 'HTTP' else b'https'])
  22.  
  23. +        connectionHeaders = request.headers.getRawHeaders(b'connection', [])
  24. +        connectionHeaders = ','.join(connectionHeaders).split(',')
  25. +        connectionHeaders = list(map(lambda x: x.strip(), connectionHeaders))
  26. +        if b'upgrade' in connectionHeaders:
  27. +            self.upgrade = 1
  28. +        # self.obj.headers.setRawHeaders(b'connection', list(set([b'close']).union(request.headers.getRawHeaders(b'connection'))))
  29. +        # self.obj.headers.setRawHeaders(b'connection', [b'upgrade'])
  30. +        else:
  31. +            self.obj.headers.setRawHeaders(b'connection', [b'keep-alive'])
  32. +            self.obj.headers.setRawHeaders(b'accept-encoding', [b'gzip, chunked'])
  33. +
  34.          return True
  35.  
  36.      @defer.inlineCallbacks
  37. @@ -1046,6 +1056,9 @@ class T2WRequest(http.Request):
  38.  
  39.          self.setHeaders()
  40.  
  41. +        if self.upgrade == 2:
  42. +        # TODO: Here we want to grab the socket and run.
  43. +
  44.          # if there's no response, we're done.
  45.          if not response.length:
  46.              self.setHeader(b'content-length', intToBytes(0))
  47. @@ -1105,6 +1118,14 @@ class T2WRequest(http.Request):
  48.      def processResponseHeaders(self, headers):
  49.          rpc("update_stats", str(self.obj.onion.replace(".onion", "")))
  50.  
  51. +        connectionHeaders = headers.getRawHeaders(b'connection', [])
  52. +        connectionHeaders = ','.join(connectionHeaders).split(',')
  53. +        connectionHeaders = list(map(lambda x: x.strip(), connectionHeaders))
  54. +        # TODO: The following is bad, die of embarrassment.
  55. +        # if self.upgrade != 1 and and b'upgrade' in connectionHeaders:
  56. +        if self.upgrade == 1 and b'upgrade' in connectionHeaders:
  57. +            self.upgrade = 2
  58. +
  59.          for key, values in headers.getAllRawHeaders():
  60.              self.handleHeader(key, values)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement