| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from mod_pywebsocket import common |
| from mod_pywebsocket.extensions import PerMessageDeflateExtensionProcessor |
| from mod_pywebsocket.stream import create_header |
| |
| |
| def _get_permessage_deflate_extension_processor(request): |
| for extension_processor in request.ws_extension_processors: |
| if isinstance(extension_processor, PerMessageDeflateExtensionProcessor): |
| return extension_processor |
| return None |
| |
| |
| def web_socket_do_extra_handshake(request): |
| processor = _get_permessage_deflate_extension_processor(request) |
| assert processor is not None |
| # Remove extension processors other than |
| # PerMessageDeflateExtensionProcessor to avoid conflict. |
| request.ws_extension_processors = [processor] |
| |
| |
| def web_socket_transfer_data(request): |
| line = request.ws_stream.receive_message() |
| # Hello |
| payload = b'\xf2\x48\xcd\xc9\xc9\x07\x00\x00\x00\xff\xff' |
| # Strip \x00\x00\xff\xff |
| stripped = payload[:-4] |
| |
| header = create_header( |
| common.OPCODE_TEXT, |
| len(payload), |
| fin=0, |
| rsv1=1, |
| rsv2=0, |
| rsv3=0, |
| mask=False) |
| request.ws_stream._write(header + payload) |
| |
| header = create_header( |
| common.OPCODE_CONTINUATION, |
| len(stripped), |
| fin=1, |
| rsv1=0, |
| rsv2=0, |
| rsv3=0, |
| mask=False) |
| request.ws_stream._write(header + stripped) |
| |
| |
| # vi:sts=4 sw=4 et |