15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_GOODBYE_MESSAGE = u'Goodbye'
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def web_socket_do_extra_handshake(request):
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request.ws_extension_processors = []
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def web_socket_transfer_data(request):
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while True:
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    line = request.ws_stream.receive_message()
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if line is None:
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if isinstance(line, unicode):
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      request.ws_stream.send_message(line, binary=False)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if line == _GOODBYE_MESSAGE:
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      request.ws_stream.send_message(line, binary=True)
23