<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&nbsp;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&nbsp;<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>&nbsp; &nbsp; public ServerWebSocketContainer(final ClassIntrospecter classIntrospecter, final ClassLoader classLoader, XnioWorker xnioWorker, ByteBufferPool bufferPool, ThreadSetupAction threadSetupAction, boolean dispatchToWorker, InetSocketAddress clientBindAddress,
 WebSocketReconnectHandler reconnectHandler, List&lt;Extension&gt; installedExtensions) {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; this.classIntrospecter = classIntrospecter;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; this.bufferPool = bufferPool;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; this.xnioWorker = xnioWorker;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; this.threadSetupAction = threadSetupAction;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; this.dispatchToWorker = dispatchToWorker;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; this.clientBindAddress = clientBindAddress;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; this.installedExtensions = new ArrayList&lt;&gt;(installedExtensions);</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; List&lt;WebsocketClientSslProvider&gt; clientSslProviders = new ArrayList&lt;&gt;();</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; for (WebsocketClientSslProvider provider : ServiceLoader.load(WebsocketClientSslProvider.class, classLoader)) {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clientSslProviders.add(provider);</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; }</div>
<div><br>
</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; this.clientSslProviders = Collections.unmodifiableList(clientSslProviders);</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; this.webSocketReconnectHandler = reconnectHandler;</div>
<div>&nbsp; &nbsp; }</div>
<div><br>
</div>
<div>&nbsp; &nbsp; public Set&lt;Extension&gt; getInstalledExtensions() {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; return Collections.emptySet();</div>
<div>&nbsp; &nbsp; }</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 &lt;sdouglas@redhat.com&gt;<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>&nbsp;</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 &lt;ping.li@firemon.com&gt; wrote:<br>
&gt; --- Problem:<br>
&gt; client's request for compression is ignored.<br>
&gt;<br>
&gt; The client sends the request for compression:<br>
&gt;<br>
&gt; Sec-WebSocket-Extensions: permessage-deflate; client_no_context_takeover;<br>
&gt; client_max_window_bits\r\n<br>
&gt;<br>
&gt;<br>
&gt; Webserver receives the client request,<br>
&gt;<br>
&gt;<br>
&gt; org.springframework.web.socket.server.support.AbstractHandshakeHandler.java:<br>
&gt;<br>
&gt; doHandshake function: try to see if requested extension is supported<br>
&gt;<br>
&gt; String subProtocol = selectProtocol(headers.getSecWebSocketProtocol(),<br>
&gt; wsHandler);<br>
&gt; List&lt;WebSocketExtension&gt; requested = headers.getSecWebSocketExtensions();<br>
&gt; List&lt;WebSocketExtension&gt; supported =<br>
&gt; this.requestUpgradeStrategy.getSupportedExtensions(request);<br>
&gt; List&lt;WebSocketExtension&gt; extensions = filterRequestedExtensions(request,<br>
&gt; requested, supported);<br>
&gt;<br>
&gt; getSupportedExtensions calls into the following function, which always<br>
&gt; returns empty set for installed extensions.<br>
&gt;<br>
&gt; io.undertow.websockets.jsr.ServerWebSocketContainer.java:<br>
&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; public Set&lt;Extension&gt; getInstalledExtensions() {<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Collections.emptySet();<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt;<br>
&gt; My question is:<br>
&gt; how to tell spring framework that the permessage-deflate extension is<br>
&gt; supported by undertow?<br>
&gt;<br>
&gt; Environement:<br>
&gt; Undertow 1.3.22 Final is used by springframework:<br>
&gt; &#43;-<br>
&gt; org.springframework.boot:spring-boot-starter-undertow:jar:1.3.5.RELEASE:compile<br>
&gt; [INFO] |&nbsp; |&nbsp; &#43;- io.undertow:undertow-core:jar:1.3.22.Final:compile<br>
&gt; [INFO] |&nbsp; |&nbsp; &#43;- io.undertow:undertow-servlet:jar:1.3.22.Final:compile<br>
&gt; [INFO] |&nbsp; |&nbsp; &#43;- io.undertow:undertow-websockets-jsr:jar:1.3.22.Final:compile<br>
&gt;<br>
&gt;<br>
&gt; Thanks<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; undertow-dev mailing list<br>
&gt; undertow-dev@lists.jboss.org<br>
&gt; <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>