diff -r ed8eca7fad9a -r 84d62c76469e doc/asmack-beem/beem_patches/10-custom-sslcontext.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/asmack-beem/beem_patches/10-custom-sslcontext.patch Mon Aug 22 22:35:57 2011 +0200 @@ -0,0 +1,84 @@ +Index: org/jivesoftware/smack/XMPPConnection.java +=================================================================== +--- org/jivesoftware/smack/XMPPConnection.java (révision 11644) ++++ org/jivesoftware/smack/XMPPConnection.java (copie de travail) +@@ -758,14 +758,14 @@ + * @throws Exception if an exception occurs. + */ + void proceedTLSReceived() throws Exception { +- SSLContext context = SSLContext.getInstance("TLS"); ++ SSLContext context = this.config.getCustomSSLContext(); + KeyStore ks = null; + KeyManager[] kms = null; + PasswordCallback pcb = null; + + if(config.getCallbackHandler() == null) { + ks = null; +- } else { ++ } else if (context == null) { + //System.out.println("Keystore type: "+configuration.getKeystoreType()); + if(config.getKeystoreType().equals("NONE")) { + ks = null; +@@ -821,10 +821,12 @@ + } + + // Verify certificate presented by the server +- context.init(kms, +- new javax.net.ssl.TrustManager[]{new ServerTrustManager(getServiceName(), config)}, +- //new javax.net.ssl.TrustManager[]{new OpenTrustManager()}, +- new java.security.SecureRandom()); ++ if (context == null) { ++ context = SSLContext.getInstance("TLS"); ++ context.init(kms, ++ new javax.net.ssl.TrustManager[]{new ServerTrustManager(getServiceName(), config)}, ++ new java.security.SecureRandom()); ++ } + Socket plain = socket; + // Secure the plain connection + socket = context.getSocketFactory().createSocket(plain, +Index: org/jivesoftware/smack/ConnectionConfiguration.java +=================================================================== +--- org/jivesoftware/smack/ConnectionConfiguration.java (révision 11644) ++++ org/jivesoftware/smack/ConnectionConfiguration.java (copie de travail) +@@ -20,6 +20,7 @@ + + package org.jivesoftware.smack; + ++import javax.net.ssl.SSLContext; + import org.jivesoftware.smack.proxy.ProxyInfo; + import org.jivesoftware.smack.util.DNSUtil; + +@@ -59,6 +60,7 @@ + private boolean selfSignedCertificateEnabled = false; + private boolean expiredCertificatesCheckEnabled = false; + private boolean notMatchingDomainCheckEnabled = false; ++ private SSLContext customSSLContext; + + private boolean compressionEnabled = false; + +@@ -487,6 +489,25 @@ + } + + /** ++ * Gets the custom SSLContext for SSL sockets. This is null by default. ++ * ++ * @return the SSLContext previously set with setCustomSSLContext() or null. ++ */ ++ public SSLContext getCustomSSLContext() { ++ return this.customSSLContext; ++ } ++ ++ /** ++ * Sets a custom SSLContext for creating SSL sockets. A custom Context causes all other ++ * SSL/TLS realted settings to be ignored. ++ * ++ * @param context the custom SSLContext for new sockets; null to reset default behaviour. ++ */ ++ public void setCustomSSLContext(SSLContext context) { ++ this.customSSLContext = context; ++ } ++ ++ /** + * Returns true if the connection is going to use stream compression. Stream compression + * will be requested after TLS was established (if TLS was enabled) and only if the server + * offered stream compression. With stream compression network traffic can be reduced