Make sure you are using Undertow 1.3.23.Final, there were some fixes
here recently.
Stuart
On Sat, Jul 2, 2016 at 4:02 AM, PingShan Li <ping.li(a)firemon.com> wrote:
Based on your suggestion, we are able to add extension
PerMessageDeflateHandshake to WebSocketDeploymentInfo.
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 Collections.emptySet()?
public ServerWebSocketContainer(final ClassIntrospecter
classIntrospecter, final ClassLoader classLoader, XnioWorker xnioWorker,
ByteBufferPool bufferPool, ThreadSetupAction threadSetupAction, boolean
dispatchToWorker, InetSocketAddress clientBindAddress,
WebSocketReconnectHandler reconnectHandler, List<Extension>
installedExtensions) {
this.classIntrospecter = classIntrospecter;
this.bufferPool = bufferPool;
this.xnioWorker = xnioWorker;
this.threadSetupAction = threadSetupAction;
this.dispatchToWorker = dispatchToWorker;
this.clientBindAddress = clientBindAddress;
this.installedExtensions = new ArrayList<>(installedExtensions);
List<WebsocketClientSslProvider> clientSslProviders = new
ArrayList<>();
for (WebsocketClientSslProvider provider :
ServiceLoader.load(WebsocketClientSslProvider.class, classLoader)) {
clientSslProviders.add(provider);
}
this.clientSslProviders =
Collections.unmodifiableList(clientSslProviders);
this.webSocketReconnectHandler = reconnectHandler;
}
public Set<Extension> getInstalledExtensions() {
return Collections.emptySet();
}
________________________________
From: Stuart Douglas <sdouglas(a)redhat.com>
Sent: Wednesday, June 29, 2016 7:00:31 PM
To: PingShan Li
Cc: undertow-dev(a)lists.jboss.org
Subject: Re: [undertow-dev] permessage-deflate extension is not supported,
getInstalledExtensions() returns empty set in ServerWebSocketContainer.java
You need to invoke
io.undertow.websockets.jsr.WebSocketDeploymentInfo#addExtension with
an instance of io.undertow.websockets.extensions.PerMessageDeflateHandshake
Stuart
On Thu, Jun 30, 2016 at 6:16 AM, PingShan Li <ping.li(a)firemon.com> wrote:
> --- Problem:
> client's request for compression is ignored.
>
> The client sends the request for compression:
>
> Sec-WebSocket-Extensions: permessage-deflate; client_no_context_takeover;
> client_max_window_bits\r\n
>
>
> Webserver receives the client request,
>
>
>
> org.springframework.web.socket.server.support.AbstractHandshakeHandler.java:
>
> doHandshake function: try to see if requested extension is supported
>
> String subProtocol = selectProtocol(headers.getSecWebSocketProtocol(),
> wsHandler);
> List<WebSocketExtension> requested = headers.getSecWebSocketExtensions();
> List<WebSocketExtension> supported =
> this.requestUpgradeStrategy.getSupportedExtensions(request);
> List<WebSocketExtension> extensions = filterRequestedExtensions(request,
> requested, supported);
>
> getSupportedExtensions calls into the following function, which always
> returns empty set for installed extensions.
>
> io.undertow.websockets.jsr.ServerWebSocketContainer.java:
>
> public Set<Extension> getInstalledExtensions() {
> return Collections.emptySet();
> }
>
> My question is:
> how to tell spring framework that the permessage-deflate extension is
> supported by undertow?
>
> Environement:
> Undertow 1.3.22 Final is used by springframework:
> +-
>
> org.springframework.boot:spring-boot-starter-undertow:jar:1.3.5.RELEASE:compile
> [INFO] | | +- io.undertow:undertow-core:jar:1.3.22.Final:compile
> [INFO] | | +- io.undertow:undertow-servlet:jar:1.3.22.Final:compile
> [INFO] | | +-
> io.undertow:undertow-websockets-jsr:jar:1.3.22.Final:compile
>
>
> Thanks
>
>
>
>
>
>
> _______________________________________________
> undertow-dev mailing list
> undertow-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/undertow-dev