]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Merge branch 'master' into master 1917/head
authorBen Darnell <ben@bendarnell.com>
Sun, 26 Mar 2017 17:41:36 +0000 (13:41 -0400)
committerGitHub <noreply@github.com>
Sun, 26 Mar 2017 17:41:36 +0000 (13:41 -0400)
1  2 
tornado/test/websocket_test.py
tornado/websocket.py

index 8de1b95af23fb7e8c6a413573f43ccc78f1d5c4e,2de221134d022432dd8e51068a31e2ca6ce37221..0875e4b91e27fc4a0bc0968023216043905c5c62
@@@ -1,6 -1,6 +1,7 @@@
- from __future__ import absolute_import, division, print_function, with_statement
+ from __future__ import absolute_import, division, print_function
  
 +import functools
+ import sys
  import traceback
  
  from tornado.concurrent import Future
index f44ff5ad458030d5d5bfd55ab7219dba8e9545f6,d30aead8a96c160aa234491312e83f1e6114f154..1fafed777a97ec69948e82e56e4f369200ab5f7a
@@@ -184,10 -183,30 +184,28 @@@ class WebSocketHandler(tornado.web.Requ
          if self.ws_connection:
              self.ws_connection.accept_connection()
          else:
 -            if not self.stream.closed():
 -                self.stream.write(tornado.escape.utf8(
 -                    "HTTP/1.1 426 Upgrade Required\r\n"
 -                    "Sec-WebSocket-Version: 7, 8, 13\r\n\r\n"))
 -                self.stream.close()
 +            self.set_status(426, "Upgrade Required")
 +            self.set_header("Sec-WebSocket-Version", "7, 8, 13")
 +            self.finish()
  
+     stream = None
+     @property
+     def ping_interval(self):
+         """The interval for websocket keep-alive pings.
+         Set ws_ping_interval = 0 to disable pings.
+         """
+         return self.settings.get('websocket_ping_interval', None)
+     @property
+     def ping_timeout(self):
+         """If no ping is received in this many seconds,
+         close the websocket connection (VPNs, etc. can fail to cleanly close ws connections).
+         Default is max of 3 pings or 30 seconds.
+         """
+         return self.settings.get('websocket_ping_timeout', None)
      def write_message(self, message, binary=False):
          """Sends the given message to the client of this Web Socket.
  
@@@ -582,21 -641,24 +638,22 @@@ class WebSocketProtocol13(WebSocketProt
                      # Don't echo an offered client_max_window_bits
                      # parameter with no value.
                      del ext[1]['client_max_window_bits']
 -                extension_header = ('Sec-WebSocket-Extensions: %s\r\n' %
 -                                    httputil._encode_header(
 -                                        'permessage-deflate', ext[1]))
 +                self.handler.set_header("Sec-WebSocket-Extensions",
 +                                        httputil._encode_header(
 +                                            'permessage-deflate', ext[1]))
                  break
  
 -        if self.stream.closed():
 -            self._abort()
 -            return
 -        self.stream.write(tornado.escape.utf8(
 -            "HTTP/1.1 101 Switching Protocols\r\n"
 -            "Upgrade: websocket\r\n"
 -            "Connection: Upgrade\r\n"
 -            "Sec-WebSocket-Accept: %s\r\n"
 -            "%s%s"
 -            "\r\n" % (self._challenge_response(),
 -                      subprotocol_header, extension_header)))
 +        self.handler.clear_header("Content-Type")
 +        self.handler.set_status(101)
 +        self.handler.set_header("Upgrade", "websocket")
 +        self.handler.set_header("Connection", "Upgrade")
 +        self.handler.set_header("Sec-WebSocket-Accept", self._challenge_response())
 +        self.handler.finish()
 +
 +        self.handler._attach_stream()
 +        self.stream = self.handler.stream
  
+         self.start_pinging()
          self._run_callback(self.handler.open, *self.handler.open_args,
                             **self.handler.open_kwargs)
          self._receive_frame()