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:
parent
792a9a348b
commit
a23eb6aeea
10 changed files with 128 additions and 48 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue