001/**
002 *
003 * Copyright 2017 Paul Schaub
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 *     http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.jivesoftware.smackx.jingle.transports.jingle_s5b.elements;
018
019import org.jivesoftware.smack.packet.XmlEnvironment;
020import org.jivesoftware.smack.util.XmlStringBuilder;
021
022import org.jivesoftware.smackx.jingle.element.JingleContentTransportInfo;
023
024/**
025 * Class representing possible SOCKS5 TransportInfo elements.
026 */
027public abstract class JingleS5BTransportInfo implements JingleContentTransportInfo {
028
029    public static final String NAMESPACE = JingleS5BTransport.NAMESPACE_V1;
030
031    @Override
032    public final String getNamespace() {
033        return NAMESPACE;
034    }
035
036    public abstract static class JingleS5BCandidateTransportInfo extends JingleS5BTransportInfo {
037        public static final String ATTR_CID = "cid";
038
039        private final String candidateId;
040
041        protected JingleS5BCandidateTransportInfo(String candidateId) {
042            this.candidateId = candidateId;
043        }
044
045        public final String getCandidateId() {
046            return candidateId;
047        }
048
049        @Override
050        public final XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) {
051            XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment);
052            xml.attribute(ATTR_CID, getCandidateId());
053            xml.closeEmptyElement();
054            return xml;
055        }
056
057        @Override
058        public final boolean equals(Object other) {
059            if (!(other instanceof JingleS5BCandidateTransportInfo)) {
060                return false;
061            }
062
063            JingleS5BCandidateTransportInfo otherCandidateTransportInfo = (JingleS5BCandidateTransportInfo) other;
064            return toXML().toString().equals(otherCandidateTransportInfo.toXML().toString());
065        }
066
067        @Override
068        public final int hashCode() {
069            return getCandidateId().toString().hashCode();
070        }
071    }
072
073    public static final class CandidateActivated extends JingleS5BCandidateTransportInfo {
074        public static final String ELEMENT = "candidate-activated";
075
076        public CandidateActivated(String candidateId) {
077            super(candidateId);
078        }
079
080        @Override
081        public String getElementName() {
082            return ELEMENT;
083        }
084    }
085
086    public static final class CandidateUsed extends JingleS5BCandidateTransportInfo {
087        public static final String ELEMENT = "candidate-used";
088
089        public CandidateUsed(String candidateId) {
090            super(candidateId);
091        }
092
093        @Override
094        public String getElementName() {
095            return ELEMENT;
096        }
097    }
098
099    public static final class CandidateError extends JingleS5BTransportInfo {
100        public static final CandidateError INSTANCE = new CandidateError();
101
102        public static final String ELEMENT = "candidate-error";
103
104        private CandidateError() {
105        }
106
107        @Override
108        public String getElementName() {
109            return ELEMENT;
110        }
111
112        @Override
113        public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
114            XmlStringBuilder xml = new XmlStringBuilder();
115            xml.halfOpenElement(this);
116            xml.closeEmptyElement();
117            return xml;
118        }
119
120        @Override
121        public boolean equals(Object other) {
122            return other == INSTANCE;
123        }
124
125        @Override
126        public int hashCode() {
127            return toXML().toString().hashCode();
128        }
129    }
130
131    public static final class ProxyError extends JingleS5BTransportInfo {
132        public static final ProxyError INSTANCE = new ProxyError();
133
134        public static final String ELEMENT = "proxy-error";
135
136        private ProxyError() {
137        }
138
139        @Override
140        public String getElementName() {
141            return ELEMENT;
142        }
143
144        @Override
145        public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
146            XmlStringBuilder xml = new XmlStringBuilder();
147            xml.halfOpenElement(this);
148            xml.closeEmptyElement();
149            return xml;
150        }
151
152        @Override
153        public boolean equals(Object other) {
154            return other == INSTANCE;
155        }
156
157        @Override
158        public int hashCode() {
159            return toXML().toString().hashCode();
160        }
161    }
162}