Changeset 108468 in webkit


Ignore:
Timestamp:
Feb 22, 2012 2:03:46 AM (12 years ago)
Author:
bashi@chromium.org
Message:

Adding WebSocket per-frame DEFLATE extension
https://bugs.webkit.org/show_bug.cgi?id=77522

Source/JavaScriptCore:

Added USE(ZLIB) flag.

Reviewed by Kent Tamura.

  • wtf/Platform.h:

Source/WebCore:

Add WebSocketDeflateFramer class which handles deflate-frame extension.
This class encapsulates WebSocketDeflater and WebSocketInflater classes,
which depend on zlib, so that WebSocketChannel is not necessary to aware
zlib dependency.

Reviewed by Kent Tamura.

Tests: http/tests/websocket/tests/hybi/compressed-control-frame.html

http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff.html
http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html
http/tests/websocket/tests/hybi/deflate-frame-parameter.html

  • CMakeLists.txt: Added WebSocketDeflateFramer.(cpp|h)
  • GNUmakefile.list.am: Ditto.
  • Target.pri: Ditto.
  • WebCore.gypi: Ditto.
  • WebCore.vcproj/WebCore.vcproj: Ditto.
  • WebCore.xcodeproj/project.pbxproj: Ditto.
  • websockets/WebSocket.cpp:

(WebCore::WebSocket::didConnect): Set m_extensions.

  • websockets/WebSocketChannel.cpp:

(WebCore::WebSocketChannel::connect): Add deflate-frame extension processor to WebSocketHanshake if deflate can use.
(WebCore::WebSocketChannel::fail): Call m_deflateFramer.didFail().
(WebCore::WebSocketChannel::processFrame): Decompress frames if needed.
(WebCore::WebSocketChannel::sendFrame): Compress frames if possible.

  • websockets/WebSocketChannel.h:
  • websockets/WebSocketDeflateFramer.cpp: Added.

(WebCore):
(WebSocketExtensionDeflateFrame):
(WebCore::WebSocketExtensionDeflateFrame::create):
(WebCore::WebSocketExtensionDeflateFrame::~WebSocketExtensionDeflateFrame):
(WebCore::WebSocketExtensionDeflateFrame::WebSocketExtensionDeflateFrame):
(WebCore::WebSocketExtensionDeflateFrame::handshakeString):
(WebCore::WebSocketExtensionDeflateFrame::processResponse):
(WebCore::DeflateResultHolder::DeflateResultHolder):
(WebCore::DeflateResultHolder::~DeflateResultHolder):
(WebCore::DeflateResultHolder::fail):
(WebCore::InflateResultHolder::InflateResultHolder):
(WebCore::InflateResultHolder::~InflateResultHolder):
(WebCore::InflateResultHolder::fail):
(WebCore::WebSocketDeflateFramer::WebSocketDeflateFramer):
(WebCore::WebSocketDeflateFramer::createExtensionProcessor):
(WebCore::WebSocketDeflateFramer::canDeflate):
(WebCore::WebSocketDeflateFramer::enableDeflate):
(WebCore::WebSocketDeflateFramer::deflate):
(WebCore::WebSocketDeflateFramer::resetDeflateContext):
(WebCore::WebSocketDeflateFramer::inflate):
(WebCore::WebSocketDeflateFramer::resetInflateContext):
(WebCore::WebSocketDeflateFramer::didFail):

  • websockets/WebSocketDeflateFramer.h: Added.

(WebCore):
(DeflateResultHolder):
(WebCore::DeflateResultHolder::succeeded):
(WebCore::DeflateResultHolder::failureReason):
(InflateResultHolder):
(WebCore::InflateResultHolder::succeeded):
(WebCore::InflateResultHolder::failureReason):
(WebSocketDeflateFramer):
(WebCore::WebSocketDeflateFramer::enabled):

LayoutTests:

Added tests for WebSocket deflate-frame extension. Also updated some
tests to follow the change.

Reviewed by Kent Tamura.

  • http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt: Added.
  • http/tests/websocket/tests/hybi/compressed-control-frame.html: Added.
  • http/tests/websocket/tests/hybi/compressed-control-frame_wsh.py: Added.

(web_socket_do_extra_handshake):
(web_socket_transfer_data):

  • http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff-expected.txt: Added.
  • http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff.html: Added.
  • http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter-expected.txt: Added.
  • http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html: Added.
  • http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter_wsh.py: Added.

(web_socket_do_extra_handshake):
(web_socket_transfer_data):

  • http/tests/websocket/tests/hybi/deflate-frame-parameter-expected.txt: Added.
  • http/tests/websocket/tests/hybi/deflate-frame-parameter.html: Added.
  • http/tests/websocket/tests/hybi/deflate-frame_wsh.py: Added.

(_get_deflate_frame_extension_processor):
(web_socket_do_extra_handshake):
(web_socket_transfer_data):

  • http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt:
  • http/tests/websocket/tests/hybi/send-file-blob_wsh.py:

(_retrieve_frame):
(web_socket_transfer_data):

Location:
trunk
Files:
12 added
15 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r108460 r108468  
     12012-02-22  Kenichi Ishibashi  <bashi@chromium.org>
     2
     3        Adding WebSocket per-frame DEFLATE extension
     4        https://bugs.webkit.org/show_bug.cgi?id=77522
     5
     6        Added tests for WebSocket deflate-frame extension. Also updated some
     7        tests to follow the change.
     8
     9        Reviewed by Kent Tamura.
     10
     11        * http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt: Added.
     12        * http/tests/websocket/tests/hybi/compressed-control-frame.html: Added.
     13        * http/tests/websocket/tests/hybi/compressed-control-frame_wsh.py: Added.
     14        (web_socket_do_extra_handshake):
     15        (web_socket_transfer_data):
     16        * http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff-expected.txt: Added.
     17        * http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff.html: Added.
     18        * http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter-expected.txt: Added.
     19        * http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html: Added.
     20        * http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter_wsh.py: Added.
     21        (web_socket_do_extra_handshake):
     22        (web_socket_transfer_data):
     23        * http/tests/websocket/tests/hybi/deflate-frame-parameter-expected.txt: Added.
     24        * http/tests/websocket/tests/hybi/deflate-frame-parameter.html: Added.
     25        * http/tests/websocket/tests/hybi/deflate-frame_wsh.py: Added.
     26        (_get_deflate_frame_extension_processor):
     27        (web_socket_do_extra_handshake):
     28        (web_socket_transfer_data):
     29        * http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt:
     30        * http/tests/websocket/tests/hybi/send-file-blob_wsh.py:
     31        (_retrieve_frame):
     32        (web_socket_transfer_data):
     33
    1342012-02-22  Yanbin Zhang  <yanbin.zhang@intel.com>
    235
  • trunk/LayoutTests/http/tests/websocket/tests/hybi/compressed-control-frame-expected.txt

    r108467 r108468  
    1 CONSOLE MESSAGE: Received unexpected Sec-WebSocket-Extensions header
    2 Test whether WebSocket handshake fails if the server sends Sec-WebSocket-Extensions header.
     1CONSOLE MESSAGE: Received unexpected compressed frame
     2Test whether a compressed control frame is rejected
    33
    44On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
    55
     6onopen() was called.
     7onclose() was called.
    68PASS closeEvent.wasClean is false
    79PASS successfullyParsed is true
  • trunk/LayoutTests/http/tests/websocket/tests/hybi/handshake-fail-by-extensions-header-expected.txt

    r107365 r108468  
    1 CONSOLE MESSAGE: Received unexpected Sec-WebSocket-Extensions header
     1CONSOLE MESSAGE: Received unexpected extension: x-foo
    22Test whether WebSocket handshake fails if the server sends Sec-WebSocket-Extensions header.
    33
  • trunk/LayoutTests/http/tests/websocket/tests/hybi/send-file-blob_wsh.py

    r94405 r108468  
    11from mod_pywebsocket import common
    22from mod_pywebsocket import msgutil
     3
     4
     5def _retrieve_frame(stream):
     6    # FIXME: Use better API.
     7    frame = stream._receive_frame_as_frame_object()
     8    for frame_filter in stream._options.incoming_frame_filters:
     9        frame_filter.filter(frame)
     10    return frame
    311
    412
     
    1119
    1220    for test_number, expected_message in enumerate(expected_messages):
    13         # FIXME: Use better API.
    14         opcode, payload, final, unused_reserved1, unused_reserved2, unused_reserved3 = request.ws_stream._receive_frame()
    15         if opcode == common.OPCODE_BINARY and payload == expected_message and final:
     21        frame = _retrieve_frame(request.ws_stream)
     22        if frame.opcode == common.OPCODE_BINARY and frame.payload == expected_message and frame.fin:
    1623            msgutil.send_message(request, 'PASS: Message #%d.' % test_number)
    1724        else:
    18             msgutil.send_message(request, 'FAIL: Message #%d: Received unexpected frame: opcode = %r, payload = %r, final = %r' % (test_number, opcode, payload, final))
     25            msgutil.send_message(request, 'FAIL: Message #%d: Received unexpected frame: opcode = %r, payload = %r, final = %r' % (test_number, frame.opcode, frame.payload, frame.fin))
    1926
    2027
  • trunk/Source/JavaScriptCore/ChangeLog

    r108456 r108468  
     12012-02-22  Kenichi Ishibashi  <bashi@chromium.org>
     2
     3        Adding WebSocket per-frame DEFLATE extension
     4        https://bugs.webkit.org/show_bug.cgi?id=77522
     5
     6        Added USE(ZLIB) flag.
     7
     8        Reviewed by Kent Tamura.
     9
     10        * wtf/Platform.h:
     11
    1122012-02-22  Hojong Han  <hojong.han@samsung.com>
    213
  • trunk/Source/JavaScriptCore/wtf/Platform.h

    r108444 r108468  
    11941194#endif
    11951195
     1196#if !PLATFORM(QT) && !PLATFORM(EFL)
     1197#define WTF_USE_ZLIB 1
     1198#endif
     1199
    11961200#endif /* WTF_Platform_h */
  • trunk/Source/WebCore/CMakeLists.txt

    r108464 r108468  
    20572057        websockets/WebSocket.cpp
    20582058        websockets/WebSocketChannel.cpp
     2059        websockets/WebSocketDeflateFramer.cpp
    20592060        websockets/WebSocketExtensionDispatcher.cpp
    20602061        websockets/WebSocketHandshake.cpp
  • trunk/Source/WebCore/ChangeLog

    r108467 r108468  
     12012-02-22  Kenichi Ishibashi  <bashi@chromium.org>
     2
     3        Adding WebSocket per-frame DEFLATE extension
     4        https://bugs.webkit.org/show_bug.cgi?id=77522
     5
     6        Add WebSocketDeflateFramer class which handles deflate-frame extension.
     7        This class encapsulates WebSocketDeflater and WebSocketInflater classes,
     8        which depend on zlib, so that WebSocketChannel is not necessary to aware
     9        zlib dependency.
     10
     11        Reviewed by Kent Tamura.
     12
     13        Tests: http/tests/websocket/tests/hybi/compressed-control-frame.html
     14               http/tests/websocket/tests/hybi/deflate-frame-comp-bit-onoff.html
     15               http/tests/websocket/tests/hybi/deflate-frame-invalid-parameter.html
     16               http/tests/websocket/tests/hybi/deflate-frame-parameter.html
     17
     18        * CMakeLists.txt: Added WebSocketDeflateFramer.(cpp|h)
     19        * GNUmakefile.list.am: Ditto.
     20        * Target.pri: Ditto.
     21        * WebCore.gypi: Ditto.
     22        * WebCore.vcproj/WebCore.vcproj: Ditto.
     23        * WebCore.xcodeproj/project.pbxproj: Ditto.
     24        * websockets/WebSocket.cpp:
     25        (WebCore::WebSocket::didConnect): Set m_extensions.
     26        * websockets/WebSocketChannel.cpp:
     27        (WebCore::WebSocketChannel::connect): Add deflate-frame extension processor to WebSocketHanshake if deflate can use.
     28        (WebCore::WebSocketChannel::fail): Call m_deflateFramer.didFail().
     29        (WebCore::WebSocketChannel::processFrame): Decompress frames if needed.
     30        (WebCore::WebSocketChannel::sendFrame): Compress frames if possible.
     31        * websockets/WebSocketChannel.h:
     32        * websockets/WebSocketDeflateFramer.cpp: Added.
     33        (WebCore):
     34        (WebSocketExtensionDeflateFrame):
     35        (WebCore::WebSocketExtensionDeflateFrame::create):
     36        (WebCore::WebSocketExtensionDeflateFrame::~WebSocketExtensionDeflateFrame):
     37        (WebCore::WebSocketExtensionDeflateFrame::WebSocketExtensionDeflateFrame):
     38        (WebCore::WebSocketExtensionDeflateFrame::handshakeString):
     39        (WebCore::WebSocketExtensionDeflateFrame::processResponse):
     40        (WebCore::DeflateResultHolder::DeflateResultHolder):
     41        (WebCore::DeflateResultHolder::~DeflateResultHolder):
     42        (WebCore::DeflateResultHolder::fail):
     43        (WebCore::InflateResultHolder::InflateResultHolder):
     44        (WebCore::InflateResultHolder::~InflateResultHolder):
     45        (WebCore::InflateResultHolder::fail):
     46        (WebCore::WebSocketDeflateFramer::WebSocketDeflateFramer):
     47        (WebCore::WebSocketDeflateFramer::createExtensionProcessor):
     48        (WebCore::WebSocketDeflateFramer::canDeflate):
     49        (WebCore::WebSocketDeflateFramer::enableDeflate):
     50        (WebCore::WebSocketDeflateFramer::deflate):
     51        (WebCore::WebSocketDeflateFramer::resetDeflateContext):
     52        (WebCore::WebSocketDeflateFramer::inflate):
     53        (WebCore::WebSocketDeflateFramer::resetInflateContext):
     54        (WebCore::WebSocketDeflateFramer::didFail):
     55        * websockets/WebSocketDeflateFramer.h: Added.
     56        (WebCore):
     57        (DeflateResultHolder):
     58        (WebCore::DeflateResultHolder::succeeded):
     59        (WebCore::DeflateResultHolder::failureReason):
     60        (InflateResultHolder):
     61        (WebCore::InflateResultHolder::succeeded):
     62        (WebCore::InflateResultHolder::failureReason):
     63        (WebSocketDeflateFramer):
     64        (WebCore::WebSocketDeflateFramer::enabled):
     65
    1662012-02-22  Yuta Kitamura  <yutak@chromium.org>
    267
  • trunk/Source/WebCore/GNUmakefile.list.am

    r108464 r108468  
    43404340        Source/WebCore/websockets/WebSocket.cpp \
    43414341        Source/WebCore/websockets/WebSocket.h \
     4342        Source/WebCore/websockets/WebSocketDeflateFramer.cpp \
     4343        Source/WebCore/websockets/WebSocketDeflateFramer.h \
    43424344        Source/WebCore/websockets/WebSocketDeflater.cpp \
    43434345        Source/WebCore/websockets/WebSocketDeflater.h \
  • trunk/Source/WebCore/Target.pri

    r108464 r108468  
    36673667        websockets/WebSocketChannel.h \
    36683668        websockets/WebSocketChannelClient.h \
     3669        websockets/WebSocketDeflateFramer.h \
    36693670        websockets/WebSocketExtensionDispatcher.h \
    36703671        websockets/WebSocketExtensionProcessor.h \
     
    36783679        websockets/WebSocket.cpp \
    36793680        websockets/WebSocketChannel.cpp \
     3681        websockets/WebSocketDeflateFramer.cpp \
    36803682        websockets/WebSocketExtensionDispatcher.cpp \
    36813683        websockets/WebSocketHandshake.cpp \
  • trunk/Source/WebCore/WebCore.gypi

    r108467 r108468  
    48184818            'websockets/WebSocketChannel.h',
    48194819            'websockets/WebSocketChannelClient.h',
     4820            'websockets/WebSocketDeflateFramer.cpp',
     4821            'websockets/WebSocketDeflateFramer.h',
    48204822            'websockets/WebSocketDeflater.cpp',
    48214823            'websockets/WebSocketDeflater.h',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r108464 r108468  
    7346373463                        </File>
    7346473464                        <File
     73465                                RelativePath="..\websockets\WebSocketDeflateFramer.cpp"
     73466                                >
     73467                        </File>
     73468                        <File
     73469                                RelativePath="..\websockets\WebSocketDeflateFramer.h"
     73470                                >
     73471                        </File>
     73472                        <File
    7346573473                                RelativePath="..\websockets\WebSocketDeflater.cpp"
    7346673474                                >
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r108464 r108468  
    13681368                4A1E71A514E106AC00626F9D /* JSShadowRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A1E71A314E106AC00626F9D /* JSShadowRoot.cpp */; };
    13691369                4A1E71A614E106AC00626F9D /* JSShadowRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A1E71A414E106AC00626F9D /* JSShadowRoot.h */; };
     1370                4A29222B14F468BA0021F77E /* WebSocketDeflateFramer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A29222914F468BA0021F77E /* WebSocketDeflateFramer.cpp */; };
     1371                4A29222C14F468BA0021F77E /* WebSocketDeflateFramer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A29222A14F468BA0021F77E /* WebSocketDeflateFramer.h */; };
    13701372                4A4A234614F1E1440046FBF1 /* WebSocketFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A4A234514F1E1440046FBF1 /* WebSocketFrame.h */; };
    13711373                4A6E9FC313C17D1D0046A7F8 /* FontFeatureValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6E9FC113C17D1D0046A7F8 /* FontFeatureValue.cpp */; };
     
    82328234                4A1E71A314E106AC00626F9D /* JSShadowRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSShadowRoot.cpp; sourceTree = "<group>"; };
    82338235                4A1E71A414E106AC00626F9D /* JSShadowRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSShadowRoot.h; sourceTree = "<group>"; };
     8236                4A29222914F468BA0021F77E /* WebSocketDeflateFramer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSocketDeflateFramer.cpp; sourceTree = "<group>"; };
     8237                4A29222A14F468BA0021F77E /* WebSocketDeflateFramer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketDeflateFramer.h; sourceTree = "<group>"; };
    82348238                4A4A234514F1E1440046FBF1 /* WebSocketFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocketFrame.h; sourceTree = "<group>"; };
    82358239                4A6E9FC113C17D1D0046A7F8 /* FontFeatureValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontFeatureValue.cpp; sourceTree = "<group>"; };
     
    1485514859                                510D4A48103177A20049EA54 /* WebSocketChannel.h */,
    1485614860                                510D4A49103177A20049EA54 /* WebSocketChannelClient.h */,
     14861                                4A29222914F468BA0021F77E /* WebSocketDeflateFramer.cpp */,
     14862                                4A29222A14F468BA0021F77E /* WebSocketDeflateFramer.h */,
    1485714863                                4AE02ABB14E8A9D200BC3BA7 /* WebSocketDeflater.cpp */,
    1485814864                                4AE02ABC14E8A9D200BC3BA7 /* WebSocketDeflater.h */,
     
    2424524251                                510D4A4F103177A20049EA54 /* WebSocketChannel.h in Headers */,
    2424624252                                510D4A50103177A20049EA54 /* WebSocketChannelClient.h in Headers */,
     24253                                4A29222C14F468BA0021F77E /* WebSocketDeflateFramer.h in Headers */,
    2424724254                                4AE02ABE14E8A9D200BC3BA7 /* WebSocketDeflater.h in Headers */,
    2424824255                                4A957F0714E241300049DBFB /* WebSocketExtensionDispatcher.h in Headers */,
     
    2720427211                                518A34C11026C831001B6896 /* WebSocket.cpp in Sources */,
    2720527212                                510D4A4E103177A20049EA54 /* WebSocketChannel.cpp in Sources */,
     27213                                4A29222B14F468BA0021F77E /* WebSocketDeflateFramer.cpp in Sources */,
    2720627214                                4AE02ABD14E8A9D200BC3BA7 /* WebSocketDeflater.cpp in Sources */,
    2720727215                                4A957F0614E2412A0049DBFB /* WebSocketExtensionDispatcher.cpp in Sources */,
  • trunk/Source/WebCore/websockets/WebSocket.cpp

    r107769 r108468  
    479479    m_state = OPEN;
    480480    m_subprotocol = m_channel->subprotocol();
     481    m_extensions = m_channel->extensions();
    481482    dispatchEvent(Event::create(eventNames().openEvent, false, false));
    482483}
  • trunk/Source/WebCore/websockets/WebSocketChannel.cpp

    r108439 r108468  
    128128    m_handshake = adoptPtr(new WebSocketHandshake(url, protocol, m_document, m_useHixie76Protocol));
    129129    m_handshake->reset();
     130    if (!m_useHixie76Protocol && m_deflateFramer.canDeflate())
     131        m_handshake->addExtensionProcessor(m_deflateFramer.createExtensionProcessor());
    130132    if (m_identifier)
    131133        InspectorInstrumentation::didCreateWebSocket(m_document, m_identifier, url, m_document->url());
     
    229231        if (m_buffer)
    230232            skipBuffer(m_bufferSize); // Save memory.
     233        m_deflateFramer.didFail();
    231234        m_hasContinuousFrame = false;
    232235        m_continuousFrameData.clear();
     
    618621    ASSERT(m_buffer < frameEnd);
    619622    ASSERT(frameEnd <= m_buffer + m_bufferSize);
     623
     624    InflateResultHolder inflateResult = m_deflateFramer.inflate(frame);
     625    if (!inflateResult.succeeded()) {
     626        fail(inflateResult.failureReason());
     627        return false;
     628    }
    620629
    621630    // Validate the frame data.
     
    10121021    ASSERT(!(opCode & ~opCodeMask)); // Checks whether "opCode" fits in the range of opCodes.
    10131022    WebSocketFrame frame(opCode, true, false, true, data, dataLength);
     1023
     1024    DeflateResultHolder deflateResult = m_deflateFramer.deflate(frame);
     1025    if (!deflateResult.succeeded()) {
     1026        fail(deflateResult.failureReason());
     1027        return false;
     1028    }
     1029
    10141030    Vector<char> frameData;
    10151031    makeFrameData(frame, frameData);
  • trunk/Source/WebCore/websockets/WebSocketChannel.h

    r108240 r108468  
    3838#include "ThreadableWebSocketChannel.h"
    3939#include "Timer.h"
     40#include "WebSocketDeflateFramer.h"
    4041#include "WebSocketFrame.h"
    4142#include "WebSocketHandshake.h"
     
    232233    BlobLoaderStatus m_blobLoaderStatus;
    233234#endif
     235
     236    WebSocketDeflateFramer m_deflateFramer;
    234237};
    235238
Note: See TracChangeset for help on using the changeset viewer.