<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" style="font-size:12pt; color:#000000; background-color:#FFFFFF; font-family:Calibri,Arial,Helvetica,sans-serif">
<p></p>
<div>Based on your suggestion, we are able to add extension PerMessageDeflateHandshake to WebSocketDeploymentInfo.</div>
<div><br>
</div>
<div>In the constructor of the ServerWebSocketContainer, the installedExtensions has one element of PerMessageDeflateHandshake. But when the getInstalledExtensions is called, it still returns empty set, should that function return installedExtensions instead
of <span id="x_ms-rterangepaste-start"></span><span style="font-family:Calibri,Arial,Helvetica,sans-serif,'Apple Color Emoji','Segoe UI Emoji',NotoColorEmoji,'Segoe UI Symbol','Android Emoji',EmojiSymbols; font-size:16px">Collections.emptySet()</span><span id="x_ms-rterangepaste-end"></span>?</div>
<div><br>
</div>
<div> public ServerWebSocketContainer(final ClassIntrospecter classIntrospecter, final ClassLoader classLoader, XnioWorker xnioWorker, ByteBufferPool bufferPool, ThreadSetupAction threadSetupAction, boolean dispatchToWorker, InetSocketAddress clientBindAddress,
WebSocketReconnectHandler reconnectHandler, List<Extension> installedExtensions) {</div>
<div> this.classIntrospecter = classIntrospecter;</div>
<div> this.bufferPool = bufferPool;</div>
<div> this.xnioWorker = xnioWorker;</div>
<div> this.threadSetupAction = threadSetupAction;</div>
<div> this.dispatchToWorker = dispatchToWorker;</div>
<div> this.clientBindAddress = clientBindAddress;</div>
<div> this.installedExtensions = new ArrayList<>(installedExtensions);</div>
<div> List<WebsocketClientSslProvider> clientSslProviders = new ArrayList<>();</div>
<div> for (WebsocketClientSslProvider provider : ServiceLoader.load(WebsocketClientSslProvider.class, classLoader)) {</div>
<div> clientSslProviders.add(provider);</div>
<div> }</div>
<div><br>
</div>
<div> this.clientSslProviders = Collections.unmodifiableList(clientSslProviders);</div>
<div> this.webSocketReconnectHandler = reconnectHandler;</div>
<div> }</div>
<div><br>
</div>
<div> public Set<Extension> getInstalledExtensions() {</div>
<div> return Collections.emptySet();</div>
<div> }</div>
<div><br>
</div>
<br>
<p></p>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Stuart Douglas <sdouglas@redhat.com><br>
<b>Sent:</b> Wednesday, June 29, 2016 7:00:31 PM<br>
<b>To:</b> PingShan Li<br>
<b>Cc:</b> undertow-dev@lists.jboss.org<br>
<b>Subject:</b> Re: [undertow-dev] permessage-deflate extension is not supported, getInstalledExtensions() returns empty set in ServerWebSocketContainer.java</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">You need to invoke<br>
io.undertow.websockets.jsr.WebSocketDeploymentInfo#addExtension with<br>
an instance of io.undertow.websockets.extensions.PerMessageDeflateHandshake<br>
<br>
<br>
Stuart<br>
<br>
On Thu, Jun 30, 2016 at 6:16 AM, PingShan Li <ping.li@firemon.com> wrote:<br>
> --- Problem:<br>
> client's request for compression is ignored.<br>
><br>
> The client sends the request for compression:<br>
><br>
> Sec-WebSocket-Extensions: permessage-deflate; client_no_context_takeover;<br>
> client_max_window_bits\r\n<br>
><br>
><br>
> Webserver receives the client request,<br>
><br>
><br>
> org.springframework.web.socket.server.support.AbstractHandshakeHandler.java:<br>
><br>
> doHandshake function: try to see if requested extension is supported<br>
><br>
> String subProtocol = selectProtocol(headers.getSecWebSocketProtocol(),<br>
> wsHandler);<br>
> List<WebSocketExtension> requested = headers.getSecWebSocketExtensions();<br>
> List<WebSocketExtension> supported =<br>
> this.requestUpgradeStrategy.getSupportedExtensions(request);<br>
> List<WebSocketExtension> extensions = filterRequestedExtensions(request,<br>
> requested, supported);<br>
><br>
> getSupportedExtensions calls into the following function, which always<br>
> returns empty set for installed extensions.<br>
><br>
> io.undertow.websockets.jsr.ServerWebSocketContainer.java:<br>
><br>
> public Set<Extension> getInstalledExtensions() {<br>
> return Collections.emptySet();<br>
> }<br>
><br>
> My question is:<br>
> how to tell spring framework that the permessage-deflate extension is<br>
> supported by undertow?<br>
><br>
> Environement:<br>
> Undertow 1.3.22 Final is used by springframework:<br>
> +-<br>
> org.springframework.boot:spring-boot-starter-undertow:jar:1.3.5.RELEASE:compile<br>
> [INFO] | | +- io.undertow:undertow-core:jar:1.3.22.Final:compile<br>
> [INFO] | | +- io.undertow:undertow-servlet:jar:1.3.22.Final:compile<br>
> [INFO] | | +- io.undertow:undertow-websockets-jsr:jar:1.3.22.Final:compile<br>
><br>
><br>
> Thanks<br>
><br>
><br>
><br>
><br>
><br>
><br>
> _______________________________________________<br>
> undertow-dev mailing list<br>
> undertow-dev@lists.jboss.org<br>
> <a href="https://lists.jboss.org/mailman/listinfo/undertow-dev">https://lists.jboss.org/mailman/listinfo/undertow-dev</a><br>
</div>
</span></font>
</body>
</html>