--- /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