mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2025-09-09 10:19:41 +02:00
Replace XPP3 by XmlPullParser interface wrapping StAX and XPP3
Introducing Smack's own XmlPullParser interface which tries to stay as compatible as possible to XPP3. The interface is used to either wrap StAX's XMLStreamReader if Smack is used on Java SE, and XPP3's XmlPullParser if Smack is used on on Android. Fixes SMACK-591. Also introduce JUnit 5 and non-strict javadoc projects.
This commit is contained in:
parent
b3646abecd
commit
4133eb175c
414 changed files with 3855 additions and 2041 deletions
|
@ -38,6 +38,7 @@ import java.util.logging.Logger;
|
|||
|
||||
import org.jivesoftware.smack.util.CloseableUtil;
|
||||
import org.jivesoftware.smack.util.stringencoder.BareJidEncoder;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
|
||||
import org.jivesoftware.smackx.omemo.internal.OmemoCachedDeviceList;
|
||||
import org.jivesoftware.smackx.omemo.internal.OmemoDevice;
|
||||
|
|
|
@ -44,6 +44,7 @@ import org.jivesoftware.smack.packet.ExtensionElement;
|
|||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smack.packet.Stanza;
|
||||
import org.jivesoftware.smack.util.Async;
|
||||
|
||||
import org.jivesoftware.smackx.carbons.CarbonCopyReceivedListener;
|
||||
import org.jivesoftware.smackx.carbons.CarbonManager;
|
||||
import org.jivesoftware.smackx.carbons.packet.CarbonExtension;
|
||||
|
|
|
@ -25,6 +25,7 @@ import java.util.HashSet;
|
|||
import java.util.Set;
|
||||
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
|
||||
import org.jivesoftware.smackx.eme.element.ExplicitMessageEncryptionElement;
|
||||
import org.jivesoftware.smackx.hints.element.StoreHint;
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoElement;
|
||||
|
|
|
@ -21,10 +21,12 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.crypto.BadPaddingException;
|
||||
import javax.crypto.IllegalBlockSizeException;
|
||||
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoElement;
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoKeyElement;
|
||||
import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
|
||||
|
|
|
@ -35,6 +35,7 @@ import java.util.Random;
|
|||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.crypto.BadPaddingException;
|
||||
import javax.crypto.IllegalBlockSizeException;
|
||||
import javax.crypto.NoSuchPaddingException;
|
||||
|
@ -45,6 +46,7 @@ import org.jivesoftware.smack.XMPPException;
|
|||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smack.packet.Stanza;
|
||||
import org.jivesoftware.smack.packet.StanzaError;
|
||||
|
||||
import org.jivesoftware.smackx.carbons.packet.CarbonExtension;
|
||||
import org.jivesoftware.smackx.mam.MamManager;
|
||||
import org.jivesoftware.smackx.muc.MultiUserChat;
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.util.logging.Level;
|
|||
import java.util.logging.Logger;
|
||||
|
||||
import org.jivesoftware.smack.SmackException;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoBundleElement_VAxolotl;
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoDeviceListElement;
|
||||
import org.jivesoftware.smackx.omemo.exceptions.CannotEstablishOmemoSessionException;
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.util.Set;
|
|||
import org.jivesoftware.smack.packet.ExtensionElement;
|
||||
import org.jivesoftware.smack.util.Objects;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.internal.OmemoCachedDeviceList;
|
||||
|
||||
/**
|
||||
|
|
|
@ -21,6 +21,7 @@ import static org.jivesoftware.smackx.omemo.util.OmemoConstants.Crypto.KEYTYPE;
|
|||
|
||||
import java.security.InvalidAlgorithmParameterException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.NoSuchPaddingException;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package org.jivesoftware.smackx.omemo.internal.listener;
|
||||
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
|
||||
import org.jivesoftware.smackx.carbons.packet.CarbonExtension;
|
||||
import org.jivesoftware.smackx.omemo.OmemoManager;
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package org.jivesoftware.smackx.omemo.internal.listener;
|
||||
|
||||
import org.jivesoftware.smack.packet.Stanza;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.OmemoManager;
|
||||
|
||||
public interface OmemoMessageStanzaReceivedListener {
|
||||
|
|
|
@ -18,6 +18,7 @@ package org.jivesoftware.smackx.omemo.listener;
|
|||
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smack.packet.Stanza;
|
||||
|
||||
import org.jivesoftware.smackx.carbons.packet.CarbonExtension;
|
||||
import org.jivesoftware.smackx.omemo.OmemoMessage;
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package org.jivesoftware.smackx.omemo.listener;
|
||||
|
||||
import org.jivesoftware.smack.packet.Stanza;
|
||||
|
||||
import org.jivesoftware.smackx.muc.MultiUserChat;
|
||||
import org.jivesoftware.smackx.omemo.OmemoMessage;
|
||||
|
||||
|
|
|
@ -24,20 +24,17 @@ import static org.jivesoftware.smackx.omemo.element.OmemoBundleElement.PRE_KEY_P
|
|||
import static org.jivesoftware.smackx.omemo.element.OmemoBundleElement.SIGNED_PRE_KEY_ID;
|
||||
import static org.jivesoftware.smackx.omemo.element.OmemoBundleElement.SIGNED_PRE_KEY_PUB;
|
||||
import static org.jivesoftware.smackx.omemo.element.OmemoBundleElement.SIGNED_PRE_KEY_SIG;
|
||||
import static org.xmlpull.v1.XmlPullParser.END_TAG;
|
||||
import static org.xmlpull.v1.XmlPullParser.START_TAG;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.jivesoftware.smack.packet.XmlEnvironment;
|
||||
import org.jivesoftware.smack.provider.ExtensionElementProvider;
|
||||
import org.jivesoftware.smack.xml.XmlPullParser;
|
||||
import org.jivesoftware.smack.xml.XmlPullParserException;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoBundleElement_VAxolotl;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
/**
|
||||
* Smack ExtensionProvider that parses OMEMO bundle element into OmemoBundleElement objects.
|
||||
*
|
||||
|
@ -56,13 +53,14 @@ public class OmemoBundleVAxolotlProvider extends ExtensionElementProvider<OmemoB
|
|||
HashMap<Integer, String> preKeys = new HashMap<>();
|
||||
|
||||
while (!stop) {
|
||||
int tag = parser.next();
|
||||
XmlPullParser.Event tag = parser.next();
|
||||
String name = parser.getName();
|
||||
switch (tag) {
|
||||
case START_TAG:
|
||||
case START_ELEMENT:
|
||||
final int attributeCount = parser.getAttributeCount();
|
||||
// <signedPreKeyPublic>
|
||||
if (name.equals(SIGNED_PRE_KEY_PUB)) {
|
||||
for (int i = 0; i < parser.getAttributeCount(); i++) {
|
||||
for (int i = 0; i < attributeCount; i++) {
|
||||
if (parser.getAttributeName(i).equals(SIGNED_PRE_KEY_ID)) {
|
||||
int id = Integer.parseInt(parser.getAttributeValue(i));
|
||||
signedPreKey = parser.nextText();
|
||||
|
@ -84,7 +82,7 @@ public class OmemoBundleVAxolotlProvider extends ExtensionElementProvider<OmemoB
|
|||
}
|
||||
// <preKeyPublic preKeyId='424242'>
|
||||
else if (inPreKeys && name.equals(PRE_KEY_PUB)) {
|
||||
for (int i = 0; i < parser.getAttributeCount(); i++) {
|
||||
for (int i = 0; i < attributeCount; i++) {
|
||||
if (parser.getAttributeName(i).equals(PRE_KEY_ID)) {
|
||||
preKeys.put(Integer.parseInt(parser.getAttributeValue(i)),
|
||||
parser.nextText());
|
||||
|
@ -92,11 +90,14 @@ public class OmemoBundleVAxolotlProvider extends ExtensionElementProvider<OmemoB
|
|||
}
|
||||
}
|
||||
break;
|
||||
case END_TAG:
|
||||
case END_ELEMENT:
|
||||
if (name.equals(BUNDLE)) {
|
||||
stop = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// Catch all for incomplete switch (MissingCasesInEnumSwitch) statement.
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new OmemoBundleElement_VAxolotl(signedPreKeyId, signedPreKey, signedPreKeySignature, identityKey, preKeys);
|
||||
|
|
|
@ -19,8 +19,6 @@ package org.jivesoftware.smackx.omemo.provider;
|
|||
import static org.jivesoftware.smackx.omemo.element.OmemoDeviceListElement.DEVICE;
|
||||
import static org.jivesoftware.smackx.omemo.element.OmemoDeviceListElement.ID;
|
||||
import static org.jivesoftware.smackx.omemo.element.OmemoDeviceListElement.LIST;
|
||||
import static org.xmlpull.v1.XmlPullParser.END_TAG;
|
||||
import static org.xmlpull.v1.XmlPullParser.START_TAG;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashSet;
|
||||
|
@ -28,12 +26,11 @@ import java.util.Set;
|
|||
|
||||
import org.jivesoftware.smack.packet.XmlEnvironment;
|
||||
import org.jivesoftware.smack.provider.ExtensionElementProvider;
|
||||
import org.jivesoftware.smack.xml.XmlPullParser;
|
||||
import org.jivesoftware.smack.xml.XmlPullParserException;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoDeviceListElement_VAxolotl;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
/**
|
||||
* Smack ExtensionProvider that parses OMEMO device list element into OmemoDeviceListElement objects.
|
||||
*
|
||||
|
@ -46,10 +43,10 @@ public class OmemoDeviceListVAxolotlProvider extends ExtensionElementProvider<Om
|
|||
Set<Integer> deviceListIds = new HashSet<>();
|
||||
boolean stop = false;
|
||||
while (!stop) {
|
||||
int tag = parser.next();
|
||||
XmlPullParser.Event tag = parser.next();
|
||||
String name = parser.getName();
|
||||
switch (tag) {
|
||||
case START_TAG:
|
||||
case START_ELEMENT:
|
||||
if (name.equals(DEVICE)) {
|
||||
for (int i = 0; i < parser.getAttributeCount(); i++) {
|
||||
if (parser.getAttributeName(i).equals(ID)) {
|
||||
|
@ -59,11 +56,14 @@ public class OmemoDeviceListVAxolotlProvider extends ExtensionElementProvider<Om
|
|||
}
|
||||
}
|
||||
break;
|
||||
case END_TAG:
|
||||
case END_ELEMENT:
|
||||
if (name.equals(LIST)) {
|
||||
stop = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// Catch all for incomplete switch (MissingCasesInEnumSwitch) statement.
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new OmemoDeviceListElement_VAxolotl(deviceListIds);
|
||||
|
|
|
@ -18,8 +18,6 @@ package org.jivesoftware.smackx.omemo.provider;
|
|||
|
||||
import static org.jivesoftware.smackx.omemo.element.OmemoElement.ATTR_PAYLOAD;
|
||||
import static org.jivesoftware.smackx.omemo.element.OmemoElement.NAME_ENCRYPTED;
|
||||
import static org.xmlpull.v1.XmlPullParser.END_TAG;
|
||||
import static org.xmlpull.v1.XmlPullParser.START_TAG;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
@ -27,14 +25,14 @@ import java.util.ArrayList;
|
|||
import org.jivesoftware.smack.packet.XmlEnvironment;
|
||||
import org.jivesoftware.smack.provider.ExtensionElementProvider;
|
||||
import org.jivesoftware.smack.util.stringencoder.Base64;
|
||||
import org.jivesoftware.smack.xml.XmlPullParser;
|
||||
import org.jivesoftware.smack.xml.XmlPullParserException;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoElement_VAxolotl;
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoHeaderElement;
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoHeaderElement_VAxolotl;
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoKeyElement;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
/**
|
||||
* Smack ExtensionProvider that parses incoming OMEMO Message element into OmemoMessageElement objects.
|
||||
*
|
||||
|
@ -51,10 +49,10 @@ public class OmemoVAxolotlProvider extends ExtensionElementProvider<OmemoElement
|
|||
byte[] payload = null;
|
||||
|
||||
while (inEncrypted) {
|
||||
int tag = parser.next();
|
||||
XmlPullParser.Event tag = parser.next();
|
||||
String name = parser.getName();
|
||||
switch (tag) {
|
||||
case START_TAG:
|
||||
case START_ELEMENT:
|
||||
switch (name) {
|
||||
case OmemoHeaderElement.NAME_HEADER:
|
||||
for (int i = 0; i < parser.getAttributeCount(); i++) {
|
||||
|
@ -83,11 +81,14 @@ public class OmemoVAxolotlProvider extends ExtensionElementProvider<OmemoElement
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case END_TAG:
|
||||
case END_ELEMENT:
|
||||
if (name.equals(NAME_ENCRYPTED)) {
|
||||
inEncrypted = false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// Catch all for incomplete switch (MissingCasesInEnumSwitch) statement.
|
||||
break;
|
||||
}
|
||||
}
|
||||
OmemoHeaderElement_VAxolotl header = new OmemoHeaderElement_VAxolotl(sid, keys, iv);
|
||||
|
|
|
@ -18,6 +18,7 @@ package org.jivesoftware.smackx.omemo.util;
|
|||
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smack.util.Objects;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.OmemoMessage;
|
||||
|
||||
public class MessageOrOmemoMessage {
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.security.NoSuchAlgorithmException;
|
|||
import java.security.NoSuchProviderException;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.crypto.BadPaddingException;
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.IllegalBlockSizeException;
|
||||
|
@ -37,6 +38,7 @@ import javax.crypto.spec.IvParameterSpec;
|
|||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.OmemoRatchet;
|
||||
import org.jivesoftware.smackx.omemo.OmemoService;
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoElement;
|
||||
|
|
|
@ -26,11 +26,12 @@ import org.jivesoftware.smack.test.util.SmackTestSuite;
|
|||
import org.jivesoftware.smack.test.util.TestUtils;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
import org.jivesoftware.smack.util.stringencoder.Base64;
|
||||
import org.jivesoftware.smack.xml.XmlPullParser;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoBundleElement_VAxolotl;
|
||||
import org.jivesoftware.smackx.omemo.provider.OmemoBundleVAxolotlProvider;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
|
||||
/**
|
||||
* Test serialization and parsing of the OmemoBundleVAxolotlElement.
|
||||
|
|
|
@ -23,12 +23,12 @@ import java.util.HashSet;
|
|||
|
||||
import org.jivesoftware.smack.test.util.SmackTestSuite;
|
||||
import org.jivesoftware.smack.test.util.TestUtils;
|
||||
import org.jivesoftware.smack.xml.XmlPullParser;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoDeviceListElement_VAxolotl;
|
||||
import org.jivesoftware.smackx.omemo.provider.OmemoDeviceListVAxolotlProvider;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
|
||||
/**
|
||||
* Test serialization and parsing of DeviceListElement.
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.util.TreeMap;
|
|||
|
||||
import org.jivesoftware.smack.test.util.SmackTestSuite;
|
||||
import org.jivesoftware.smack.test.util.TestUtils;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoBundleElement_VAxolotl;
|
||||
import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
|
||||
import org.jivesoftware.smackx.omemo.internal.OmemoDevice;
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.util.Date;
|
|||
import java.util.HashSet;
|
||||
|
||||
import org.jivesoftware.smack.test.util.SmackTestSuite;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.internal.OmemoDevice;
|
||||
|
||||
import org.junit.Test;
|
||||
|
|
|
@ -24,6 +24,7 @@ import org.jivesoftware.smack.test.util.SmackTestSuite;
|
|||
import org.jivesoftware.smack.test.util.TestUtils;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
import org.jivesoftware.smack.util.stringencoder.Base64;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoElement_VAxolotl;
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoHeaderElement_VAxolotl;
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoKeyElement;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue