1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2025-09-10 17:49:38 +02:00

Add UnknownSecurityElement

Fix parsing of JingleSecurityElements
Switch to 12 byte IV for AES keys
This commit is contained in:
vanitasvitae 2017-08-09 10:45:34 +02:00
parent 792a9a348b
commit a23eb6aeea
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
10 changed files with 128 additions and 48 deletions

View file

@ -33,6 +33,14 @@ public abstract class JingleContentSecurityElement implements ExtensionElement {
public static final String ELEMENT = "security";
private JingleContentSecurityInfoElement securityInfo;
public JingleContentSecurityElement() {
}
public JingleContentSecurityElement(JingleContentSecurityInfoElement info) {
this.securityInfo = info;
}
@Override
public String getElementName() {
return ELEMENT;

View file

@ -0,0 +1,54 @@
/**
*
* Copyright 2017 Paul Schaub.
*
* 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.
*/
package org.jivesoftware.smackx.jingle.element;
import org.jivesoftware.smack.packet.StandardExtensionElement;
import org.jivesoftware.smack.util.XmlStringBuilder;
public final class UnknownJingleContentSecurityElement extends JingleContentSecurityElement {
private final StandardExtensionElement standardExtensionElement;
public UnknownJingleContentSecurityElement(StandardExtensionElement standardExtensionElement) {
super();
this.standardExtensionElement = standardExtensionElement;
}
@Override
public String getElementName() {
return standardExtensionElement.getElementName();
}
@Override
public String getNamespace() {
return standardExtensionElement.getNamespace();
}
@Override
public XmlStringBuilder toXML() {
return standardExtensionElement.toXML();
}
@Override
public JingleContentSecurityInfoElement getSecurityInfo() {
throw new UnsupportedOperationException();
}
public StandardExtensionElement getStandardExtensionElement() {
return standardExtensionElement;
}
}

View file

@ -26,10 +26,12 @@ import org.jivesoftware.smackx.jingle.JingleManager;
import org.jivesoftware.smackx.jingle.element.JingleAction;
import org.jivesoftware.smackx.jingle.element.JingleContentDescriptionElement;
import org.jivesoftware.smackx.jingle.element.JingleContentElement;
import org.jivesoftware.smackx.jingle.element.JingleContentSecurityElement;
import org.jivesoftware.smackx.jingle.element.JingleContentTransportElement;
import org.jivesoftware.smackx.jingle.element.JingleElement;
import org.jivesoftware.smackx.jingle.element.JingleReasonElement;
import org.jivesoftware.smackx.jingle.element.UnknownJingleContentDescriptionElement;
import org.jivesoftware.smackx.jingle.element.UnknownJingleContentSecurityElement;
import org.jivesoftware.smackx.jingle.element.UnknownJingleContentTransportElement;
import org.jxmpp.jid.FullJid;
@ -120,45 +122,57 @@ public class JingleProvider extends IQProvider<JingleElement> {
outerloop: while (true) {
int eventType = parser.next();
switch (eventType) {
case XmlPullParser.START_TAG:
String tagName = parser.getName();
String namespace = parser.getNamespace();
switch (tagName) {
case JingleContentDescriptionElement.ELEMENT: {
JingleContentDescriptionElement description;
JingleContentDescriptionProvider<?> provider = JingleManager.getJingleDescriptionProvider(namespace);
if (provider == null) {
StandardExtensionElement standardExtensionElement = StandardExtensionElementProvider.INSTANCE.parse(parser);
description = new UnknownJingleContentDescriptionElement(standardExtensionElement);
case XmlPullParser.START_TAG:
String tagName = parser.getName();
String namespace = parser.getNamespace();
switch (tagName) {
case JingleContentDescriptionElement.ELEMENT: {
JingleContentDescriptionElement description;
JingleContentDescriptionProvider<?> provider = JingleManager.getJingleDescriptionProvider(namespace);
if (provider == null) {
StandardExtensionElement standardExtensionElement = StandardExtensionElementProvider.INSTANCE.parse(parser);
description = new UnknownJingleContentDescriptionElement(standardExtensionElement);
}
else {
description = provider.parse(parser);
}
builder.setDescription(description);
break;
}
case JingleContentTransportElement.ELEMENT: {
JingleContentTransportElement transport;
JingleContentTransportProvider<?> provider = JingleManager.getJingleTransportProvider(namespace);
if (provider == null) {
StandardExtensionElement standardExtensionElement = StandardExtensionElementProvider.INSTANCE.parse(parser);
transport = new UnknownJingleContentTransportElement(standardExtensionElement);
}
else {
transport = provider.parse(parser);
}
builder.setTransport(transport);
break;
}
case JingleContentSecurityElement.ELEMENT: {
JingleContentSecurityElement security;
JingleContentSecurityProvider<?> provider = JingleManager.getJingleSecurityProvider(namespace);
if (provider == null) {
StandardExtensionElement standardExtensionElement = StandardExtensionElementProvider.INSTANCE.parse(parser);
security = new UnknownJingleContentSecurityElement(standardExtensionElement);
} else {
security = provider.parse(parser);
}
builder.setSecurity(security);
break;
}
default:
LOGGER.severe("Unknown Jingle content element: " + tagName);
break;
}
else {
description = provider.parse(parser);
}
builder.setDescription(description);
break;
}
case JingleContentTransportElement.ELEMENT: {
JingleContentTransportElement transport;
JingleContentTransportProvider<?> provider = JingleManager.getJingleTransportProvider(namespace);
if (provider == null) {
StandardExtensionElement standardExtensionElement = StandardExtensionElementProvider.INSTANCE.parse(parser);
transport = new UnknownJingleContentTransportElement(standardExtensionElement);
case XmlPullParser.END_TAG:
if (parser.getDepth() == initialDepth) {
break outerloop;
}
else {
transport = provider.parse(parser);
}
builder.setTransport(transport);
break;
}
default:
LOGGER.severe("Unknown Jingle content element: " + tagName);
break;
}
break;
case XmlPullParser.END_TAG:
if (parser.getDepth() == initialDepth) {
break outerloop;
}
}
}

View file

@ -469,6 +469,7 @@ public class JingleS5BTransport extends JingleTransport<JingleS5BTransportElemen
private void handleProxyError(JingleS5BTransportInfoElement info) {
callback.onTransportFailed(new S5BTransportException.ProxyError(null));
}
/**
* Internal dummy candidate used to represent failure.
* Kinda depressing, isn't it?

View file

@ -65,7 +65,7 @@ public final class JingleS5BTransportManager extends Manager implements JingleTr
private List<Bytestream.StreamHost> localStreamHosts = null;
private List<Bytestream.StreamHost> availableStreamHosts = null;
public static boolean useLocalCandidates = false;
public static boolean useLocalCandidates = true;
public static boolean useExternalCandidates = true;
static {