[undertow] 01/03: Remove alpn-not-supported.patch

Markus Koschany apo-guest at moszumanska.debian.org
Sun Nov 1 17:38:34 UTC 2015


This is an automated email from the git hooks/post-receive script.

apo-guest pushed a commit to branch master
in repository undertow.

commit c92c6c9e12f7db2fb1c9f0070a2df617fa1fa28c
Author: Markus Koschany <apo at debian.org>
Date:   Sun Nov 1 17:51:47 2015 +0100

    Remove alpn-not-supported.patch
---
 debian/patches/alpn-not-supported.patch | 1337 -------------------------------
 debian/patches/series                   |    1 -
 2 files changed, 1338 deletions(-)

diff --git a/debian/patches/alpn-not-supported.patch b/debian/patches/alpn-not-supported.patch
deleted file mode 100644
index f3a28d2..0000000
--- a/debian/patches/alpn-not-supported.patch
+++ /dev/null
@@ -1,1337 +0,0 @@
-From: Markus Koschany <apo at debian.org>
-Date: Sat, 31 Oct 2015 15:11:58 +0100
-Subject: alpn not supported
-
-Remove spdy protocol handler and ALPN support because jetty-alpn is not
-packaged for Debian.
-
-Forwarded: not-needed
----
- core/src/main/java/io/undertow/Undertow.java       |  23 +-
- .../undertow/client/http/HttpClientProvider.java   |  14 +-
- .../undertow/client/http2/Http2ClientProvider.java |  68 ----
- .../undertow/client/spdy/SpdyClientConnection.java | 331 -------------------
- .../undertow/client/spdy/SpdyClientExchange.java   | 140 --------
- .../undertow/client/spdy/SpdyClientProvider.java   | 356 ---------------------
- .../server/protocol/http/AlpnOpenListener.java     | 279 ----------------
- 7 files changed, 2 insertions(+), 1209 deletions(-)
- delete mode 100644 core/src/main/java/io/undertow/client/spdy/SpdyClientConnection.java
- delete mode 100644 core/src/main/java/io/undertow/client/spdy/SpdyClientExchange.java
- delete mode 100644 core/src/main/java/io/undertow/client/spdy/SpdyClientProvider.java
- delete mode 100644 core/src/main/java/io/undertow/server/protocol/http/AlpnOpenListener.java
-
-diff --git a/core/src/main/java/io/undertow/Undertow.java b/core/src/main/java/io/undertow/Undertow.java
-index 1d36782..e8746fa 100644
---- a/core/src/main/java/io/undertow/Undertow.java
-+++ b/core/src/main/java/io/undertow/Undertow.java
-@@ -22,10 +22,8 @@ import io.undertow.protocols.ssl.UndertowXnioSsl;
- import io.undertow.server.DefaultByteBufferPool;
- import io.undertow.server.HttpHandler;
- import io.undertow.server.protocol.ajp.AjpOpenListener;
--import io.undertow.server.protocol.http.AlpnOpenListener;
- import io.undertow.server.protocol.http.HttpOpenListener;
- import io.undertow.server.protocol.http2.Http2OpenListener;
--import io.undertow.server.protocol.spdy.SpdyOpenListener;
- import org.xnio.ChannelListener;
- import org.xnio.ChannelListeners;
- import org.xnio.IoUtils;
-@@ -142,26 +140,7 @@ public final class Undertow {
- 
-                         HttpOpenListener httpOpenListener = new HttpOpenListener(buffers, undertowOptions);
-                         httpOpenListener.setRootHandler(rootHandler);
--
--                        boolean spdy = serverOptions.get(UndertowOptions.ENABLE_SPDY, false);
--                        boolean http2 = serverOptions.get(UndertowOptions.ENABLE_HTTP2, false);
--                        if(spdy || http2) {
--                            AlpnOpenListener alpn = new AlpnOpenListener(buffers, undertowOptions, httpOpenListener);
--                            if(spdy) {
--                                SpdyOpenListener spdyListener = new SpdyOpenListener(buffers, new DefaultByteBufferPool(false, 1024, -1, 2, 0), undertowOptions);
--                                spdyListener.setRootHandler(rootHandler);
--                                alpn.addProtocol(SpdyOpenListener.SPDY_3_1, spdyListener, 5);
--                            }
--                            if(http2) {
--                                Http2OpenListener http2Listener = new Http2OpenListener(buffers, undertowOptions);
--                                http2Listener.setRootHandler(rootHandler);
--                                alpn.addProtocol(Http2OpenListener.HTTP2, http2Listener, 10);
--                                alpn.addProtocol(Http2OpenListener.HTTP2_14, http2Listener, 7);
--                            }
--                            openListener = alpn;
--                        } else {
--                            openListener = httpOpenListener;
--                        }
-+                        openListener = httpOpenListener;
-                         ChannelListener<AcceptingChannel<StreamConnection>> acceptListener = ChannelListeners.openListenerAdapter(openListener);
-                         XnioSsl xnioSsl;
-                         if (listener.sslContext != null) {
-diff --git a/core/src/main/java/io/undertow/client/http/HttpClientProvider.java b/core/src/main/java/io/undertow/client/http/HttpClientProvider.java
-index ccb32f0..572e45d 100644
---- a/core/src/main/java/io/undertow/client/http/HttpClientProvider.java
-+++ b/core/src/main/java/io/undertow/client/http/HttpClientProvider.java
-@@ -24,7 +24,6 @@ import io.undertow.client.ClientCallback;
- import io.undertow.client.ClientConnection;
- import io.undertow.client.ClientProvider;
- import io.undertow.client.http2.Http2ClientProvider;
--import io.undertow.client.spdy.SpdyClientProvider;
- import org.xnio.ChannelListener;
- import org.xnio.IoFuture;
- import org.xnio.OptionMap;
-@@ -129,18 +128,7 @@ public class HttpClientProvider implements ClientProvider {
- 
- 
-     private void handleConnected(final StreamConnection connection, final ClientCallback<ClientConnection> listener, final ByteBufferPool bufferPool, final OptionMap options, URI uri) {
--        if (options.get(UndertowOptions.ENABLE_SPDY, false) && connection instanceof SslConnection && SpdyClientProvider.isEnabled()) {
--            try {
--                SpdyClientProvider.handlePotentialSpdyConnection(connection, listener, bufferPool, options, new ChannelListener<SslConnection>() {
--                    @Override
--                    public void handleEvent(SslConnection channel) {
--                        listener.completed(new HttpClientConnection(connection, options, bufferPool));
--                    }
--                });
--            } catch (Exception e) {
--                listener.failed(new IOException(e));
--            }
--        } else if (options.get(UndertowOptions.ENABLE_HTTP2, false) && connection instanceof SslConnection && Http2ClientProvider.isEnabled()) {
-+        if (options.get(UndertowOptions.ENABLE_HTTP2, false) && connection instanceof SslConnection && Http2ClientProvider.isEnabled()) {
-             try {
-                 Http2ClientProvider.handlePotentialHttp2Connection(connection, listener, bufferPool, options, new ChannelListener<SslConnection>() {
-                     @Override
-diff --git a/core/src/main/java/io/undertow/client/http2/Http2ClientProvider.java b/core/src/main/java/io/undertow/client/http2/Http2ClientProvider.java
-index 0af0977..80dc0f1 100644
---- a/core/src/main/java/io/undertow/client/http2/Http2ClientProvider.java
-+++ b/core/src/main/java/io/undertow/client/http2/Http2ClientProvider.java
-@@ -36,7 +36,6 @@ import io.undertow.conduits.ByteActivityCallback;
- import io.undertow.conduits.BytesReceivedStreamSourceConduit;
- import io.undertow.conduits.BytesSentStreamSinkConduit;
- import io.undertow.protocols.ssl.UndertowXnioSsl;
--import org.eclipse.jetty.alpn.ALPN;
- import org.xnio.ChannelListener;
- import org.xnio.IoFuture;
- import org.xnio.OptionMap;
-@@ -181,29 +180,12 @@ public class Http2ClientProvider implements ClientProvider {
-         final SslConnection sslConnection = (SslConnection) connection;
-         final SSLEngine sslEngine = UndertowXnioSsl.getSslEngine(sslConnection);
- 
--        final Http2SelectionProvider http2SelectionProvider = new Http2SelectionProvider(sslEngine);
--        try {
--            ALPN_PUT_METHOD.invoke(null, sslEngine, http2SelectionProvider);
--        } catch (Exception e) {
--            http2FailedListener.handleEvent(sslConnection);
--            return;
--        }
--
-         try {
-             sslConnection.startHandshake();
-             sslConnection.getSourceChannel().getReadSetter().set(new ChannelListener<StreamSourceChannel>() {
-                 @Override
-                 public void handleEvent(StreamSourceChannel channel) {
- 
--                    if (http2SelectionProvider.selected != null) {
--                        if (http2SelectionProvider.selected.equals(HTTP_1_1)) {
--                            sslConnection.getSourceChannel().suspendReads();
--                            http2FailedListener.handleEvent(sslConnection);
--                            return;
--                        } else if (http2SelectionProvider.selected.equals(HTTP2)) {
--                            listener.completed(createHttp2Channel(connection, bufferPool, options, uri.getHost()));
--                        }
--                    } else {
-                         ByteBuffer buf = ByteBuffer.allocate(100);
-                         try {
-                             int read = channel.read(buf);
-@@ -213,25 +195,10 @@ public class Http2ClientProvider implements ClientProvider {
-                                 pb.pushBack(new ImmediatePooled<>(buf));
-                                 connection.getSourceChannel().setConduit(pb);
-                             }
--                            if (http2SelectionProvider.selected == null) {
--                                http2SelectionProvider.selected = (String) sslEngine.getSession().getValue(PROTOCOL_KEY);
--                            }
--                            if ((http2SelectionProvider.selected == null && read > 0) || HTTP_1_1.equals(http2SelectionProvider.selected)) {
--                                sslConnection.getSourceChannel().suspendReads();
--                                http2FailedListener.handleEvent(sslConnection);
--                                return;
--                            } else if (http2SelectionProvider.selected != null) {
--                                //we have spdy
--                                if (http2SelectionProvider.selected.equals(HTTP2)) {
--                                    listener.completed(createHttp2Channel(connection, bufferPool, options, uri.getHost()));
--                                }
--                            }
-                         } catch (IOException e) {
-                             listener.failed(e);
-                         }
--                    }
-                 }
--
-             });
-             sslConnection.getSourceChannel().resumeReads();
-         } catch (IOException e) {
-@@ -268,41 +235,6 @@ public class Http2ClientProvider implements ClientProvider {
-         return new Http2ClientConnection(http2Channel, false, defaultHost, clientStatistics);
-     }
- 
--    private static class Http2SelectionProvider implements ALPN.ClientProvider {
--        private String selected;
--        private final SSLEngine sslEngine;
--
--        private Http2SelectionProvider(SSLEngine sslEngine) {
--            this.sslEngine = sslEngine;
--        }
--
--        @Override
--        public boolean supports() {
--            return true;
--        }
--
--        @Override
--        public List<String> protocols() {
--            return PROTOCOLS;
--        }
--
--        @Override
--        public void unsupported() {
--            selected = HTTP_1_1;
--        }
--
--        @Override
--        public void selected(String s) {
--
--            ALPN.remove(sslEngine);
--            selected = s;
--            sslEngine.getHandshakeSession().putValue(PROTOCOL_KEY, selected);
--        }
--
--        private String getSelected() {
--            return selected;
--        }
--    }
- 
- 
-     private static class ClientStatisticsImpl implements ClientStatistics {
-diff --git a/core/src/main/java/io/undertow/client/spdy/SpdyClientConnection.java b/core/src/main/java/io/undertow/client/spdy/SpdyClientConnection.java
-deleted file mode 100644
-index c5a05be..0000000
---- a/core/src/main/java/io/undertow/client/spdy/SpdyClientConnection.java
-+++ /dev/null
-@@ -1,331 +0,0 @@
--/*
-- * JBoss, Home of Professional Open Source.
-- * Copyright 2014 Red Hat, Inc., and individual contributors
-- * as indicated by the @author tags.
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- *
-- *     http://www.apache.org/licenses/LICENSE-2.0
-- *
-- *  Unless required by applicable law or agreed to in writing, software
-- *  distributed under the License is distributed on an "AS IS" BASIS,
-- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- *  See the License for the specific language governing permissions and
-- *  limitations under the License.
-- */
--
--package io.undertow.client.spdy;
--
--import io.undertow.UndertowLogger;
--import io.undertow.UndertowMessages;
--import io.undertow.client.ClientCallback;
--import io.undertow.client.ClientConnection;
--import io.undertow.client.ClientExchange;
--import io.undertow.client.ClientRequest;
--import io.undertow.client.ClientStatistics;
--import io.undertow.protocols.spdy.SpdyChannel;
--import io.undertow.protocols.spdy.SpdyPingStreamSourceChannel;
--import io.undertow.protocols.spdy.SpdyRstStreamStreamSourceChannel;
--import io.undertow.protocols.spdy.SpdyStreamSourceChannel;
--import io.undertow.protocols.spdy.SpdySynReplyStreamSourceChannel;
--import io.undertow.protocols.spdy.SpdySynStreamStreamSinkChannel;
--import io.undertow.util.Headers;
--import io.undertow.util.HttpString;
--import org.xnio.ChannelExceptionHandler;
--import org.xnio.ChannelListener;
--import org.xnio.ChannelListeners;
--import org.xnio.IoUtils;
--import org.xnio.Option;
--import io.undertow.connector.ByteBufferPool;
--import org.xnio.StreamConnection;
--import org.xnio.XnioIoThread;
--import org.xnio.XnioWorker;
--import org.xnio.channels.StreamSinkChannel;
--
--import java.io.IOException;
--import java.net.SocketAddress;
--import java.util.Map;
--import java.util.concurrent.ConcurrentHashMap;
--
--import static io.undertow.util.Headers.CONTENT_LENGTH;
--import static io.undertow.util.Headers.TRANSFER_ENCODING;
--
--/**
-- * @author Stuart Douglas
-- */
--public class SpdyClientConnection implements ClientConnection {
--
--
--    static final HttpString METHOD = new HttpString(":method");
--    static final HttpString PATH = new HttpString(":path");
--    static final HttpString SCHEME = new HttpString(":scheme");
--    static final HttpString VERSION = new HttpString(":version");
--    static final HttpString HOST = new HttpString(":host");
--    static final HttpString STATUS = new HttpString(":status");
--
--    private final SpdyChannel spdyChannel;
--    private final ChannelListener.SimpleSetter<ClientConnection> closeSetter = new ChannelListener.SimpleSetter<>();
--
--    private final Map<Integer, SpdyClientExchange> currentExchanges = new ConcurrentHashMap<>();
--
--    private final ClientStatistics clientStatistics;
--    public SpdyClientConnection(SpdyChannel spdyChannel, ClientStatistics clientStatistics) {
--        this.spdyChannel = spdyChannel;
--        this.clientStatistics = clientStatistics;
--        spdyChannel.getReceiveSetter().set(new SpdyReceiveListener());
--        spdyChannel.resumeReceives();
--        spdyChannel.addCloseTask(new ChannelListener<SpdyChannel>() {
--            @Override
--            public void handleEvent(SpdyChannel channel) {
--                ChannelListeners.invokeChannelListener(SpdyClientConnection.this, closeSetter.get());
--            }
--        });
--    }
--
--    @Override
--    public void sendRequest(ClientRequest request, ClientCallback<ClientExchange> clientCallback) {
--        request.getRequestHeaders().put(PATH, request.getPath());
--        request.getRequestHeaders().put(SCHEME, "https");
--        request.getRequestHeaders().put(VERSION, request.getProtocol().toString());
--        request.getRequestHeaders().put(METHOD, request.getMethod().toString());
--        request.getRequestHeaders().put(HOST, request.getRequestHeaders().getFirst(Headers.HOST));
--        request.getRequestHeaders().remove(Headers.HOST);
--
--        SpdySynStreamStreamSinkChannel sinkChannel;
--        try {
--            sinkChannel = spdyChannel.createStream(request.getRequestHeaders());
--        } catch (IOException e) {
--            clientCallback.failed(e);
--            return;
--        }
--        SpdyClientExchange exchange = new SpdyClientExchange(this, sinkChannel, request);
--        currentExchanges.put(sinkChannel.getStreamId(), exchange);
--
--
--        boolean hasContent = true;
--
--        String fixedLengthString = request.getRequestHeaders().getFirst(CONTENT_LENGTH);
--        String transferEncodingString = request.getRequestHeaders().getLast(TRANSFER_ENCODING);
--        if (fixedLengthString != null) {
--            try {
--                long length = Long.parseLong(fixedLengthString);
--                hasContent = length != 0;
--            } catch (NumberFormatException e) {
--                handleError(new IOException(e));
--                return;
--            }
--        } else if (transferEncodingString == null) {
--            hasContent = false;
--        }
--        if(clientCallback != null) {
--            clientCallback.completed(exchange);
--        }
--        if (!hasContent) {
--            //if there is no content we flush the response channel.
--            //otherwise it is up to the user
--            try {
--                sinkChannel.shutdownWrites();
--                if (!sinkChannel.flush()) {
--                    sinkChannel.getWriteSetter().set(ChannelListeners.flushingChannelListener(null, new ChannelExceptionHandler<StreamSinkChannel>() {
--                        @Override
--                        public void handleException(StreamSinkChannel channel, IOException exception) {
--                            handleError(exception);
--                        }
--                    }));
--                    sinkChannel.resumeWrites();
--                }
--            } catch (IOException e) {
--                handleError(e);
--            }
--        } else if (!sinkChannel.isWriteResumed()) {
--            try {
--                //TODO: this needs some more thought
--                if (!sinkChannel.flush()) {
--                    sinkChannel.getWriteSetter().set(new ChannelListener<StreamSinkChannel>() {
--                        @Override
--                        public void handleEvent(StreamSinkChannel channel) {
--                            try {
--                                if (channel.flush()) {
--                                    channel.suspendWrites();
--                                }
--                            } catch (IOException e) {
--                                handleError(e);
--                            }
--                        }
--                    });
--                    sinkChannel.resumeWrites();
--                }
--            } catch (IOException e) {
--                handleError(e);
--            }
--        }
--    }
--
--    private void handleError(IOException e) {
--
--        UndertowLogger.REQUEST_IO_LOGGER.ioException(e);
--        IoUtils.safeClose(SpdyClientConnection.this);
--        for (Map.Entry<Integer, SpdyClientExchange> entry : currentExchanges.entrySet()) {
--            try {
--                entry.getValue().failed(e);
--            } catch (Exception ex) {
--                UndertowLogger.REQUEST_IO_LOGGER.ioException(new IOException(ex));
--            }
--        }
--    }
--
--    @Override
--    public StreamConnection performUpgrade() throws IOException {
--        throw UndertowMessages.MESSAGES.upgradeNotSupported();
--    }
--
--    @Override
--    public ByteBufferPool getBufferPool() {
--        return spdyChannel.getBufferPool();
--    }
--
--    @Override
--    public SocketAddress getPeerAddress() {
--        return spdyChannel.getPeerAddress();
--    }
--
--    @Override
--    public <A extends SocketAddress> A getPeerAddress(Class<A> type) {
--        return spdyChannel.getPeerAddress(type);
--    }
--
--    @Override
--    public ChannelListener.Setter<? extends ClientConnection> getCloseSetter() {
--        return closeSetter;
--    }
--
--    @Override
--    public SocketAddress getLocalAddress() {
--        return spdyChannel.getLocalAddress();
--    }
--
--    @Override
--    public <A extends SocketAddress> A getLocalAddress(Class<A> type) {
--        return spdyChannel.getLocalAddress(type);
--    }
--
--    @Override
--    public XnioWorker getWorker() {
--        return spdyChannel.getWorker();
--    }
--
--    @Override
--    public XnioIoThread getIoThread() {
--        return spdyChannel.getIoThread();
--    }
--
--    @Override
--    public boolean isOpen() {
--        return spdyChannel.isOpen();
--    }
--
--    @Override
--    public void close() throws IOException {
--        spdyChannel.sendGoAway(SpdyChannel.CLOSE_OK);
--    }
--
--    @Override
--    public boolean supportsOption(Option<?> option) {
--        return false;
--    }
--
--    @Override
--    public <T> T getOption(Option<T> option) throws IOException {
--        return null;
--    }
--
--    @Override
--    public <T> T setOption(Option<T> option, T value) throws IllegalArgumentException, IOException {
--        return null;
--    }
--
--    @Override
--    public boolean isUpgraded() {
--        return false;
--    }
--
--    @Override
--    public boolean isPushSupported() {
--        return true;
--    }
--
--    @Override
--    public boolean isMultiplexingSupported() {
--        return true;
--    }
--
--    @Override
--    public ClientStatistics getStatistics() {
--        return clientStatistics;
--    }
--
--    private class SpdyReceiveListener implements ChannelListener<SpdyChannel> {
--
--        @Override
--        public void handleEvent(SpdyChannel channel) {
--            try {
--                SpdyStreamSourceChannel result = channel.receive();
--                if (result instanceof SpdySynReplyStreamSourceChannel) {
--                    final int streamId = ((SpdySynReplyStreamSourceChannel) result).getStreamId();
--                    SpdyClientExchange request = currentExchanges.get(streamId);
--                    result.addCloseTask(new ChannelListener<SpdyStreamSourceChannel>() {
--                        @Override
--                        public void handleEvent(SpdyStreamSourceChannel channel) {
--                            currentExchanges.remove(streamId);
--                        }
--                    });
--                    if (request == null) {
--
--                        //server side initiated stream, we can't deal with that at the moment
--                        //just fail
--                        //TODO: either handle this properly or at the very least send RST_STREAM
--                        channel.sendGoAway(SpdyChannel.CLOSE_PROTOCOL_ERROR);
--                        IoUtils.safeClose(SpdyClientConnection.this);
--                        return;
--                    }
--                    request.responseReady((SpdySynReplyStreamSourceChannel) result);
--
--                } else if (result instanceof SpdyPingStreamSourceChannel) {
--                    handlePing((SpdyPingStreamSourceChannel) result);
--                } else if (result instanceof SpdyRstStreamStreamSourceChannel) {
--                    int stream = ((SpdyRstStreamStreamSourceChannel)result).getStreamId();
--                    UndertowLogger.REQUEST_LOGGER.debugf("Client received RST_STREAM for stream %s", stream);
--                    SpdyClientExchange exchange = currentExchanges.get(stream);
--                    if(exchange != null) {
--                        exchange.failed(UndertowMessages.MESSAGES.spdyStreamWasReset());
--                    }
--                } else if(!channel.isOpen()) {
--                    throw UndertowMessages.MESSAGES.channelIsClosed();
--                }
--
--            } catch (IOException e) {
--                UndertowLogger.REQUEST_IO_LOGGER.ioException(e);
--                IoUtils.safeClose(SpdyClientConnection.this);
--                for (Map.Entry<Integer, SpdyClientExchange> entry : currentExchanges.entrySet()) {
--                    try {
--                        entry.getValue().failed(e);
--                    } catch (Exception ex) {
--                        UndertowLogger.REQUEST_IO_LOGGER.ioException(new IOException(ex));
--                    }
--                }
--            }
--
--        }
--
--        private void handlePing(SpdyPingStreamSourceChannel frame) {
--            int id = frame.getId();
--            if (id % 2 == 0) {
--                //server side ping, return it
--                frame.getSpdyChannel().sendPing(id);
--            }
--        }
--
--    }
--}
-diff --git a/core/src/main/java/io/undertow/client/spdy/SpdyClientExchange.java b/core/src/main/java/io/undertow/client/spdy/SpdyClientExchange.java
-deleted file mode 100644
-index ae282bf..0000000
---- a/core/src/main/java/io/undertow/client/spdy/SpdyClientExchange.java
-+++ /dev/null
-@@ -1,140 +0,0 @@
--/*
-- * JBoss, Home of Professional Open Source.
-- * Copyright 2014 Red Hat, Inc., and individual contributors
-- * as indicated by the @author tags.
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- *
-- *     http://www.apache.org/licenses/LICENSE-2.0
-- *
-- *  Unless required by applicable law or agreed to in writing, software
-- *  distributed under the License is distributed on an "AS IS" BASIS,
-- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- *  See the License for the specific language governing permissions and
-- *  limitations under the License.
-- */
--
--package io.undertow.client.spdy;
--
--import io.undertow.client.ClientCallback;
--import io.undertow.client.ClientConnection;
--import io.undertow.client.ClientExchange;
--import io.undertow.client.ClientRequest;
--import io.undertow.client.ClientResponse;
--import io.undertow.client.ContinueNotification;
--import io.undertow.client.PushCallback;
--import io.undertow.protocols.spdy.SpdyStreamSinkChannel;
--import io.undertow.protocols.spdy.SpdyStreamSourceChannel;
--import io.undertow.protocols.spdy.SpdySynReplyStreamSourceChannel;
--import io.undertow.util.AbstractAttachable;
--import io.undertow.util.HeaderMap;
--import io.undertow.util.Headers;
--import org.xnio.channels.StreamSinkChannel;
--import org.xnio.channels.StreamSourceChannel;
--
--import java.io.IOException;
--
--/**
-- * @author Stuart Douglas
-- */
--public class SpdyClientExchange extends AbstractAttachable implements ClientExchange {
--    private ClientCallback<ClientExchange> responseListener;
--    private ContinueNotification continueNotification;
--    private SpdyStreamSourceChannel response;
--    private ClientResponse clientResponse;
--    private final ClientConnection clientConnection;
--    private final SpdyStreamSinkChannel request;
--    private final ClientRequest clientRequest;
--    private IOException failedReason;
--    private PushCallback pushCallback;
--
--    public SpdyClientExchange(ClientConnection clientConnection, SpdyStreamSinkChannel request, ClientRequest clientRequest) {
--        this.clientConnection = clientConnection;
--        this.request = request;
--        this.clientRequest = clientRequest;
--    }
--
--    @Override
--    public void setResponseListener(ClientCallback<ClientExchange> responseListener) {
--        this.responseListener = responseListener;
--        if (responseListener != null) {
--            if (failedReason != null) {
--                responseListener.failed(failedReason);
--            } else if (clientResponse != null) {
--                responseListener.completed(this);
--            }
--        }
--    }
--
--    @Override
--    public void setContinueHandler(ContinueNotification continueHandler) {
--        String expect = clientRequest.getRequestHeaders().getFirst(Headers.EXPECT);
--        if ("100-continue".equalsIgnoreCase(expect)) {
--            continueHandler.handleContinue(this);
--        }
--    }
--
--    @Override
--    public void setPushHandler(PushCallback pushCallback) {
--        this.pushCallback = pushCallback;
--    }
--
--    PushCallback getPushCallback() {
--        return pushCallback;
--    }
--
--    @Override
--    public StreamSinkChannel getRequestChannel() {
--        return request;
--    }
--
--    @Override
--    public StreamSourceChannel getResponseChannel() {
--        return response;
--    }
--
--    @Override
--    public ClientRequest getRequest() {
--        return clientRequest;
--    }
--
--    @Override
--    public ClientResponse getResponse() {
--        return clientResponse;
--    }
--
--    @Override
--    public ClientResponse getContinueResponse() {
--        return null;
--    }
--
--    @Override
--    public ClientConnection getConnection() {
--        return clientConnection;
--    }
--
--    void failed(final IOException e) {
--        this.failedReason = e;
--        if(responseListener != null) {
--            responseListener.failed(e);
--        }
--    }
--
--    void responseReady(SpdySynReplyStreamSourceChannel result) {
--        this.response = result;
--        HeaderMap headers = result.getHeaders();
--        final String status = result.getHeaders().getFirst(SpdyClientConnection.STATUS);
--        int statusCode = 500;
--        if (status != null && status.length() > 3) {
--            statusCode = Integer.parseInt(status.substring(0, 3));
--        }
--        headers.remove(SpdyClientConnection.VERSION);
--        headers.remove(SpdyClientConnection.STATUS);
--        clientResponse = new ClientResponse(statusCode, status != null ? status.substring(3) : "", clientRequest.getProtocol(), headers);
--        if (responseListener != null) {
--            responseListener.completed(this);
--        }
--    }
--}
-diff --git a/core/src/main/java/io/undertow/client/spdy/SpdyClientProvider.java b/core/src/main/java/io/undertow/client/spdy/SpdyClientProvider.java
-deleted file mode 100644
-index 7540f6e..0000000
---- a/core/src/main/java/io/undertow/client/spdy/SpdyClientProvider.java
-+++ /dev/null
-@@ -1,356 +0,0 @@
--/*
-- * JBoss, Home of Professional Open Source.
-- * Copyright 2014 Red Hat, Inc., and individual contributors
-- * as indicated by the @author tags.
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- *
-- *     http://www.apache.org/licenses/LICENSE-2.0
-- *
-- *  Unless required by applicable law or agreed to in writing, software
-- *  distributed under the License is distributed on an "AS IS" BASIS,
-- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- *  See the License for the specific language governing permissions and
-- *  limitations under the License.
-- */
--
--package io.undertow.client.spdy;
--
--import java.io.IOException;
--import java.lang.reflect.Method;
--import java.net.InetSocketAddress;
--import java.net.URI;
--import java.nio.ByteBuffer;
--import java.util.Arrays;
--import java.util.Collections;
--import java.util.HashSet;
--import java.util.List;
--import java.util.Set;
--import javax.net.ssl.SSLEngine;
--
--import io.undertow.UndertowOptions;
--import io.undertow.client.ClientStatistics;
--import io.undertow.conduits.ByteActivityCallback;
--import io.undertow.conduits.BytesReceivedStreamSourceConduit;
--import io.undertow.conduits.BytesSentStreamSinkConduit;
--import io.undertow.protocols.ssl.UndertowXnioSsl;
--import io.undertow.server.DefaultByteBufferPool;
--import org.eclipse.jetty.alpn.ALPN;
--import org.xnio.ChannelListener;
--import org.xnio.IoFuture;
--import org.xnio.OptionMap;
--import org.xnio.Options;
--import io.undertow.connector.ByteBufferPool;
--import org.xnio.StreamConnection;
--import org.xnio.XnioIoThread;
--import org.xnio.XnioWorker;
--import org.xnio.channels.StreamSourceChannel;
--import org.xnio.conduits.PushBackStreamSourceConduit;
--import org.xnio.ssl.SslConnection;
--import org.xnio.ssl.XnioSsl;
--
--import io.undertow.UndertowLogger;
--import io.undertow.UndertowMessages;
--import io.undertow.client.ClientCallback;
--import io.undertow.client.ClientConnection;
--import io.undertow.client.ClientProvider;
--import io.undertow.protocols.spdy.SpdyChannel;
--import io.undertow.util.ImmediatePooled;
--
--/**
-- * Dedicated SPDY client that will never fall back to HTTPS
-- *
-- * @author Stuart Douglas
-- */
--public class SpdyClientProvider implements ClientProvider {
--
--    private static final String PROTOCOL_KEY = SpdyClientProvider.class.getName() + ".protocol";
--
--    private static final String SPDY_3 = "spdy/3";
--    private static final String SPDY_3_1 = "spdy/3.1";
--    private static final String HTTP_1_1 = "http/1.1";
--
--    private static final List<String> PROTOCOLS = Collections.unmodifiableList(Arrays.asList(SPDY_3_1, HTTP_1_1));
--
--    private static final Method ALPN_PUT_METHOD;
--
--    static {
--        Method npnPutMethod;
--        try {
--            Class<?> npnClass = Class.forName("org.eclipse.jetty.alpn.ALPN", false, SpdyClientProvider.class.getClassLoader());
--            npnPutMethod = npnClass.getDeclaredMethod("put", SSLEngine.class, Class.forName("org.eclipse.jetty.alpn.ALPN$Provider", false, SpdyClientProvider.class.getClassLoader()));
--        } catch (Exception e) {
--            UndertowLogger.CLIENT_LOGGER.jettyALPNNotFound("SPDY");
--            npnPutMethod = null;
--        }
--        ALPN_PUT_METHOD = npnPutMethod;
--    }
--
--
--    @Override
--    public void connect(final ClientCallback<ClientConnection> listener, final URI uri, final XnioWorker worker, final XnioSsl ssl, final ByteBufferPool bufferPool, final OptionMap options) {
--        connect(listener, null, uri, worker, ssl, bufferPool, options);
--    }
--
--    @Override
--    public void connect(final ClientCallback<ClientConnection> listener, final URI uri, final XnioIoThread ioThread, final XnioSsl ssl, final ByteBufferPool bufferPool, final OptionMap options) {
--        connect(listener, null, uri, ioThread, ssl, bufferPool, options);
--    }
--
--    @Override
--    public Set<String> handlesSchemes() {
--        return new HashSet<>(Arrays.asList(new String[]{"spdy", "spdy-plain"}));
--    }
--
--    @Override
--    public void connect(final ClientCallback<ClientConnection> listener, InetSocketAddress bindAddress, final URI uri, final XnioWorker worker, final XnioSsl ssl, final ByteBufferPool bufferPool, final OptionMap options) {
--        if(uri.getScheme().equals("spdy-plain")) {
--
--            if(bindAddress == null) {
--                worker.openStreamConnection(new InetSocketAddress(uri.getHost(), uri.getPort() == -1 ? 443 : uri.getPort()), createOpenListener(listener, uri, ssl, bufferPool, options), options).addNotifier(createNotifier(listener), null);
--            } else {
--                worker.openStreamConnection(bindAddress, new InetSocketAddress(uri.getHost(), uri.getPort() == -1 ? 443 : uri.getPort()), createOpenListener(listener, uri, ssl, bufferPool, options), null, options).addNotifier(createNotifier(listener), null);
--            }
--            return;
--        }
--
--
--        if(ALPN_PUT_METHOD == null) {
--            listener.failed(UndertowMessages.MESSAGES.jettyNPNNotAvailable());
--            return;
--        }
--        if (ssl == null) {
--            listener.failed(UndertowMessages.MESSAGES.sslWasNull());
--            return;
--        }
--        OptionMap tlsOptions = OptionMap.builder().addAll(options).set(Options.SSL_STARTTLS, true).getMap();
--        if(bindAddress == null) {
--            ssl.openSslConnection(worker, new InetSocketAddress(uri.getHost(), uri.getPort() == -1 ? 443 : uri.getPort()), createOpenListener(listener, uri, ssl, bufferPool, tlsOptions), tlsOptions).addNotifier(createNotifier(listener), null);
--        } else {
--            ssl.openSslConnection(worker, bindAddress, new InetSocketAddress(uri.getHost(), uri.getPort() == -1 ? 443 : uri.getPort()), createOpenListener(listener, uri, ssl, bufferPool, tlsOptions), tlsOptions).addNotifier(createNotifier(listener), null);
--        }
--
--    }
--
--    @Override
--    public void connect(final ClientCallback<ClientConnection> listener, InetSocketAddress bindAddress, final URI uri, final XnioIoThread ioThread, final XnioSsl ssl, final ByteBufferPool bufferPool, final OptionMap options) {
--        if(uri.getScheme().equals("spdy-plain")) {
--
--            if(bindAddress == null) {
--                ioThread.openStreamConnection(new InetSocketAddress(uri.getHost(), uri.getPort() == -1 ? 443 : uri.getPort()), createOpenListener(listener, uri, ssl, bufferPool, options), options).addNotifier(createNotifier(listener), null);
--            } else {
--                ioThread.openStreamConnection(bindAddress, new InetSocketAddress(uri.getHost(), uri.getPort() == -1 ? 443 : uri.getPort()), createOpenListener(listener, uri, ssl, bufferPool, options), null, options).addNotifier(createNotifier(listener), null);
--            }
--            return;
--        }
--
--        if(ALPN_PUT_METHOD == null) {
--            listener.failed(UndertowMessages.MESSAGES.jettyNPNNotAvailable());
--            return;
--        }
--        if (ssl == null) {
--            listener.failed(UndertowMessages.MESSAGES.sslWasNull());
--            return;
--        }
--        OptionMap tlsOptions = OptionMap.builder().addAll(options).set(Options.SSL_STARTTLS, true).getMap();
--        if(bindAddress == null) {
--            ssl.openSslConnection(ioThread, new InetSocketAddress(uri.getHost(), uri.getPort() == -1 ? 443 : uri.getPort()), createOpenListener(listener, uri, ssl, bufferPool, tlsOptions), tlsOptions).addNotifier(createNotifier(listener), null);
--        } else {
--            ssl.openSslConnection(ioThread, bindAddress, new InetSocketAddress(uri.getHost(), uri.getPort() == -1 ? 443 : uri.getPort()), createOpenListener(listener, uri, ssl, bufferPool, tlsOptions), tlsOptions).addNotifier(createNotifier(listener), null);
--        }
--
--    }
--
--    private IoFuture.Notifier<StreamConnection, Object> createNotifier(final ClientCallback<ClientConnection> listener) {
--        return new IoFuture.Notifier<StreamConnection, Object>() {
--            @Override
--            public void notify(IoFuture<? extends StreamConnection> ioFuture, Object o) {
--                if (ioFuture.getStatus() == IoFuture.Status.FAILED) {
--                    listener.failed(ioFuture.getException());
--                }
--            }
--        };
--    }
--
--    private ChannelListener<StreamConnection> createOpenListener(final ClientCallback<ClientConnection> listener, final URI uri, final XnioSsl ssl, final ByteBufferPool bufferPool, final OptionMap options) {
--        return new ChannelListener<StreamConnection>() {
--            @Override
--            public void handleEvent(StreamConnection connection) {
--                handleConnected(connection, listener, uri, ssl, bufferPool, options);
--            }
--        };
--    }
--
--    private void handleConnected(StreamConnection connection, final ClientCallback<ClientConnection> listener, URI uri, XnioSsl ssl, ByteBufferPool bufferPool, OptionMap options) {
--        if(connection instanceof SslConnection) {
--            handlePotentialSpdyConnection(connection, listener, bufferPool, options, new ChannelListener<SslConnection>() {
--                @Override
--                public void handleEvent(SslConnection channel) {
--                    listener.failed(UndertowMessages.MESSAGES.spdyNotSupported());
--                }
--            });
--        } else {
--            listener.completed(createSpdyChannel(connection, bufferPool, options));
--        }
--    }
--
--    public static boolean isEnabled() {
--        return ALPN_PUT_METHOD != null;
--    }
--
--    /**
--     * Not really part of the public API, but is used by the HTTP client to initiate a SPDY connection for HTTPS requests.
--     */
--    public static void handlePotentialSpdyConnection(final StreamConnection connection, final ClientCallback<ClientConnection> listener, final ByteBufferPool bufferPool, final OptionMap options, final ChannelListener<SslConnection> spdyFailedListener) {
--
--        final SslConnection sslConnection = (SslConnection) connection;
--        final SSLEngine sslEngine = UndertowXnioSsl.getSslEngine(sslConnection);
--
--        final SpdySelectionProvider spdySelectionProvider = new SpdySelectionProvider(sslEngine);
--        try {
--            ALPN_PUT_METHOD.invoke(null, sslEngine, spdySelectionProvider);
--        } catch (Exception e) {
--            spdyFailedListener.handleEvent(sslConnection);
--            return;
--        }
--
--        try {
--            sslConnection.startHandshake();
--            sslConnection.getSourceChannel().getReadSetter().set(new ChannelListener<StreamSourceChannel>() {
--                @Override
--                public void handleEvent(StreamSourceChannel channel) {
--
--                    if (spdySelectionProvider.selected != null) {
--                        if (spdySelectionProvider.selected.equals(HTTP_1_1)) {
--                            sslConnection.getSourceChannel().suspendReads();
--                            spdyFailedListener.handleEvent(sslConnection);
--                            return;
--                        } else if (spdySelectionProvider.selected.equals(SPDY_3) || spdySelectionProvider.selected.equals(SPDY_3_1)) {
--                            listener.completed(createSpdyChannel(connection, bufferPool, options));
--                        }
--                    } else {
--                        ByteBuffer buf = ByteBuffer.allocate(100);
--                        try {
--                            int read = channel.read(buf);
--                            if (read > 0) {
--                                buf.flip();
--                                PushBackStreamSourceConduit pb = new PushBackStreamSourceConduit(connection.getSourceChannel().getConduit());
--                                pb.pushBack(new ImmediatePooled<>(buf));
--                                connection.getSourceChannel().setConduit(pb);
--                            }
--                            if(spdySelectionProvider.selected == null) {
--                                spdySelectionProvider.selected = (String) sslEngine.getSession().getValue(PROTOCOL_KEY);
--                            }
--                            if ((spdySelectionProvider.selected == null && read > 0) || HTTP_1_1.equals(spdySelectionProvider.selected)) {
--                                sslConnection.getSourceChannel().suspendReads();
--                                spdyFailedListener.handleEvent(sslConnection);
--                                return;
--                            } else if (spdySelectionProvider.selected != null) {
--                                //we have spdy
--                                if (spdySelectionProvider.selected.equals(SPDY_3) || spdySelectionProvider.selected.equals(SPDY_3_1)) {
--                                    listener.completed(createSpdyChannel(connection, bufferPool, options));
--                                }
--                            }
--                        } catch (IOException e) {
--                            listener.failed(e);
--                        }
--                    }
--                }
--
--            });
--            sslConnection.getSourceChannel().resumeReads();
--        } catch (IOException e) {
--            listener.failed(e);
--        }
--
--
--    }
--
--    private static SpdyClientConnection createSpdyChannel(StreamConnection connection, ByteBufferPool bufferPool, OptionMap options) {
--
--        final ClientStatisticsImpl clientStatistics;
--        //first we set up statistics, if required
--        if (options.get(UndertowOptions.ENABLE_STATISTICS, false)) {
--            clientStatistics = new ClientStatisticsImpl();
--            connection.getSinkChannel().setConduit(new BytesSentStreamSinkConduit(connection.getSinkChannel().getConduit(), new ByteActivityCallback() {
--                @Override
--                public void activity(long bytes) {
--                    clientStatistics.written += bytes;
--                }
--            }));
--            connection.getSourceChannel().setConduit(new BytesReceivedStreamSourceConduit(connection.getSourceChannel().getConduit(), new ByteActivityCallback() {
--                @Override
--                public void activity(long bytes) {
--                    clientStatistics.read += bytes;
--                }
--            }));
--        } else {
--            clientStatistics = null;
--        }
--        SpdyChannel spdyChannel = new SpdyChannel(connection, bufferPool, null, new DefaultByteBufferPool(false, 8192), true, options);
--        return new SpdyClientConnection(spdyChannel, clientStatistics);
--    }
--
--    private static class SpdySelectionProvider implements ALPN.ClientProvider {
--        private String selected;
--        private final SSLEngine sslEngine;
--
--        private SpdySelectionProvider(SSLEngine sslEngine) {
--            this.sslEngine = sslEngine;
--        }
--
--        @Override
--        public boolean supports() {
--            return true;
--        }
--
--        @Override
--        public List<String> protocols() {
--            return PROTOCOLS;
--        }
--
--        @Override
--        public void unsupported() {
--            selected = HTTP_1_1;
--        }
--
--        @Override
--        public void selected(String s) {
--
--            ALPN.remove(sslEngine);
--            selected = s;
--            sslEngine.getHandshakeSession().putValue(PROTOCOL_KEY, selected);
--        }
--
--        private String getSelected() {
--            return selected;
--        }
--    }
--
--    private static class ClientStatisticsImpl implements ClientStatistics {
--        private long requestCount, read, written;
--        @Override
--        public long getRequests() {
--            return requestCount;
--        }
--
--        @Override
--        public long getRead() {
--            return read;
--        }
--
--        @Override
--        public long getWritten() {
--            return written;
--        }
--
--        @Override
--        public void reset() {
--            read = 0;
--            written = 0;
--            requestCount = 0;
--        }
--    }
--}
-diff --git a/core/src/main/java/io/undertow/server/protocol/http/AlpnOpenListener.java b/core/src/main/java/io/undertow/server/protocol/http/AlpnOpenListener.java
-deleted file mode 100644
-index 75c5a16..0000000
---- a/core/src/main/java/io/undertow/server/protocol/http/AlpnOpenListener.java
-+++ /dev/null
-@@ -1,279 +0,0 @@
--/*
-- * JBoss, Home of Professional Open Source.
-- * Copyright 2014 Red Hat, Inc., and individual contributors
-- * as indicated by the @author tags.
-- *
-- * Licensed under the Apache License, Version 2.0 (the "License");
-- * you may not use this file except in compliance with the License.
-- * You may obtain a copy of the License at
-- *
-- *     http://www.apache.org/licenses/LICENSE-2.0
-- *
-- *  Unless required by applicable law or agreed to in writing, software
-- *  distributed under the License is distributed on an "AS IS" BASIS,
-- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- *  See the License for the specific language governing permissions and
-- *  limitations under the License.
-- */
--
--package io.undertow.server.protocol.http;
--
--import java.io.IOException;
--import java.nio.ByteBuffer;
--import java.util.ArrayList;
--import java.util.HashMap;
--import java.util.List;
--import java.util.Map;
--
--import javax.net.ssl.SSLEngine;
--
--import io.undertow.UndertowLogger;
--import io.undertow.UndertowMessages;
--import io.undertow.UndertowOptions;
--import io.undertow.protocols.ssl.UndertowXnioSsl;
--import io.undertow.server.AggregateConnectorStatistics;
--import io.undertow.server.ConnectorStatistics;
--import io.undertow.server.DelegateOpenListener;
--import io.undertow.server.HttpHandler;
--import io.undertow.server.OpenListener;
--import io.undertow.server.XnioByteBufferPool;
--import org.eclipse.jetty.alpn.ALPN;
--import org.xnio.ChannelListener;
--import org.xnio.IoUtils;
--import org.xnio.OptionMap;
--import io.undertow.connector.ByteBufferPool;
--import io.undertow.connector.PooledByteBuffer;
--import org.xnio.Pool;
--import org.xnio.StreamConnection;
--import org.xnio.channels.StreamSourceChannel;
--import org.xnio.ssl.SslConnection;
--
--/**
-- * Open listener adaptor for ALPN connections
-- *
-- * Not a proper open listener as such, but more a mechanism for selecting between them
-- *
-- * @author Stuart Douglas
-- */
--public class AlpnOpenListener implements ChannelListener<StreamConnection>, OpenListener {
--
--    private static final String PROTOCOL_KEY = AlpnOpenListener.class.getName() + ".protocol";
--
--    private final ByteBufferPool bufferPool;
--
--    private final Map<String, ListenerEntry> listeners = new HashMap<>();
--    private final String fallbackProtocol;
--    private volatile HttpHandler rootHandler;
--    private volatile OptionMap undertowOptions;
--    private volatile boolean statisticsEnabled;
--
--    public AlpnOpenListener(Pool<ByteBuffer> bufferPool, OptionMap undertowOptions, DelegateOpenListener httpListener) {
--        this(bufferPool, undertowOptions, "http/1.1", httpListener);
--    }
--
--    public AlpnOpenListener(Pool<ByteBuffer> bufferPool,  OptionMap undertowOptions) {
--        this(bufferPool, undertowOptions, null, null);
--    }
--
--    public AlpnOpenListener(Pool<ByteBuffer> bufferPool, OptionMap undertowOptions, String fallbackProtocol, DelegateOpenListener fallbackListener) {
--        this(new XnioByteBufferPool(bufferPool), undertowOptions, fallbackProtocol, fallbackListener);
--    }
--
--    public AlpnOpenListener(ByteBufferPool bufferPool, OptionMap undertowOptions, DelegateOpenListener httpListener) {
--        this(bufferPool, undertowOptions, "http/1.1", httpListener);
--    }
--
--    public AlpnOpenListener(ByteBufferPool bufferPool) {
--        this(bufferPool, OptionMap.EMPTY, null, null);
--    }
--    public AlpnOpenListener(ByteBufferPool bufferPool,  OptionMap undertowOptions) {
--        this(bufferPool, undertowOptions, null, null);
--    }
--
--    public AlpnOpenListener(ByteBufferPool bufferPool, OptionMap undertowOptions, String fallbackProtocol, DelegateOpenListener fallbackListener) {
--        this.bufferPool = bufferPool;
--        this.fallbackProtocol = fallbackProtocol;
--        if(fallbackProtocol != null && fallbackListener != null) {
--            addProtocol(fallbackProtocol, fallbackListener, 0);
--        }
--        statisticsEnabled = undertowOptions.get(UndertowOptions.ENABLE_CONNECTOR_STATISTICS, false);
--        this.undertowOptions = undertowOptions;
--    }
--
--
--    @Override
--    public HttpHandler getRootHandler() {
--        return rootHandler;
--    }
--
--    @Override
--    public void setRootHandler(HttpHandler rootHandler) {
--        this.rootHandler = rootHandler;
--        for(Map.Entry<String, ListenerEntry> delegate : listeners.entrySet()) {
--            delegate.getValue().listener.setRootHandler(rootHandler);
--        }
--    }
--
--    @Override
--    public OptionMap getUndertowOptions() {
--        return undertowOptions;
--    }
--
--    @Override
--    public void setUndertowOptions(OptionMap undertowOptions) {
--        if (undertowOptions == null) {
--            throw UndertowMessages.MESSAGES.argumentCannotBeNull("undertowOptions");
--        }
--        this.undertowOptions = undertowOptions;
--        for(Map.Entry<String, ListenerEntry> delegate : listeners.entrySet()) {
--            delegate.getValue().listener.setRootHandler(rootHandler);
--        }
--        statisticsEnabled = undertowOptions.get(UndertowOptions.ENABLE_CONNECTOR_STATISTICS, false);
--    }
--
--    @Override
--    public ByteBufferPool getBufferPool() {
--        return bufferPool;
--    }
--
--    @Override
--    public ConnectorStatistics getConnectorStatistics() {
--        if(statisticsEnabled) {
--            List<ConnectorStatistics> stats = new ArrayList<>();
--            for(Map.Entry<String, ListenerEntry> l : listeners.entrySet()) {
--                ConnectorStatistics c = l.getValue().listener.getConnectorStatistics();
--                if(c != null) {
--                    stats.add(c);
--                }
--            }
--            return new AggregateConnectorStatistics(stats.toArray(new ConnectorStatistics[stats.size()]));
--        }
--        return null;
--    }
--
--    private static class ListenerEntry {
--        DelegateOpenListener listener;
--        int weight;
--
--        public ListenerEntry(DelegateOpenListener listener, int weight) {
--            this.listener = listener;
--            this.weight = weight;
--        }
--    }
--
--    public AlpnOpenListener addProtocol(String name, DelegateOpenListener listener, int weight) {
--        listeners.put(name, new ListenerEntry(listener, weight));
--        return this;
--    }
--
--    public void handleEvent(final StreamConnection channel) {
--        if (UndertowLogger.REQUEST_LOGGER.isTraceEnabled()) {
--            UndertowLogger.REQUEST_LOGGER.tracef("Opened connection with %s", channel.getPeerAddress());
--        }
--        final AlpnConnectionListener potentialConnection = new AlpnConnectionListener(channel);
--        channel.getSourceChannel().setReadListener(potentialConnection);
--        final SSLEngine sslEngine = UndertowXnioSsl.getSslEngine((SslConnection) channel);
--        ALPN.put(sslEngine, new ALPN.ServerProvider() {
--            @Override
--            public void unsupported() {
--                final String existing = (String) sslEngine.getHandshakeSession().getValue(PROTOCOL_KEY);
--                if (existing == null || !listeners.containsKey(existing)) {
--                    if(fallbackProtocol == null) {
--                        UndertowLogger.REQUEST_IO_LOGGER.noALPNFallback(channel.getPeerAddress());
--                        IoUtils.safeClose(channel);
--                    }
--                    potentialConnection.selected = fallbackProtocol;
--                } else {
--                    potentialConnection.selected = existing;
--                }
--            }
--
--            @Override
--            public String select(List<String> strings) {
--
--                ALPN.remove(sslEngine);
--
--                String match = null;
--                int lastWeight = -1;
--                for (String s : strings) {
--                    ListenerEntry listener = listeners.get(s);
--                    if (listener != null && listener.weight > lastWeight) {
--                        match = s;
--                        lastWeight = listener.weight;
--                    }
--                }
--
--                if (match != null) {
--                    sslEngine.getHandshakeSession().putValue(PROTOCOL_KEY, match);
--                    return potentialConnection.selected = match;
--                }
--
--                if(fallbackProtocol == null) {
--                    UndertowLogger.REQUEST_IO_LOGGER.noALPNFallback(channel.getPeerAddress());
--                    IoUtils.safeClose(channel);
--                    return null;
--                }
--                sslEngine.getHandshakeSession().putValue(PROTOCOL_KEY, fallbackProtocol);
--                potentialConnection.selected = fallbackProtocol;
--                return fallbackProtocol;
--            }
--        });
--        potentialConnection.handleEvent(channel.getSourceChannel());
--
--    }
--
--    private class AlpnConnectionListener implements ChannelListener<StreamSourceChannel> {
--        private String selected;
--        private final StreamConnection channel;
--
--        private AlpnConnectionListener(StreamConnection channel) {
--            this.channel = channel;
--        }
--
--        @Override
--        public void handleEvent(StreamSourceChannel source) {
--            PooledByteBuffer buffer = bufferPool.allocate();
--            boolean free = true;
--            try {
--                while (true) {
--                    int res = channel.getSourceChannel().read(buffer.getBuffer());
--                    if (res == -1) {
--                        IoUtils.safeClose(channel);
--                        return;
--                    }
--                    buffer.getBuffer().flip();
--                    if(selected != null) {
--                        DelegateOpenListener listener = listeners.get(selected).listener;
--                        source.getReadSetter().set(null);
--                        listener.handleEvent(channel, buffer);
--                        free = false;
--                        return;
--                    } else if(res > 0) {
--                        if(fallbackProtocol == null) {
--                            UndertowLogger.REQUEST_IO_LOGGER.noALPNFallback(channel.getPeerAddress());
--                            IoUtils.safeClose(channel);
--                            return;
--                        }
--                        DelegateOpenListener listener = listeners.get(fallbackProtocol).listener;
--                        source.getReadSetter().set(null);
--                        listener.handleEvent(channel, buffer);
--                        free = false;
--                        return;
--                    } else if (res == 0) {
--                        channel.getSourceChannel().resumeReads();
--                        return;
--                    }
--                }
--
--            } catch (IOException e) {
--                UndertowLogger.REQUEST_IO_LOGGER.ioException(e);
--                IoUtils.safeClose(channel);
--            } finally {
--                if (free) {
--                    buffer.close();
--                }
--            }
--        }
--    }
--
--}
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index b8238fe..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1 +0,0 @@
-alpn-not-supported.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/undertow.git



More information about the pkg-java-commits mailing list