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)import struct
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from mod_pywebsocket import stream
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def web_socket_do_extra_handshake(_request):
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pass
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def web_socket_transfer_data(request):
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  line = request.ws_stream.receive_message()
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if line is None:
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if line == '-':
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data = ''
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  elif line == '--':
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data = 'X'
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    code, reason = line.split(' ', 1)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data = struct.pack('!H', int(code)) + reason.encode('utf-8')
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  request.connection.write(stream.create_close_frame(data))
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  request.server_terminated = True
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  # Wait for Close frame from client.
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  request.ws_stream.receive_message()
29