diff --git a/org/mozilla/jss/ssl/javax/JSSParameters.java b/org/mozilla/jss/ssl/javax/JSSParameters.java index a07b730cc..b7c9a7fc4 100644 --- a/org/mozilla/jss/ssl/javax/JSSParameters.java +++ b/org/mozilla/jss/ssl/javax/JSSParameters.java @@ -3,6 +3,7 @@ import javax.net.ssl.*; import java.util.*; +import org.mozilla.jss.util.JDKCompat; import org.mozilla.jss.ssl.*; /** @@ -55,6 +56,11 @@ public JSSParameters(SSLParameters downcast) { if (downcast.getNeedClientAuth()) { setNeedClientAuth(downcast.getNeedClientAuth()); } + + String[] alpn = JDKCompat.SSLParametersHelper.getApplicationProtocols(downcast); + if (alpn != null) { + setApplicationProtocols(alpn); + } } public JSSParameters(String[] cipherSuites) { diff --git a/org/mozilla/jss/util/JDKCompat.java b/org/mozilla/jss/util/JDKCompat.java new file mode 100644 index 000000000..c3d9eab1a --- /dev/null +++ b/org/mozilla/jss/util/JDKCompat.java @@ -0,0 +1,21 @@ +package org.mozilla.jss.util; + +import java.lang.reflect.Method; + +import javax.net.ssl.SSLParameters; + +public class JDKCompat { + public static class SSLParametersHelper { + public static String[] getApplicationProtocols(SSLParameters inst) { + try { + Method getter = inst.getClass().getMethod("getApplicationProtocols"); + Object result = getter.invoke(inst); + if (result instanceof String[]) { + return (String[]) result; + } + } catch (Throwable t) {} + + return null; + } + } +}