2017-05-30 08:45:27 +02:00
|
|
|
/**
|
|
|
|
*
|
2019-09-07 18:17:08 +02:00
|
|
|
* Copyright 2017-2019 Florian Schmaus
|
2017-05-30 08:45:27 +02:00
|
|
|
*
|
|
|
|
* 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 java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
|
2019-09-07 18:17:08 +02:00
|
|
|
import org.jivesoftware.smack.packet.FullyQualifiedElement;
|
|
|
|
import org.jivesoftware.smack.packet.XmlEnvironment;
|
2017-06-14 00:00:27 +02:00
|
|
|
import org.jivesoftware.smack.util.StringUtils;
|
2017-05-30 08:45:27 +02:00
|
|
|
import org.jivesoftware.smack.util.XmlStringBuilder;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The Jingle 'reason' element.
|
|
|
|
*
|
|
|
|
* @see <a href="https://xmpp.org/extensions/xep-0166.html#def-reason">XEP-0166 § 7.4</a>
|
|
|
|
*
|
|
|
|
*/
|
2019-09-07 18:17:08 +02:00
|
|
|
public class JingleReason implements FullyQualifiedElement {
|
2017-05-30 08:45:27 +02:00
|
|
|
|
|
|
|
public static final String ELEMENT = "reason";
|
2019-09-07 18:17:08 +02:00
|
|
|
public static final String NAMESPACE = Jingle.NAMESPACE;
|
2017-05-30 08:45:27 +02:00
|
|
|
|
2017-06-14 00:00:27 +02:00
|
|
|
public static AlternativeSession AlternativeSession(String sessionId) {
|
|
|
|
return new AlternativeSession(sessionId);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static final JingleReason Busy = new JingleReason(Reason.busy);
|
|
|
|
public static final JingleReason Cancel = new JingleReason(Reason.cancel);
|
|
|
|
public static final JingleReason ConnectivityError = new JingleReason(Reason.connectivity_error);
|
|
|
|
public static final JingleReason Decline = new JingleReason(Reason.decline);
|
|
|
|
public static final JingleReason Expired = new JingleReason(Reason.expired);
|
|
|
|
public static final JingleReason FailedApplication = new JingleReason(Reason.failed_application);
|
|
|
|
public static final JingleReason FailedTransport = new JingleReason(Reason.failed_transport);
|
|
|
|
public static final JingleReason GeneralError = new JingleReason(Reason.general_error);
|
|
|
|
public static final JingleReason Gone = new JingleReason(Reason.gone);
|
|
|
|
public static final JingleReason IncompatibleParameters = new JingleReason(Reason.incompatible_parameters);
|
|
|
|
public static final JingleReason MediaError = new JingleReason(Reason.media_error);
|
|
|
|
public static final JingleReason SecurityError = new JingleReason(Reason.security_error);
|
|
|
|
public static final JingleReason Success = new JingleReason(Reason.success);
|
|
|
|
public static final JingleReason Timeout = new JingleReason(Reason.timeout);
|
|
|
|
public static final JingleReason UnsupportedApplications = new JingleReason(Reason.unsupported_applications);
|
|
|
|
public static final JingleReason UnsupportedTransports = new JingleReason(Reason.unsupported_transports);
|
|
|
|
|
2017-05-30 08:45:27 +02:00
|
|
|
public enum Reason {
|
|
|
|
alternative_session,
|
|
|
|
busy,
|
|
|
|
cancel,
|
|
|
|
connectivity_error,
|
|
|
|
decline,
|
|
|
|
expired,
|
|
|
|
failed_application,
|
|
|
|
failed_transport,
|
|
|
|
general_error,
|
|
|
|
gone,
|
|
|
|
incompatible_parameters,
|
|
|
|
media_error,
|
|
|
|
security_error,
|
|
|
|
success,
|
|
|
|
timeout,
|
|
|
|
unsupported_applications,
|
|
|
|
unsupported_transports,
|
|
|
|
;
|
|
|
|
|
2017-06-14 00:00:27 +02:00
|
|
|
protected static final Map<String, Reason> LUT = new HashMap<>(Reason.values().length);
|
2017-05-30 08:45:27 +02:00
|
|
|
|
|
|
|
static {
|
|
|
|
for (Reason reason : Reason.values()) {
|
|
|
|
LUT.put(reason.toString(), reason);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-06-14 00:00:27 +02:00
|
|
|
protected final String asString;
|
2017-05-30 08:45:27 +02:00
|
|
|
|
2017-06-14 00:00:27 +02:00
|
|
|
Reason() {
|
2017-05-30 08:45:27 +02:00
|
|
|
asString = name().replace('_', '-');
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return asString;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Reason fromString(String string) {
|
|
|
|
Reason reason = LUT.get(string);
|
|
|
|
if (reason == null) {
|
|
|
|
throw new IllegalArgumentException("Unknown reason: " + string);
|
|
|
|
}
|
|
|
|
return reason;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-06-14 00:00:27 +02:00
|
|
|
protected final Reason reason;
|
2017-05-30 08:45:27 +02:00
|
|
|
|
2017-06-30 15:03:13 +02:00
|
|
|
public JingleReason(Reason reason) {
|
2017-05-30 08:45:27 +02:00
|
|
|
this.reason = reason;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getElementName() {
|
|
|
|
return ELEMENT;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-09-07 18:17:08 +02:00
|
|
|
public String getNamespace() {
|
|
|
|
return NAMESPACE;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) {
|
|
|
|
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment);
|
2017-05-30 08:45:27 +02:00
|
|
|
xml.rightAngleBracket();
|
|
|
|
|
2019-09-07 18:17:08 +02:00
|
|
|
xml.emptyElement(reason);
|
2017-05-30 08:45:27 +02:00
|
|
|
|
|
|
|
xml.closeElement(this);
|
|
|
|
return xml;
|
|
|
|
}
|
|
|
|
|
2017-07-03 10:35:46 +02:00
|
|
|
public Reason asEnum() {
|
|
|
|
return reason;
|
|
|
|
}
|
|
|
|
|
2017-06-14 00:00:27 +02:00
|
|
|
|
|
|
|
public static class AlternativeSession extends JingleReason {
|
|
|
|
|
|
|
|
public static final String SID = "sid";
|
|
|
|
private final String sessionId;
|
|
|
|
|
|
|
|
public AlternativeSession(String sessionId) {
|
|
|
|
super(Reason.alternative_session);
|
|
|
|
if (StringUtils.isNullOrEmpty(sessionId)) {
|
|
|
|
throw new NullPointerException("SessionID must not be null or empty.");
|
|
|
|
}
|
|
|
|
this.sessionId = sessionId;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-02-04 13:27:41 +01:00
|
|
|
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
2017-06-14 00:00:27 +02:00
|
|
|
XmlStringBuilder xml = new XmlStringBuilder(this);
|
|
|
|
xml.rightAngleBracket();
|
|
|
|
|
|
|
|
xml.openElement(reason.asString);
|
|
|
|
xml.openElement(SID);
|
|
|
|
xml.append(sessionId);
|
|
|
|
xml.closeElement(SID);
|
|
|
|
xml.closeElement(reason.asString);
|
|
|
|
|
|
|
|
xml.closeElement(this);
|
|
|
|
return xml;
|
|
|
|
}
|
2017-07-06 16:55:12 +02:00
|
|
|
|
|
|
|
public String getAlternativeSessionId() {
|
|
|
|
return sessionId;
|
|
|
|
}
|
2017-06-14 00:00:27 +02:00
|
|
|
}
|
2017-05-30 08:45:27 +02:00
|
|
|
}
|