Am 14. August 2016 12:41:14 MESZ, schrieb sebb <seb...@gmail.com>: >On 31 July 2016 at 21:07, <pmoua...@apache.org> wrote: >> Author: pmouawad >> Date: Sun Jul 31 20:07:10 2016 >> New Revision: 1754681 >> >> URL: http://svn.apache.org/viewvc?rev=1754681&view=rev >> Log: >> Bug 59902 - Https handshake failure when setting >httpclient.socket.https.cps property >> Bugzilla Id: 59902 >> >> Added: >> jmeter/trunk/src/core/org/apache/jmeter/util/HostNameSetter.java > (with props) >> Modified: >> jmeter/trunk/src/core/org/apache/jmeter/util/SlowSSLSocket.java >> >jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/JMeterClientConnectionOperator.java >> jmeter/trunk/xdocs/changes.xml >> >> Added: >jmeter/trunk/src/core/org/apache/jmeter/util/HostNameSetter.java >> URL: >http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/util/HostNameSetter.java?rev=1754681&view=auto >> >============================================================================== >> --- jmeter/trunk/src/core/org/apache/jmeter/util/HostNameSetter.java >(added) >> +++ jmeter/trunk/src/core/org/apache/jmeter/util/HostNameSetter.java >Sun Jul 31 20:07:10 2016 >> @@ -0,0 +1,84 @@ >> +package org.apache.jmeter.util; >> + >> +import java.lang.ref.WeakReference; >> +import java.lang.reflect.InvocationTargetException; >> +import java.lang.reflect.Method; >> +import java.util.concurrent.atomic.AtomicReference; >> + >> +import javax.net.ssl.SSLSocket; >> + >> +/** >> + * Uses the underlying implementation to support Server Name >Indication (SNI). >> + * @author Michael Locher <cmb...@gmail.com> > >@author tags in code are deprecated by the ASF; they are only accurate >at initial commit, and the ASF is about community code development. > >Authors can be credited elsewhere, e.g. in changes.xml, but strictly >speaking the author should be asked to agree to this change, as it >affects their original contribution. > >We should not commit new code with @author entries. > >Nor should code be committed without the AL header. > >In this case it's not clear where the code originated, as it does not >appear to be attached to the Bugzilla.
I thought it was just the extracted inner class, that got removed by this commit, wasn't it? Regards, Felix > >> + * @see <a >href="https://issues.apache.org/jira/browse/HTTPCLIENT-1119">HTTPCLIENT-1119</a> >> + */ >> +public class HostNameSetter { >> + >> + private static final AtomicReference<HostNameSetter> CURRENT = >new AtomicReference<>(); >> + >> + private final WeakReference<Class<?>> cls; >> + private final WeakReference<Method> setter; >> + >> + private HostNameSetter(Class<?> clazz, Method setter) { >> + this.cls = new WeakReference<Class<?>>(clazz); >> + this.setter = setter == null ? null : new >WeakReference<>(setter); >> + } >> + >> + private static Method init(Class<?> cls) { >> + Method s = null; >> + try { >> + s = cls.getMethod("setHost", String.class); >> + } catch (Exception e) { >> + initFail(e); >> + } >> + CURRENT.set(new HostNameSetter(cls, s)); >> + return s; >> + } >> + >> + >> + >> + private static void initFail(Exception e) { >> + // ignore >> + } >> + >> + private Method reuse(Class<?> cls) { >> + final boolean wrongClass = this.cls.get() != cls; >> + if (wrongClass) { >> + return init(cls); >> + } >> + >> + final boolean setterNotSupported = this.setter == null; >> + if (setterNotSupported) { >> + return null; >> + } >> + >> + final Method s = setter.get(); >> + final boolean setterLost = s == null; >> + return setterLost ? init(cls) : s; >> + } >> + >> + /** >> + * Invokes the {@code #setName(String)} method if one is >present. >> + * >> + * @param hostname the name to set >> + * @param sslsock the socket >> + */ >> + public static void setServerNameIndication(String hostname, >SSLSocket sslsock) { >> + final Class<?> cls = sslsock.getClass(); >> + final HostNameSetter current = CURRENT.get(); >> + final Method setter = (current == null) ? init(cls) : >current.reuse(cls); >> + if (setter != null) { >> + try { >> + setter.invoke(sslsock, hostname); >> + } catch (IllegalArgumentException >> + | IllegalAccessException >> + | InvocationTargetException e) { >> + setServerNameIndicationFail(e); >> + } >> + } >> + } >> + >> + private static void setServerNameIndicationFail(Exception e) { >> + // ignore >> + } >> +} >> \ No newline at end of file >> >> Propchange: >jmeter/trunk/src/core/org/apache/jmeter/util/HostNameSetter.java >> >------------------------------------------------------------------------------ >> svn:mime-type = text/plain >> >> Modified: >jmeter/trunk/src/core/org/apache/jmeter/util/SlowSSLSocket.java >> URL: >http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/util/SlowSSLSocket.java?rev=1754681&r1=1754680&r2=1754681&view=diff >> >============================================================================== >> --- jmeter/trunk/src/core/org/apache/jmeter/util/SlowSSLSocket.java >(original) >> +++ jmeter/trunk/src/core/org/apache/jmeter/util/SlowSSLSocket.java >Sun Jul 31 20:07:10 2016 >> @@ -22,6 +22,7 @@ import java.io.IOException; >> import java.io.InputStream; >> import java.io.OutputStream; >> import java.net.InetAddress; >> +import java.net.InetSocketAddress; >> import java.net.SocketAddress; >> import java.net.SocketException; >> import java.nio.channels.SocketChannel; >> @@ -174,6 +175,12 @@ public class SlowSSLSocket extends SSLSo >> >> @Override >> public void connect(SocketAddress endpoint, int timeout) throws >IOException { >> + // see Bug 59902 >> + if(endpoint instanceof InetSocketAddress) { >> + InetSocketAddress address = >> + (InetSocketAddress) endpoint; >> + >HostNameSetter.setServerNameIndication(address.getHostString(), >sslSock); >> + } >> sslSock.connect(endpoint, timeout); >> } >> >> >> Modified: >jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/JMeterClientConnectionOperator.java >> URL: >http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/JMeterClientConnectionOperator.java?rev=1754681&r1=1754680&r2=1754681&view=diff >> >============================================================================== >> --- >jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/JMeterClientConnectionOperator.java >(original) >> +++ >jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/JMeterClientConnectionOperator.java >Sun Jul 31 20:07:10 2016 >> @@ -25,11 +25,7 @@ >> package org.apache.jmeter.protocol.http.sampler; >> >> import java.io.IOException; >> -import java.lang.ref.WeakReference; >> -import java.lang.reflect.InvocationTargetException; >> -import java.lang.reflect.Method; >> import java.net.Socket; >> -import java.util.concurrent.atomic.AtomicReference; >> >> import javax.net.ssl.SSLSocket; >> >> @@ -39,6 +35,7 @@ import org.apache.http.conn.OperatedClie >> import org.apache.http.conn.scheme.SchemeRegistry; >> import org.apache.http.impl.conn.DefaultClientConnection; >> import org.apache.http.impl.conn.DefaultClientConnectionOperator; >> +import org.apache.jmeter.util.HostNameSetter; >> >> /** >> * Custom implementation of {@link DefaultClientConnectionOperator} >to fix SNI Issue >> @@ -90,78 +87,4 @@ public class JMeterClientConnectionOpera >> } >> } >> } >> - >> - /** >> - * Uses the underlying implementation to support Server Name >Indication (SNI). >> - * @author Michael Locher <cmb...@gmail.com> >> - * @see <a >href="https://issues.apache.org/jira/browse/HTTPCLIENT-1119">HTTPCLIENT-1119</a> >> - */ >> - private static class HostNameSetter { >> - >> - private static final AtomicReference<HostNameSetter> CURRENT >= new AtomicReference<>(); >> - >> - private final WeakReference<Class<?>> cls; >> - private final WeakReference<Method> setter; >> - >> - private HostNameSetter(Class<?> clazz, Method setter) { >> - this.cls = new WeakReference<Class<?>>(clazz); >> - this.setter = setter == null ? null : new >WeakReference<>(setter); >> - } >> - >> - private static Method init(Class<?> cls) { >> - Method s = null; >> - try { >> - s = cls.getMethod("setHost", String.class); >> - } catch (SecurityException | NoSuchMethodException e) { >> - initFail(e); >> - } >> - CURRENT.set(new HostNameSetter(cls, s)); >> - return s; >> - } >> - >> - private static void initFail(Exception e) { >> - // ignore >> - } >> - >> - private Method reuse(Class<?> cls) { >> - final boolean wrongClass = this.cls.get() != cls; >> - if (wrongClass) { >> - return init(cls); >> - } >> - >> - final boolean setterNotSupported = this.setter == null; >> - if (setterNotSupported) { >> - return null; >> - } >> - >> - final Method s = setter.get(); >> - final boolean setterLost = s == null; >> - return setterLost ? init(cls) : s; >> - } >> - >> - /** >> - * Invokes the {@code #setName(String)} method if one is >present. >> - * >> - * @param hostname the name to set >> - * @param sslsock the socket >> - */ >> - public static void setServerNameIndication(String hostname, >SSLSocket sslsock) { >> - final Class<?> cls = sslsock.getClass(); >> - final HostNameSetter current = CURRENT.get(); >> - final Method setter = (current == null) ? init(cls) : >current.reuse(cls); >> - if (setter != null) { >> - try { >> - setter.invoke(sslsock, hostname); >> - } catch (IllegalArgumentException >> - | IllegalAccessException >> - | InvocationTargetException e) { >> - setServerNameIndicationFail(e); >> - } >> - } >> - } >> - >> - private static void setServerNameIndicationFail(Exception e) >{ >> - // ignore >> - } >> - } >> } >> >> Modified: jmeter/trunk/xdocs/changes.xml >> URL: >http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1754681&r1=1754680&r2=1754681&view=diff >> >============================================================================== >> --- jmeter/trunk/xdocs/changes.xml [utf-8] (original) >> +++ jmeter/trunk/xdocs/changes.xml [utf-8] Sun Jul 31 20:07:10 2016 >> @@ -138,6 +138,7 @@ Summary >> <h3>HTTP Samplers and Test Script Recorder</h3> >> <ul> >> <li><bug>58888</bug>HTTP(S) Test Script Recorder (ProxyControl) >does not add TestElement's returned by SamplerCreator createChildren >()</li> >> + <li><bug>59902</bug>Https handshake failure when setting ><code>httpclient.socket.https.cps</code> property</li> >> </ul> >> >> <h3>Other Samplers</h3> >> >>