Switch to Florian Shmauss maintained version of asmack.
authorDa Risk <da_risk@beem-project.com>
Wed, 31 Oct 2012 23:11:14 +0100
changeset 1005 4c7edc276676
parent 1004 aa8c2dac6d02
child 1006 246d10f27fc6
Switch to Florian Shmauss maintained version of asmack. See doc/asmack-beem/README.txt for more information on how to build the asmack jar. The upstream asmack has a better implementation of XEP-0115 EntityCapabilities. So this commit remove the specific Beem implementation of this XEP and switch to the asmack one.
doc/asmack-beem/README.txt
doc/asmack-beem/beem_patches/10-custom-sslcontext.patch
doc/asmack-beem/beem_patches/50-fix-chatmanager.patch
doc/asmack-beem/beem_patches/50-fix-sasl-incorrect-encoding.patch
doc/asmack-beem/beem_patches/50-public-info-features.patch
libs/asmack-android-16-beem.jar
libs/asmack-android-7-beem.jar
project.properties
src/com/beem/project/beem/BeemService.java
src/com/beem/project/beem/service/BeemCapsManager.java
src/com/beem/project/beem/service/XmppConnectionAdapter.java
src/com/beem/project/beem/smack/caps/CapsExtension.java
src/com/beem/project/beem/smack/caps/CapsManager.java
src/com/beem/project/beem/smack/caps/CapsProvider.java
src/com/beem/project/beem/smack/caps/package-info.java
--- a/doc/asmack-beem/README.txt	Sun Oct 28 14:26:54 2012 +0100
+++ b/doc/asmack-beem/README.txt	Wed Oct 31 23:11:14 2012 +0100
@@ -1,39 +1,37 @@
 INTRODUCTION
 ------------
 asmack http://code.google.com/p/asmack/ is a portage of the Smack library for
-the Android platform. The project is mostly maintained by Rene Treffer and you
-can find the binaries at http://code.google.com/p/asmack/ and the sources at
-http://github.com/rtreffer/asmack
+the Android platform. The project is was maintained by Rene Treffer.
+
+Florian Schmaus maintains a more up to date version of this project. This
+version is used by many XMPP clients for Android.
+
+You can find the sources at
+  http://github.com/rtreffer/asmack     for Rene version
+  http://github.com/Flowdalic/asmack    for Florian version
 
 The asmack project is based on the development version of the Smack library.
 This version is constantly moving but we want a fixed version for BEEM.
-We patched the asmack build process to use a fixed version of the Smack
-library. Currently, we use the revision 11644 of the Smack SVN repository.
+library.
+Currently, we use the changeset 0ffd380698bca3502a6f25c4d755fe79f6977b49 of
+the Florian's Smack git repository.
 
 COMPILE
 -------
 
 First check out the last version of asmack
-> git clone git://github.com/rtreffer/asmack.git
-
-Then apply the beem-build-process.patch on the source.
-> cd asmack
-> patch -p1 < beem-build-process.patch
->
+> git clone git://github.com/Flowdalic/asmack.git
 
 Add the beem flavour to the patch repository
+> rm -rf patch/beem
 > cp -R beem_patches patch/beem
 >
 
-The 50-fix_chatmanager.patch is only necessary to fix a little bug in smack. The
-patch has been proposed to the Smack developers. See
-http://www.igniterealtime.org/issues/browse/SMACK-269 for progress.
-
 Edit your local.properties file to contains the path of the android SDK. See
 local.properties.example
 
-Build asmack
-> ./build.batch
+Build asmack with beem patches
+> ./build.bash -c -b 0ffd380698bca3502a6f25c4d755fe79f6977b49
 >
 
 The build directory will contains the files :
--- a/doc/asmack-beem/beem_patches/10-custom-sslcontext.patch	Sun Oct 28 14:26:54 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-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
--- a/doc/asmack-beem/beem_patches/50-fix-chatmanager.patch	Sun Oct 28 14:26:54 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-   Copyright (C) 2010 by Frederic-Charles Barthelery,
-                         Jean-Manuel Da Silva,
-                         Nikita Kozlov,
-                         Philippe Lago,
-                         Jean Baptiste Vergely,
-                         Vincent Veronis.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
---- ../../../src/smack/org/jivesoftware/smack/ChatManager.java	2010-02-23 19:27:26.000000000 +0100
-+++ org/jivesoftware/smack/ChatManager.java	2010-02-23 19:37:47.000000000 +0100
-@@ -111,7 +111,9 @@
-                     	chat = getUserChat(message.getFrom());
-                     }
-                 }
--
-+		if (chat == null) {
-+                	chat = getUserChat(StringUtils.parseBareAddress(message.getFrom()));
-+		}
-                 if(chat == null) {
-                     chat = createChat(message);
-                 }
--- a/doc/asmack-beem/beem_patches/50-fix-sasl-incorrect-encoding.patch	Sun Oct 28 14:26:54 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-   Copyright (C) 2010 by Frederic-Charles Barthelery,
-                         Jean-Manuel Da Silva,
-                         Nikita Kozlov,
-                         Philippe Lago,
-                         Jean Baptiste Vergely,
-                         Vincent Veronis.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
---- org/jivesoftware/smack/sasl/SASLMechanism.java~	2010-07-20 15:13:25.000000000 +0200
-+++ org/jivesoftware/smack/sasl/SASLMechanism.java	2010-07-20 15:15:41.000000000 +0200
-@@ -263,9 +263,6 @@
-             if (authenticationText != null) {
-                 stanza.append(authenticationText);
-             }
--            else {
--                stanza.append("=");
--            }
-             stanza.append("</response>");
-             return stanza.toString();
-         }
--- a/doc/asmack-beem/beem_patches/50-public-info-features.patch	Sun Oct 28 14:26:54 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-   Copyright (C) 2010 by Frederic-Charles Barthelery,
-                         Jean-Manuel Da Silva,
-                         Nikita Kozlov,
-                         Philippe Lago,
-                         Jean Baptiste Vergely,
-                         Vincent Veronis.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
---- org/jivesoftware/smackx/packet/DiscoverInfo.java	2010-07-22 22:16:27.000000000 +0200
-+++ org/jivesoftware/smackx/packet/DiscoverInfo.java	2010-07-22 22:58:43.000000000 +0200
-@@ -62,7 +62,7 @@
-      *
-      * @return an Iterator on the discovered features of an XMPP entity
-      */
--    Iterator<Feature> getFeatures() {
-+    public Iterator<Feature> getFeatures() {
-         synchronized (features) {
-             return Collections.unmodifiableList(features).iterator();
-         }
-@@ -266,4 +266,4 @@
-             return buf.toString();
-         }
-     }
--}
-\ Pas de fin de ligne à la fin du fichier.
-+}
Binary file libs/asmack-android-16-beem.jar has changed
Binary file libs/asmack-android-7-beem.jar has changed
--- a/project.properties	Sun Oct 28 14:26:54 2012 +0100
+++ b/project.properties	Wed Oct 31 23:11:14 2012 +0100
@@ -3,9 +3,12 @@
 #
 # This file must be checked in Version Control Systems.
 #
-# To customize properties used by the Ant build system use,
+# To customize properties used by the Ant build system edit
 # "ant.properties", and override values to adapt the script to your
 # project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
 
 # Project target.
 target=android-16
--- a/src/com/beem/project/beem/BeemService.java	Sun Oct 28 14:26:54 2012 +0100
+++ b/src/com/beem/project/beem/BeemService.java	Wed Oct 31 23:11:14 2012 +0100
@@ -43,6 +43,8 @@
 */
 package com.beem.project.beem;
 
+import java.io.File;
+import java.io.IOException;
 import java.security.GeneralSecurityException;
 
 import javax.net.ssl.SSLContext;
@@ -73,7 +75,6 @@
 import com.beem.project.beem.service.auth.PreferenceAuthenticator;
 import com.beem.project.beem.smack.avatar.AvatarMetadataProvider;
 import com.beem.project.beem.smack.avatar.AvatarProvider;
-import com.beem.project.beem.smack.caps.CapsProvider;
 import com.beem.project.beem.smack.ping.PingExtension;
 import com.beem.project.beem.smack.sasl.SASLGoogleOAuth2Mechanism;
 import com.beem.project.beem.utils.BeemBroadcastReceiver;
@@ -92,7 +93,11 @@
 import org.jivesoftware.smack.proxy.ProxyInfo;
 import org.jivesoftware.smack.proxy.ProxyInfo.ProxyType;
 import org.jivesoftware.smack.util.StringUtils;
+import org.jivesoftware.smackx.entitycaps.EntityCapsManager;
+import org.jivesoftware.smackx.entitycaps.SimpleDirectoryPersistentCache;
+import org.jivesoftware.smackx.entitycaps.packet.CapsExtension;
 import org.jivesoftware.smackx.packet.ChatStateExtension;
+import org.jivesoftware.smackx.provider.CapsExtensionProvider;
 import org.jivesoftware.smackx.provider.DelayInfoProvider;
 import org.jivesoftware.smackx.provider.DiscoverInfoProvider;
 import org.jivesoftware.smackx.provider.DiscoverItemsProvider;
@@ -212,7 +217,7 @@
     @Override
     public boolean onUnbind(Intent intent) {
 	Log.d(TAG, "ONUNBIND()");
-	if (!mConnection.getAdaptee().isConnected()) {
+	if (mConnection != null  && !mConnection.getAdaptee().isConnected()) {
 	    this.stopSelf();
 	}
 	return true;
@@ -459,7 +464,8 @@
 	pm.addExtensionProvider("inactive", "http://jabber.org/protocol/chatstates", chatState);
 	pm.addExtensionProvider("gone", "http://jabber.org/protocol/chatstates", chatState);
 	// capabilities
-	pm.addExtensionProvider("c", "http://jabber.org/protocol/caps", new CapsProvider());
+	pm.addExtensionProvider(CapsExtension.NODE_NAME, CapsExtension.XMLNS, new CapsExtensionProvider());
+
 	//Pubsub
 	pm.addIQProvider("pubsub", "http://jabber.org/protocol/pubsub", new PubSubProvider());
 	pm.addExtensionProvider("items", "http://jabber.org/protocol/pubsub", new ItemsProvider());
@@ -554,6 +560,17 @@
 	/* register additionnals sasl mechanisms */
 	SASLAuthentication.registerSASLMechanism(SASLGoogleOAuth2Mechanism.MECHANISM_NAME,
 	    SASLGoogleOAuth2Mechanism.class);
+
+	// Configure entity caps manager. This must be done only once
+	File f = new File(getCacheDir(), "entityCaps");
+	f.mkdirs();
+	try {
+		EntityCapsManager.setPersistentCache(new SimpleDirectoryPersistentCache(f));
+	} catch (IllegalStateException e) {
+		Log.v(TAG, "EntityCapsManager already initialized", e);
+	} catch (IOException e) {
+	    	Log.w(TAG, "EntityCapsManager not able to reuse persistent cache");
+	}
     }
 
     /**
--- a/src/com/beem/project/beem/service/BeemCapsManager.java	Sun Oct 28 14:26:54 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-/*
-    BEEM is a videoconference application on the Android Platform.
-
-    Copyright (C) 2009 by Frederic-Charles Barthelery,
-                          Jean-Manuel Da Silva,
-                          Nikita Kozlov,
-                          Philippe Lago,
-                          Jean Baptiste Vergely,
-                          Vincent Veronis.
-
-    This file is part of BEEM.
-
-    BEEM is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    BEEM is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with BEEM.  If not, see <http://www.gnu.org/licenses/>.
-
-    Please send bug reports with examples or suggestions to
-    contact@beem-project.com or http://dev.beem-project.com/
-
-    Epitech, hereby disclaims all copyright interest in the program "Beem"
-    written by Frederic-Charles Barthelery,
-               Jean-Manuel Da Silva,
-               Nikita Kozlov,
-               Philippe Lago,
-               Jean Baptiste Vergely,
-               Vincent Veronis.
-
-    Nicolas Sadirac, November 26, 2009
-    President of Epitech.
-
-    Flavien Astraud, November 26, 2009
-    Head of the EIP Laboratory.
-
-*/
-package com.beem.project.beem.service;
-
-import org.jivesoftware.smack.Connection;
-import org.jivesoftware.smackx.packet.DiscoverInfo;
-import org.jivesoftware.smackx.ServiceDiscoveryManager;
-import org.jivesoftware.smack.util.PacketParserUtils;
-import org.xmlpull.v1.XmlPullParserFactory;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlPullParser;
-
-import android.util.Log;
-import java.io.FileReader;
-import java.io.Reader;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.FileWriter;
-import java.io.Writer;
-
-import java.io.File;
-import java.io.IOException;
-
-import android.content.Context;
-
-import com.beem.project.beem.smack.caps.CapsManager;
-
-/**
- * An implementation of CapsManager which keeps DiscoverInfo on the Cache directory of the android application.
- */
-public class BeemCapsManager extends CapsManager {
-
-    private static final String TAG = "BeemCapsManager";
-
-    private Context mContext;
-    private File mCacheDir;
-    private XmlPullParser mParser;
-
-    /**
-     * Create a BeemCapsManager.
-     *
-     * @param sdm the ServiceDiscoveryManager to use
-     * @param conn the connection to use
-     * @param context the Android context to use to store data
-     */
-    public BeemCapsManager(final ServiceDiscoveryManager sdm, final Connection conn, final Context context) {
-	super(sdm, conn);
-	mContext = context;
-	initCacheDirectory();
-    }
-
-
-    @Override
-    protected DiscoverInfo load(String ver) {
-	File fver = new File(mCacheDir, sanitizeName(ver));
-	try {
-	    Reader fr = new BufferedReader(new FileReader(fver));
-	    try {
-		if (mParser == null)
-		    mParser = makeParser();
-		mParser.setInput(fr);
-		return (DiscoverInfo) PacketParserUtils.parsePacketExtension("query",
-			"http://jabber.org/protocol/disco#info", mParser);
-
-	    } finally {
-		fr.close();
-	    }
-	} catch (Exception e) {
-	    // The parsePacketExtension throw Exception on error
-	    Log.d(TAG, "Error while loading Capabilities " + ver, e);
-	}
-	return null;
-    }
-
-    @Override
-    protected void store(String ver, DiscoverInfo info) {
-
-	File fver = new File(mCacheDir, sanitizeName(ver));
-	try {
-	    Writer fw = new BufferedWriter(new FileWriter(fver));
-	    try {
-		String data  = info.toXML();
-		fw.write(data, 0, data.length());
-	    } finally {
-		fw.close();
-	    }
-	} catch (IOException e) {
-	    Log.d(TAG, "Error while saving Capabilities " + ver, e);
-	}
-    }
-
-    @Override
-    protected boolean isInCache(String ver) {
-	boolean result = super.isInCache(ver);
-	if (!result) {
-	    File fver = new File(mCacheDir, sanitizeName(ver));
-	    result = fver.exists();
-	}
-	return result;
-    }
-
-    /**
-     * Init the cache directory.
-     */
-    private void initCacheDirectory() {
-	File dir = mContext.getCacheDir();
-	mCacheDir = new File(dir, "capabilities");
-	mCacheDir.mkdir();
-    }
-
-    /**
-     * Make an Xml parser.
-     *
-     * @return the created xml parser.
-     * @throws XmlPullParserException if an error occurs while creating the parser.
-     */
-    private XmlPullParser makeParser() throws XmlPullParserException {
-	XmlPullParserFactory fact = XmlPullParserFactory.newInstance();
-	fact.setNamespaceAware(true);
-	return fact.newPullParser();
-    }
-
-    /**
-     * Sanitize the base64 ver attribute in order to use it as a filename.
-     * @param ver the base64 ver attribute
-     * @return a sanitize filename for the ver attribute
-     */
-    private String sanitizeName(String ver) {
-	return ver.replaceAll("/", ".");
-    }
-}
--- a/src/com/beem/project/beem/service/XmppConnectionAdapter.java	Sun Oct 28 14:26:54 2012 +0100
+++ b/src/com/beem/project/beem/service/XmppConnectionAdapter.java	Wed Oct 31 23:11:14 2012 +0100
@@ -88,6 +88,7 @@
 import org.jivesoftware.smack.util.StringUtils;
 import org.jivesoftware.smackx.ChatStateManager;
 import org.jivesoftware.smackx.ServiceDiscoveryManager;
+import org.jivesoftware.smackx.entitycaps.EntityCapsManager;
 import org.jivesoftware.smackx.packet.DiscoverInfo;
 
 /**
@@ -492,8 +493,9 @@
 	sdm.addFeature(PingExtension.NAMESPACE);
 
 	mChatStateManager = ChatStateManager.getInstance(mAdaptee);
-	BeemCapsManager caps = new BeemCapsManager(sdm, mAdaptee, mService);
-	caps.setNode("http://www.beem-project.com");
+
+	EntityCapsManager em = sdm.getEntityCapsManager();
+	em.setNode("http://www.beem-project.com");
     }
 
     /**
--- a/src/com/beem/project/beem/smack/caps/CapsExtension.java	Sun Oct 28 14:26:54 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/*
-    BEEM is a videoconference application on the Android Platform.
-
-    Copyright (C) 2009 by Frederic-Charles Barthelery,
-                          Jean-Manuel Da Silva,
-                          Nikita Kozlov,
-                          Philippe Lago,
-                          Jean Baptiste Vergely,
-                          Vincent Veronis.
-
-    This file is part of BEEM.
-
-    BEEM is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    BEEM is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with BEEM.  If not, see <http://www.gnu.org/licenses/>.
-
-    Please send bug reports with examples or suggestions to
-    contact@beem-project.com or http://dev.beem-project.com/
-
-    Epitech, hereby disclaims all copyright interest in the program "Beem"
-    written by Frederic-Charles Barthelery,
-               Jean-Manuel Da Silva,
-               Nikita Kozlov,
-               Philippe Lago,
-               Jean Baptiste Vergely,
-               Vincent Veronis.
-
-    Nicolas Sadirac, November 26, 2009
-    President of Epitech.
-
-    Flavien Astraud, November 26, 2009
-    Head of the EIP Laboratory.
-
-*/
-
-package com.beem.project.beem.smack.caps;
-
-import org.jivesoftware.smack.packet.PacketExtension;
-
-/**
- * This extension represents a capability of XEP-0115.
- *
- */
-public class CapsExtension implements PacketExtension {
-
-    private String mVer;
-    private String mHash;
-    private String mNode;
-    private String mExt;
-
-
-    /**
-     * Create a CapsExtension.
-     *
-     * @param hash The value of the hash attribute.
-     * @param node the value of the node attribute
-     * @param ver the value of the ver attribute.
-     */
-    public CapsExtension(final String hash, final String node, final String ver) {
-	mHash = hash;
-	mNode = node;
-	mVer = ver;
-    }
-
-    /**
-     * Get the ver attribute value.
-     *
-     * @return the value of the ver attribute.
-     */
-    public String getVer() {
-	return mVer;
-    }
-
-    /**
-     * Get the hash attribute value.
-     *
-     * @return the value of the hash attribute.
-     */
-    public String getHash() {
-	return mHash;
-    }
-
-    /**
-     * Get the node attribute value.
-     *
-     * @return the value of the node attribute.
-     */
-    public String getNode() {
-	return mNode;
-    }
-
-    /**
-     * Get the ext attribute value.
-     *
-     * @return the value of the ext attribute.
-     */
-    public String getExt() {
-	return mExt;
-    }
-
-    /**
-     * Set the hash attribute.
-     *
-     * @param hash the value of hash
-     */
-    public void setHash(String hash) {
-	mHash = hash;
-    }
-
-    /**
-     * Set the ver attribute.
-     *
-     * @param ver the value of ver
-     */
-    public void setVer(String ver) {
-	mVer = ver;
-    }
-
-    /**
-     * Set the node attribute.
-     *
-     * @param node the value of node
-     */
-    public void setNode(String node) {
-	mNode = node;
-    }
-
-    /**
-     * Set the ext attribute.
-     *
-     * @param ext the value of ext
-     */
-    public void setExt(String ext) {
-	mExt = ext;
-    }
-
-    @Override
-    public String getElementName() {
-	return "c";
-    }
-
-    @Override
-    public String getNamespace() {
-	return "http://jabber.org/protocol/caps";
-    }
-
-    @Override
-    public String toXML() {
-	StringBuilder b = new StringBuilder("<");
-	b.append(getElementName());
-	b.append(" xmlns=\"").append(getNamespace()).append("\" ");
-	if (mHash != null) {
-	    b.append("hash=\"").append(mHash).append("\" ");
-	}
-	if (mNode != null)
-	    b.append("node=\"").append(mNode).append("\" ");
-	if (mVer != null)
-	    b.append("ver=\"").append(mVer).append("\" ");
-	if (mExt != null)
-	    b.append("ext=\"").append(mExt).append("\" ");
-	b.append("/>");
-	return b.toString();
-    }
-
-}
--- a/src/com/beem/project/beem/smack/caps/CapsManager.java	Sun Oct 28 14:26:54 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,372 +0,0 @@
-/*
-    BEEM is a videoconference application on the Android Platform.
-
-    Copyright (C) 2009 by Frederic-Charles Barthelery,
-                          Jean-Manuel Da Silva,
-                          Nikita Kozlov,
-                          Philippe Lago,
-                          Jean Baptiste Vergely,
-                          Vincent Veronis.
-
-    This file is part of BEEM.
-
-    BEEM is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    BEEM is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with BEEM.  If not, see <http://www.gnu.org/licenses/>.
-
-    Please send bug reports with examples or suggestions to
-    contact@beem-project.com or http://dev.beem-project.com/
-
-    Epitech, hereby disclaims all copyright interest in the program "Beem"
-    written by Frederic-Charles Barthelery,
-               Jean-Manuel Da Silva,
-               Nikita Kozlov,
-               Philippe Lago,
-               Jean Baptiste Vergely,
-               Vincent Veronis.
-
-    Nicolas Sadirac, November 26, 2009
-    President of Epitech.
-
-    Flavien Astraud, November 26, 2009
-    Head of the EIP Laboratory.
-
-*/
-package com.beem.project.beem.smack.caps;
-
-import org.jivesoftware.smack.Connection;
-import org.jivesoftware.smack.PacketInterceptor;
-import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smackx.packet.DiscoverInfo;
-import org.jivesoftware.smack.packet.Packet;
-import org.jivesoftware.smack.packet.PacketExtension;
-import org.jivesoftware.smack.packet.Presence;
-import org.jivesoftware.smackx.ServiceDiscoveryManager;
-import org.jivesoftware.smack.util.collections.ReferenceMap;
-import org.jivesoftware.smack.PacketListener;
-import org.jivesoftware.smack.filter.PacketFilter;
-import org.jivesoftware.smack.filter.PacketTypeFilter;
-import org.jivesoftware.smack.filter.PacketExtensionFilter;
-
-import java.util.Map;
-import java.util.Iterator;
-import java.util.Comparator;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.security.NoSuchAlgorithmException;
-import java.security.MessageDigest;
-
-import org.jivesoftware.smack.util.StringUtils;
-
-/**
- * Capabilities manager to implements XEP-0115.
- * The DiscoverInfo are cached in memory.
- *
- */
-public class CapsManager {
-    // the verCache should be stored on disk
-    private Map<String, DiscoverInfo> mVerCache = new ReferenceMap<String, DiscoverInfo>();
-    private Map<String, DiscoverInfo> mJidCache = new ReferenceMap<String, DiscoverInfo>();
-
-    private ServiceDiscoveryManager mSdm;
-    private Connection mConnection;
-    private String mNode;
-    private List<String> mSupportedAlgorithm = new ArrayList<String>();
-
-    /**
-     * Create a CapsManager.
-     *
-     * @param sdm The service discovery manager to use.
-     * @param conn The connection to manage.
-     */
-    public CapsManager(final ServiceDiscoveryManager sdm, final Connection conn) {
-	mSdm = sdm;
-	mConnection = conn;
-	init();
-    }
-
-    /**
-     * Get the discover info associated with a ver attribute.
-     *
-     * @param ver the ver attribute.
-     * @return the discover info or null if it was not cached.
-     */
-    public DiscoverInfo getDiscoverInfo(String ver) {
-	return mVerCache.get(ver);
-    }
-
-    /**
-     * Get the discover info of a contact.
-     *
-     * @param jid the jid of the contact.
-     * @param ver the ver attribute of the contact capability.
-     * @return The info of the client null if the info was not cached.
-     */
-    public DiscoverInfo getDiscoverInfo(String jid, String ver) {
-	DiscoverInfo info = mVerCache.get(ver);
-	if (info == null) {
-	    info = load(ver);
-	    if (info == null)
-		info = mJidCache.get(jid);
-	}
-	return info;
-    }
-
-    /**
-     * Set the node attribute to send in your capability.
-     * This is usually an uri to identify the client.
-     *
-     * @param node the node attribute to set.
-     */
-    public void setNode(String node) {
-	mNode = node;
-    }
-
-    /**
-     * Load a persistent DiscoverInfo.
-     * The default implementation does nothing and always return null.
-     *
-     * @param ver the ver hash of the discoverInfo.
-     * @return The discover info or null if not present.
-     */
-    protected DiscoverInfo load(String ver) {
-	return null;
-    }
-
-    /**
-     * Store a DiscoverInfo for persistence.
-     * The default implementation does nothing.
-     *
-     * @param ver the ver hash of the DiscoverInfo
-     * @param info the DiscoverInfo to store
-     */
-    protected void store(String ver, DiscoverInfo info) {
-    }
-
-    /**
-     * Check if the discover info correspondig to the ver hash is in cache.
-     * This implementation checks the memory cache.
-     * If the info is not in cache it is necessary to request it from the network.
-     *
-     * @param ver the ver hash
-     * @return true if it is in cache false otherwise
-     */
-    protected boolean isInCache(String ver) {
-	return mVerCache.containsKey(ver);
-    }
-
-    /**
-     * Initialize this CapsManageer.
-     */
-    private void init() {
-	initSupportedAlgorithm();
-	PacketFilter filter = new PacketExtensionFilter("c", "http://jabber.org/protocol/caps");
-	mConnection.addPacketListener(new PacketListener() {
-	    public void processPacket(Packet packet) {
-		if (packet.getFrom().equals(mConnection.getUser()))
-		    return;
-		PacketExtension p = packet.getExtension("c", "http://jabber.org/protocol/caps");
-		CapsExtension caps = (CapsExtension) p;
-		if (!isInCache(caps.getVer())) {
-		    validate(packet.getFrom(), caps.getNode(), caps.getVer(), caps.getHash());
-		}
-	    }
-	}, filter);
-	mConnection.addPacketInterceptor(new PacketInterceptor() {
-
-	    public void interceptPacket(Packet packet) {
-		DiscoverInfo info = getOwnInformation();
-		if (mSupportedAlgorithm.size() > 0) {
-		    try {
-			String algo = mSupportedAlgorithm.get(0);
-			String ver = calculateVer(info, algo);
-			CapsExtension caps = new CapsExtension(algo, mNode, ver);
-			packet.addExtension(caps);
-		    } catch (NoSuchAlgorithmException e) {
-			e.printStackTrace();
-		    }
-		}
-	    }
-	}, new PacketTypeFilter(Presence.class));
-    }
-
-    /**
-     * Validate the ver attribute of a received capability.
-     *
-     * @param jid the jid of the sender of the capability.
-     * @param node the node attribute of the capability.
-     * @param ver the ver attribute of the capability.
-     * @param hashMethod the hash algorithm to use to calculate ver
-     * @return true if the ver attribute is valid false otherwise.
-     */
-    private boolean validate(String jid, String node, String ver, String hashMethod) {
-	try {
-	    DiscoverInfo info = mSdm.discoverInfo(jid, node + "#" + ver);
-	    if (!mSupportedAlgorithm.contains(hashMethod)) {
-		mJidCache.put(jid, info);
-		return false;
-	    }
-	    String v = calculateVer(info, hashMethod);
-	    boolean res = v.equals(ver);
-	    if (res) {
-		mVerCache.put(ver, info);
-		store(ver, info);
-	    }
-	    return res;
-	} catch (XMPPException e) {
-	    e.printStackTrace();
-	} catch (NoSuchAlgorithmException e) {
-	    e.printStackTrace();
-	}
-	return false;
-    }
-
-    /**
-     * Calculate the ver attribute.
-     *
-     * @param info The discover info to calculate the ver.
-     * @param hashMethod the hash algorithm to use.
-     * @return the value of the ver attribute
-     * @throws NoSuchAlgorithmException if the hash algorithm is not supported.
-     */
-    private String calculateVer(DiscoverInfo info, String hashMethod) throws NoSuchAlgorithmException {
-	StringBuilder s = new StringBuilder();
-	for (DiscoverInfo.Identity identity : getSortedIdentity(info)) {
-	    String c = identity.getCategory();
-	    if (c != null)
-		s.append(c);
-	    s.append('/');
-	    c = identity.getType();
-	    if (c != null)
-		s.append(c);
-	    s.append('/');
-	    // Should add lang but it is not available
-//             c = identity.getType();
-//             if (c != null)
-//                 S.append(c);
-	    s.append('/');
-	    c = identity.getName();
-	    if (c != null)
-		s.append(c);
-	    s.append('<');
-	}
-	for (String f : getSortedFeature(info)) {
-	    s.append(f);
-	    s.append('<');
-	}
-	// Should add data form (XEP 0128) but it is not available
-	byte[] hash = getHash(hashMethod, s.toString().getBytes());
-	return StringUtils.encodeBase64(hash);
-    }
-
-    /**
-     * Get the identities sorted correctly to calculate the ver attribute.
-     *
-     * @param info the DiscoverInfo containing the identities
-     * @return the sorted list of identities.
-     */
-    private List<DiscoverInfo.Identity> getSortedIdentity(DiscoverInfo info) {
-	List<DiscoverInfo.Identity> result = new ArrayList<DiscoverInfo.Identity>();
-	Iterator<DiscoverInfo.Identity> it = info.getIdentities();
-	while (it.hasNext()) {
-	    DiscoverInfo.Identity id = it.next();
-	    result.add(id);
-	}
-	Collections.sort(result, new Comparator<DiscoverInfo.Identity>() {
-	    public int compare(DiscoverInfo.Identity o1, DiscoverInfo.Identity o2) {
-
-		String cat1 = o1.getCategory();
-		if (cat1 == null) cat1 = "";
-		String cat2 = o2.getCategory();
-		if (cat2 == null) cat2 = "";
-		int res = cat1.compareTo(cat2);
-		if (res != 0)
-		    return res;
-		String type1 = o1.getType();
-		if (type1 == null) type1 = "";
-		String type2 = o2.getCategory();
-		if (type2 == null) type2 = "";
-		res = type1.compareTo(type2);
-		if (res != 0)
-		    return res;
-		// should compare lang but not avalaible
-		return 0;
-	    }
-	});
-	return result;
-    }
-
-    /**
-     * Get the features sorted correctly to calculate the ver attribute.
-     *
-     * @param info the DiscoverInfo containing the features
-     * @return the sorted list of features.
-     */
-    private List<String> getSortedFeature(DiscoverInfo info) {
-	List<String> result = new ArrayList<String>();
-	Iterator<DiscoverInfo.Feature> it = info.getFeatures();
-	while (it.hasNext()) {
-	    DiscoverInfo.Feature feat = it.next();
-	    result.add(feat.getVar());
-	}
-	Collections.sort(result);
-	return result;
-    }
-
-    /**
-     * Get the Discover Information send by your own connection.
-     *
-     * @return your own DiscoverInfo
-     */
-    private DiscoverInfo getOwnInformation() {
-	DiscoverInfo result = new DiscoverInfo();
-	DiscoverInfo.Identity id = new DiscoverInfo.Identity("client", ServiceDiscoveryManager.getIdentityName());
-	id.setType(ServiceDiscoveryManager.getIdentityType());
-	result.addIdentity(id);
-	Iterator<String> it = mSdm.getFeatures();
-	while (it.hasNext()) {
-	    result.addFeature(it.next());
-	}
-	return result;
-    }
-
-    /**
-     * Calculate a Hash (digest).
-     *
-     * @param algo the algorithm to use
-     * @param data the data to compute
-     * @return the resulting hash
-     * @throws NoSuchAlgorithmException if the algorithm is not supported
-     */
-    private byte[] getHash(String algo, byte[] data) throws NoSuchAlgorithmException {
-	MessageDigest md = MessageDigest.getInstance(algo);
-	return md.digest(data);
-    }
-
-    /**
-     * Initialize a list of supported Hash algorithm.
-     */
-    private void initSupportedAlgorithm() {
-	// sort by ""preference"
-	String[] algo = new String[] {"sha-1", "md2", "md5", "sha-224", "sha-256", "sha-384", "sha-512" };
-	for (String a : algo) {
-	    try {
-		MessageDigest md = MessageDigest.getInstance(a);
-		mSupportedAlgorithm.add(a);
-	    } catch (NoSuchAlgorithmException e) {
-		System.err.println("Hash algorithm " + a + " not supported");
-	    }
-	}
-    }
-
-}
--- a/src/com/beem/project/beem/smack/caps/CapsProvider.java	Sun Oct 28 14:26:54 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-/*
-    BEEM is a videoconference application on the Android Platform.
-
-    Copyright (C) 2009 by Frederic-Charles Barthelery,
-                          Jean-Manuel Da Silva,
-                          Nikita Kozlov,
-                          Philippe Lago,
-                          Jean Baptiste Vergely,
-                          Vincent Veronis.
-
-    This file is part of BEEM.
-
-    BEEM is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    BEEM is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with BEEM.  If not, see <http://www.gnu.org/licenses/>.
-
-    Please send bug reports with examples or suggestions to
-    contact@beem-project.com or http://dev.beem-project.com/
-
-    Epitech, hereby disclaims all copyright interest in the program "Beem"
-    written by Frederic-Charles Barthelery,
-               Jean-Manuel Da Silva,
-               Nikita Kozlov,
-               Philippe Lago,
-               Jean Baptiste Vergely,
-               Vincent Veronis.
-
-    Nicolas Sadirac, November 26, 2009
-    President of Epitech.
-
-    Flavien Astraud, November 26, 2009
-    Head of the EIP Laboratory.
-
-*/
-package com.beem.project.beem.smack.caps;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.jivesoftware.smack.provider.PacketExtensionProvider;
-import org.jivesoftware.smack.packet.PacketExtension;
-
-/**
- * PacketExtensionProvider for XEP-0115.
- * This provider parse c element of namespace
- * http://jabber.org/protocol/caps which represents a capability of XEP-0115
- *
- */
-public class CapsProvider implements PacketExtensionProvider {
-
-    /**
-     * Constructor.
-     */
-    public CapsProvider() { }
-
-    @Override
-    public PacketExtension parseExtension(XmlPullParser parser) {
-	String ver = parser.getAttributeValue("", "ver");
-	String hash = parser.getAttributeValue("", "hash");
-	String node = parser.getAttributeValue("", "node");
-	String ext = parser.getAttributeValue("", "ext");
-	CapsExtension e = new CapsExtension(hash, node, ver);
-	e.setExt(ext);
-	return e;
-    }
-
-}
--- a/src/com/beem/project/beem/smack/caps/package-info.java	Sun Oct 28 14:26:54 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-    BEEM is a videoconference application on the Android Platform.
-
-    Copyright (C) 2009 by Frederic-Charles Barthelery,
-                          Jean-Manuel Da Silva,
-                          Nikita Kozlov,
-                          Philippe Lago,
-                          Jean Baptiste Vergely,
-                          Vincent Veronis.
-
-    This file is part of BEEM.
-
-    BEEM is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    BEEM is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with BEEM.  If not, see <http://www.gnu.org/licenses/>.
-
-    Please send bug reports with examples or suggestions to
-    contact@beem-project.com or http://dev.beem-project.com/
-
-    Epitech, hereby disclaims all copyright interest in the program "Beem"
-    written by Frederic-Charles Barthelery,
-               Jean-Manuel Da Silva,
-               Nikita Kozlov,
-               Philippe Lago,
-               Jean Baptiste Vergely,
-               Vincent Veronis.
-
-    Nicolas Sadirac, November 26, 2009
-    President of Epitech.
-
-    Flavien Astraud, November 26, 2009
-    Head of the EIP Laboratory.
-
-*/
-
-/**
- * This package contains implementation of XEP-0115.
- */
-package com.beem.project.beem.smack.caps;