[undertow] 02/03: Add ALPN.patch

Markus Koschany apo-guest at moszumanska.debian.org
Sun Nov 1 17:38:35 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 90d66d661f1c7167792ddc5500c4ca9693454c1c
Author: Markus Koschany <apo at debian.org>
Date:   Sun Nov 1 17:54:55 2015 +0100

    Add ALPN.patch
---
 debian/copyright          |   4 +
 debian/patches/ALPN.patch | 270 ++++++++++++++++++++++++++++++++++++++++++++++
 debian/patches/series     |   1 +
 3 files changed, 275 insertions(+)

diff --git a/debian/copyright b/debian/copyright
index 0d8b2eb..073fc96 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -12,6 +12,10 @@ Files: debian/*
 Copyright: 2015, Markus Koschany <apo at debian.org>
 License: Apache-2.0
 
+Files: debian/patches/ALPN.patch
+Copyright: 1995-2014, Mort Bay Consulting Pty. Ltd.
+License: Apache-2.0
+
 License: Apache-2.0
  On Debian systems, the full text of the Apache-2.0 license
  can be found in the file '/usr/share/common-licenses/Apache-2.0'
diff --git a/debian/patches/ALPN.patch b/debian/patches/ALPN.patch
new file mode 100644
index 0000000..5a8f392
--- /dev/null
+++ b/debian/patches/ALPN.patch
@@ -0,0 +1,270 @@
+From: Markus Koschany <apo at debian.org>
+Date: Sun, 1 Nov 2015 17:54:39 +0100
+Subject: ALPN
+
+Provide the ALPN API with the undertow source package.
+
+Forwarded: not-needed
+---
+ .../src/main/java/org/eclipse/jetty/alpn/ALPN.java | 252 +++++++++++++++++++++
+ 1 file changed, 252 insertions(+)
+ create mode 100644 core/src/main/java/org/eclipse/jetty/alpn/ALPN.java
+
+diff --git a/core/src/main/java/org/eclipse/jetty/alpn/ALPN.java b/core/src/main/java/org/eclipse/jetty/alpn/ALPN.java
+new file mode 100644
+index 0000000..6a70617
+--- /dev/null
++++ b/core/src/main/java/org/eclipse/jetty/alpn/ALPN.java
+@@ -0,0 +1,252 @@
++//
++//  ========================================================================
++//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
++//  ------------------------------------------------------------------------
++//  All rights reserved. This program and the accompanying materials
++//  are made available under the terms of the Eclipse Public License v1.0
++//  and Apache License v2.0 which accompanies this distribution.
++//
++//      The Eclipse Public License is available at
++//      http://www.eclipse.org/legal/epl-v10.html
++//
++//      The Apache License v2.0 is available at
++//      http://www.opensource.org/licenses/apache2.0.php
++//
++//  You may elect to redistribute this code under either of these licenses.
++//  ========================================================================
++//
++
++package org.eclipse.jetty.alpn;
++
++import java.util.Collections;
++import java.util.HashMap;
++import java.util.List;
++import java.util.Map;
++import javax.net.ssl.SSLEngine;
++import javax.net.ssl.SSLSocket;
++
++/**
++ * {@link ALPN} provides an API to applications that want to make use of the
++ * <a href="http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg">Application Layer Protocol Negotiation</a>.
++ * <p/>
++ * The ALPN extension is only available when using the TLS protocol, therefore applications must
++ * ensure that the TLS protocol is used:
++ * <pre>
++ * SSLContext context = SSLContext.getInstance("TLSv1");
++ * </pre>
++ * Refer to the
++ * <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#SSLContext">list
++ * of standard SSLContext protocol names</a> for further information on TLS protocol versions supported.
++ * <p/>
++ * Applications must register instances of either {@link SSLSocket} or {@link SSLEngine} with a
++ * {@link ClientProvider} or with a {@link ServerProvider}, depending whether they are on client or
++ * server side.
++ * <p/>
++ * The ALPN implementation will invoke the provider callbacks to allow applications to interact
++ * with the negotiation of the protocol.
++ * <p/>
++ * Client side typical usage:
++ * <pre>
++ * SSLSocket sslSocket = ...;
++ * ALPN.put(sslSocket, new ALPN.ClientProvider()
++ * {
++ *     @Override
++ *     public boolean supports()
++ *     {
++ *         return true;
++ *     }
++ *
++ *     @Override
++ *     public List<String> protocols()
++ *     {
++ *         return Arrays.asList("spdy/3", "http/1.1");
++ *     }
++ *
++ *     @Override
++ *     public void unsupported()
++ *     {
++ *     }
++ *
++ *     @Override
++ *     public void selected(String protocol)
++ *     {
++ *         System.out.println("Selected protocol: " + protocol);
++ *     }
++ *  });
++ * </pre>
++ * Server side typical usage:
++ * <pre>
++ * SSLSocket sslSocket = ...;
++ * ALPN.put(sslSocket, new ALPN.ServerProvider()
++ * {
++ *     @Override
++ *     public void unsupported()
++ *     {
++ *     }
++ *
++ *     @Override
++ *     public String select(List<String> protocols)
++ *     {
++ *         return protocols.get(0);
++ *     }
++ *  });
++ * </pre>
++ * Applications must ensure to deregister {@link SSLSocket} or {@link SSLEngine} instances,
++ * because they are kept in a global map.
++ * Deregistration should typically happen when the application detects the end of the protocol
++ * negotiation, and/or when the associated socket connection is closed.
++ * <p/>
++ * In order to help application development, you can set the {@link ALPN#debug} field
++ * to {@code true} to have debug code printed to {@link System#err}.
++ */
++public class ALPN
++{
++    /**
++     * Flag that enables printing of debug statements to {@link System#err}.
++     */
++    public static boolean debug = false;
++
++    private static Map<Object, Provider> objects = Collections.synchronizedMap(new HashMap<Object, Provider>());
++
++    private ALPN()
++    {
++    }
++
++    /**
++     * Registers a SSLSocket with a provider.
++     *
++     * @param socket   the socket to register with the provider
++     * @param provider the provider to register with the socket
++     * @see #remove(SSLSocket)
++     */
++    public static void put(SSLSocket socket, Provider provider)
++    {
++        objects.put(socket, provider);
++    }
++
++    /**
++     * @param socket a socket registered with {@link #put(SSLSocket, Provider)}
++     * @return the provider registered with the given socket
++     */
++    public static Provider get(SSLSocket socket)
++    {
++        return objects.get(socket);
++    }
++
++    /**
++     * Unregisters the given SSLSocket.
++     *
++     * @param socket the socket to unregister
++     * @return the provider registered with the socket
++     * @see #put(SSLSocket, Provider)
++     */
++    public static Provider remove(SSLSocket socket)
++    {
++        return objects.remove(socket);
++    }
++
++    /**
++     * Registers a SSLEngine with a provider.
++     *
++     * @param engine   the engine to register with the provider
++     * @param provider the provider to register with the engine
++     * @see #remove(SSLEngine)
++     */
++    public static void put(SSLEngine engine, Provider provider)
++    {
++        objects.put(engine, provider);
++    }
++
++    /**
++     * @param engine an engine registered with {@link #put(SSLEngine, Provider)}
++     * @return the provider registered with the given engine
++     */
++    public static Provider get(SSLEngine engine)
++    {
++        return objects.get(engine);
++    }
++
++    /**
++     * Unregisters the given SSLEngine.
++     *
++     * @param engine the engine to unregister
++     * @return the provider registered with the engine
++     * @see #put(SSLEngine, Provider)
++     */
++    public static Provider remove(SSLEngine engine)
++    {
++        return objects.remove(engine);
++    }
++
++    /**
++     * Base, empty, interface for providers.
++     */
++    public interface Provider
++    {
++    }
++
++    /**
++     * The client-side provider interface that applications must
++     * implement to interact with the negotiation of the protocol.
++     */
++    public interface ClientProvider extends Provider
++    {
++        /**
++         * Callback invoked to let the implementation know whether an
++         * ALPN extension should be added to a ClientHello TLS message.
++         *
++         * @return true to add the ALPN extension, false otherwise
++         */
++        public boolean supports();
++
++        /**
++         * Callback invoked to let the implementation know the list
++         * of protocols that should be added to the ALPN extension in
++         * a ClientHello TLS message.
++         * <p/>
++         * This callback is invoked only if the {@link #supports()}
++         * returned true.
++         *
++         * @return the list of protocols supported by the client;
++         * if null or empty, the ALPN extension is not sent
++         */
++        public List<String> protocols();
++
++        /**
++         * Callback invoked to let the client application know that
++         * the server does not support ALPN.
++         */
++        public void unsupported();
++
++        /**
++         * Callback invoked to let the client application know
++         * the protocol chosen by the server.
++         *
++         * @param protocol the protocol selected by the server
++         */
++        public void selected(String protocol);
++    }
++
++    /**
++     * The server-side provider interface that applications must
++     * implement to interact with the negotiation of the protocol.
++     */
++    public interface ServerProvider extends Provider
++    {
++        /**
++         * Callback invoked to let the server application know that
++         * the client does not support ALPN.
++         */
++        public void unsupported();
++
++        /**
++         * Callback invoked to let the server application select
++         * a protocol among the ones sent by the client.
++         *
++         * @param protocols the protocols sent by the client
++         * @return the protocol selected by the server application;
++         * must not be null
++         */
++        public String select(List<String> protocols);
++    }
++}
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..9b2f906
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+ALPN.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