summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Young <consult.awy@gmail.com>2014-11-13 06:42:37 (GMT)
committerAlan Young <consult.awy@gmail.com>2015-04-10 06:50:58 (GMT)
commit7d2101b93b6253c3ea15b663f7f3dc385cb21364 (patch)
treed81338baf0d117e83cdc07f882cbedd9471e834d /src/com/isode/stroke/network
parenta20ca7ba40d837abe228462be0aba5d32d6831e3 (diff)
downloadstroke-7d2101b93b6253c3ea15b663f7f3dc385cb21364.zip
stroke-7d2101b93b6253c3ea15b663f7f3dc385cb21364.tar.bz2
Checkpoint - A bunch of initial stuff for Android
MemoryStorages, Storages NickManager, NickResolver CryptoProvider, Hash, SafeByteArray, JavaCryptoProvider CapsInfoGenerator, CapsManager, CapsMemoryStorage, CapsProvider, CapsStorage, CapsInfo CapsInfoSerializer, CapsInfoParser ClientDiscoManager, DiscoInfoResponder, EntityCapsManager, EntityCapsProvider GetDiscoInfoRequest ChatState, Idle Presence, PayloadAddingPresenceSender, PresenceOracle, SubscriptionManager StatusSerializer, StatusShowSerializer, StatusParser, StatusShowParser, Replace, ReplaceParser, ReplaceSerializer SecurityLabel, SecurityLabelsCatalog, GetSecurityLabelsCatalogRequest VCard, GetVCardRequest, SetVCardRequest, VCardManager, VCardMemoryStorage, VCardStorage RosterMemoryStorage, RosterPushResponder, RosterStorage, SetRosterRequest XMPPRoster, XMPPRosterController, XMPPRosterImpl, XMPPRosterItem GetRosterRequest, SetResponder Add parsers and serializers for Idle, VCard, PrivateStorage & Stroage. Add parser for Subject. Add impromptu flag to MUCInvitation. Update copyrights. Change-Id: I9949f506b70e60b3a64f1dadde8f9b235b322e1d
Diffstat (limited to 'src/com/isode/stroke/network')
-rw-r--r--src/com/isode/stroke/network/JavaConnection.java3
-rw-r--r--src/com/isode/stroke/network/JavaCryptoProvider.java90
-rw-r--r--src/com/isode/stroke/network/JavaNetworkFactories.java10
-rw-r--r--src/com/isode/stroke/network/NetworkFactories.java8
4 files changed, 104 insertions, 7 deletions
diff --git a/src/com/isode/stroke/network/JavaConnection.java b/src/com/isode/stroke/network/JavaConnection.java
index f1d72bb..9b171d9 100644
--- a/src/com/isode/stroke/network/JavaConnection.java
+++ b/src/com/isode/stroke/network/JavaConnection.java
@@ -160,6 +160,7 @@ public class JavaConnection extends Connection implements EventOwner {
if(selector_ != null) {
try {
selector_.close();
+ selector_ = null;
} catch (IOException e) {
}
}
@@ -382,7 +383,7 @@ public class JavaConnection extends Connection implements EventOwner {
private boolean disconnecting_ = false;
private boolean disconnected_ = false;
private SocketChannel socketChannel_;
- private Selector selector_;
+ private volatile Selector selector_;
private SelectionKey selectionKey_;
private Worker worker_;
diff --git a/src/com/isode/stroke/network/JavaCryptoProvider.java b/src/com/isode/stroke/network/JavaCryptoProvider.java
new file mode 100644
index 0000000..b7dff5d
--- /dev/null
+++ b/src/com/isode/stroke/network/JavaCryptoProvider.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2011-2015 Isode Limited, London, England.
+ * All rights reserved.
+ */
+package com.isode.stroke.network;
+
+import java.security.InvalidKeyException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import com.isode.stroke.base.ByteArray;
+import com.isode.stroke.crypto.CryptoProvider;
+import com.isode.stroke.crypto.Hash;
+import com.isode.stroke.base.SafeByteArray;
+
+public class JavaCryptoProvider extends CryptoProvider {
+
+ private static class HashProvider implements Hash {
+ private final MessageDigest digest;
+
+ HashProvider(String algorithm) throws NoSuchAlgorithmException {
+ digest = MessageDigest.getInstance("SHA-1");
+ }
+
+ @Override
+ public Hash update(ByteArray data) {
+ digest.update(data.getData());
+ return this;
+ }
+
+ @Override
+ public Hash update(SafeByteArray data) {
+// digest.update(data.getData());
+ return this;
+ }
+
+ @Override
+ public ByteArray getHash() {
+ return new ByteArray(digest.digest());
+ }
+
+ }
+
+ @Override
+ public Hash createSHA1() {
+ try {
+ return new HashProvider("SHA-1");
+ } catch (NoSuchAlgorithmException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public Hash createMD5() {
+ try {
+ return new HashProvider("MD5");
+ } catch (NoSuchAlgorithmException e) {
+ return null;
+ }
+ }
+
+// @Override
+ public ByteArray getHMACSHA1(SafeByteArray key, ByteArray data) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ByteArray getHMACSHA1(ByteArray key, ByteArray data) {
+ Mac mac;
+ try {
+ mac = Mac.getInstance("HmacSHA1");
+ mac.init(new SecretKeySpec(key.getData(), mac.getAlgorithm()));
+ return new ByteArray(mac.doFinal(data.getData()));
+ } catch (NoSuchAlgorithmException e) {
+ return null;
+ } catch (InvalidKeyException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean isMD5AllowedForCrypto() {
+ return false;
+ }
+
+}
diff --git a/src/com/isode/stroke/network/JavaNetworkFactories.java b/src/com/isode/stroke/network/JavaNetworkFactories.java
index aaffea3..2276a2a 100644
--- a/src/com/isode/stroke/network/JavaNetworkFactories.java
+++ b/src/com/isode/stroke/network/JavaNetworkFactories.java
@@ -1,9 +1,10 @@
/*
- * Copyright (c) 2011-2013 Isode Limited, London, England.
+ * Copyright (c) 2011-2015 Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.network;
+import com.isode.stroke.crypto.CryptoProvider;
import com.isode.stroke.eventloop.EventLoop;
import com.isode.stroke.tls.PlatformTLSFactories;
import com.isode.stroke.tls.TLSContextFactory;
@@ -16,6 +17,7 @@ public class JavaNetworkFactories implements NetworkFactories {
connections_ = new JavaConnectionFactory(eventLoop_);
dns_ = new PlatformDomainNameResolver(eventLoop_);
platformTLSFactories_ = new PlatformTLSFactories();
+ cryptoProvider_ = new JavaCryptoProvider();
}
public TimerFactory getTimerFactory() {
@@ -34,9 +36,15 @@ public class JavaNetworkFactories implements NetworkFactories {
return platformTLSFactories_.getTLSContextFactory();
}
+ @Override
+ public CryptoProvider getCryptoProvider() {
+ return cryptoProvider_;
+ }
+
private final EventLoop eventLoop_;
private final JavaTimerFactory timers_;
private final JavaConnectionFactory connections_;
private final PlatformDomainNameResolver dns_;
private final PlatformTLSFactories platformTLSFactories_;
+ private final CryptoProvider cryptoProvider_;
}
diff --git a/src/com/isode/stroke/network/NetworkFactories.java b/src/com/isode/stroke/network/NetworkFactories.java
index 678a3b7..fe20214 100644
--- a/src/com/isode/stroke/network/NetworkFactories.java
+++ b/src/com/isode/stroke/network/NetworkFactories.java
@@ -1,13 +1,10 @@
/*
- * Copyright (c) 2011-2013 Isode Limited, London, England.
- * All rights reserved.
- */
-/*
- * Copyright (c) 2010 Remko Tronçon.
+ * Copyright (c) 2010-2015 Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.network;
+import com.isode.stroke.crypto.CryptoProvider;
import com.isode.stroke.tls.TLSContextFactory;
public interface NetworkFactories {
@@ -16,5 +13,6 @@ public interface NetworkFactories {
ConnectionFactory getConnectionFactory();
DomainNameResolver getDomainNameResolver();
TLSContextFactory getTLSContextFactory();
+ CryptoProvider getCryptoProvider();
}