mirror of
https://github.com/vanitasvitae/Smack.git
synced 2025-09-09 00:59:39 +02:00
Rework XML Element hierarchy and XmlStringBuilder
- Reduce the amount of types that are subtypes of NamedElement. See javadoc of NamedElement for rationale. - Work more with XmlEnvironment in XmlStringBuilder. - Some minor changes to XmlStringBuilder API.
This commit is contained in:
parent
e9bcdf3e6d
commit
65576cf3c2
74 changed files with 653 additions and 523 deletions
|
@ -76,7 +76,7 @@ public abstract class OmemoElement implements ExtensionElement {
|
|||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder sb = new XmlStringBuilder(this, enclosingNamespace).rightAngleBracket();
|
||||
|
||||
sb.element(header);
|
||||
sb.append(header);
|
||||
|
||||
if (payload != null) {
|
||||
sb.openElement(ATTR_PAYLOAD).append(Base64.encodeToString(payload)).closeElement(ATTR_PAYLOAD);
|
||||
|
|
|
@ -19,17 +19,22 @@ package org.jivesoftware.smackx.omemo.element;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.packet.FullyQualifiedElement;
|
||||
import org.jivesoftware.smack.packet.XmlEnvironment;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.jivesoftware.smack.util.stringencoder.Base64;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.util.OmemoConstants;
|
||||
|
||||
/**
|
||||
* Header element of the message. The header contains information about the sender and the encrypted keys for
|
||||
* the recipients, as well as the iv element for AES.
|
||||
*/
|
||||
public abstract class OmemoHeaderElement implements NamedElement {
|
||||
public abstract class OmemoHeaderElement implements FullyQualifiedElement {
|
||||
|
||||
public static final String ELEMENT = "header";
|
||||
public static final String NAMESPACE = OmemoConstants.OMEMO_NAMESPACE_V_AXOLOTL;
|
||||
|
||||
public static final String NAME_HEADER = "header";
|
||||
public static final String ATTR_SID = "sid";
|
||||
public static final String ATTR_IV = "iv";
|
||||
|
||||
|
@ -62,16 +67,21 @@ public abstract class OmemoHeaderElement implements NamedElement {
|
|||
|
||||
@Override
|
||||
public String getElementName() {
|
||||
return NAME_HEADER;
|
||||
return ELEMENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder sb = new XmlStringBuilder(this);
|
||||
public String getNamespace() {
|
||||
return NAMESPACE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) {
|
||||
XmlStringBuilder sb = new XmlStringBuilder(this, enclosingXmlEnvironment);
|
||||
sb.attribute(ATTR_SID, getSid()).rightAngleBracket();
|
||||
|
||||
for (OmemoKeyElement k : getKeys()) {
|
||||
sb.element(k);
|
||||
sb.append(k);
|
||||
}
|
||||
|
||||
sb.openElement(ATTR_IV).append(Base64.encodeToString(getIv())).closeElement(ATTR_IV);
|
||||
|
|
|
@ -16,16 +16,21 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.omemo.element;
|
||||
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.packet.FullyQualifiedElement;
|
||||
import org.jivesoftware.smack.packet.XmlEnvironment;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.jivesoftware.smack.util.stringencoder.Base64;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.util.OmemoConstants;
|
||||
|
||||
/**
|
||||
* Small class to collect key (byte[]), its id and whether its a preKey or not.
|
||||
*/
|
||||
public class OmemoKeyElement implements NamedElement {
|
||||
public class OmemoKeyElement implements FullyQualifiedElement {
|
||||
|
||||
public static final String ELEMENT = "key";
|
||||
public static final String NAMESPACE = OmemoConstants.OMEMO_NAMESPACE_V_AXOLOTL;
|
||||
|
||||
public static final String NAME_KEY = "key";
|
||||
public static final String ATTR_RID = "rid";
|
||||
public static final String ATTR_PREKEY = "prekey";
|
||||
|
||||
|
@ -34,9 +39,7 @@ public class OmemoKeyElement implements NamedElement {
|
|||
private final boolean preKey;
|
||||
|
||||
public OmemoKeyElement(byte[] data, int id) {
|
||||
this.data = data;
|
||||
this.id = id;
|
||||
this.preKey = false;
|
||||
this(data, id, false);
|
||||
}
|
||||
|
||||
public OmemoKeyElement(byte[] data, int id, boolean preKey) {
|
||||
|
@ -64,12 +67,17 @@ public class OmemoKeyElement implements NamedElement {
|
|||
|
||||
@Override
|
||||
public String getElementName() {
|
||||
return NAME_KEY;
|
||||
return ELEMENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder sb = new XmlStringBuilder(this);
|
||||
public String getNamespace() {
|
||||
return NAMESPACE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) {
|
||||
XmlStringBuilder sb = new XmlStringBuilder(this, enclosingXmlEnvironment);
|
||||
|
||||
if (isPreKey()) {
|
||||
sb.attribute(ATTR_PREKEY, true);
|
||||
|
|
|
@ -54,14 +54,14 @@ public class OmemoVAxolotlProvider extends ExtensionElementProvider<OmemoElement
|
|||
switch (tag) {
|
||||
case START_ELEMENT:
|
||||
switch (name) {
|
||||
case OmemoHeaderElement.NAME_HEADER:
|
||||
case OmemoHeaderElement.ELEMENT:
|
||||
for (int i = 0; i < parser.getAttributeCount(); i++) {
|
||||
if (parser.getAttributeName(i).equals(OmemoHeaderElement.ATTR_SID)) {
|
||||
sid = Integer.parseInt(parser.getAttributeValue(i));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case OmemoKeyElement.NAME_KEY:
|
||||
case OmemoKeyElement.ELEMENT:
|
||||
boolean prekey = false;
|
||||
int rid = -1;
|
||||
for (int i = 0; i < parser.getAttributeCount(); i++) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue