JingleS5BTransportInfo.java

  1. /**
  2.  *
  3.  * Copyright 2017 Paul Schaub
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *     http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package org.jivesoftware.smackx.jingle.transports.jingle_s5b.elements;

  18. import org.jivesoftware.smack.packet.XmlEnvironment;
  19. import org.jivesoftware.smack.util.XmlStringBuilder;

  20. import org.jivesoftware.smackx.jingle.element.JingleContentTransportInfo;

  21. /**
  22.  * Class representing possible SOCKS5 TransportInfo elements.
  23.  * @see <a href="https://xmpp.org/extensions/xep-0260.html">XEP-0260: Jingle SOCKS5 Bytestreams Transport Method 1.0.3 (2018-05-15)</a>
  24.  */
  25. public abstract class JingleS5BTransportInfo implements JingleContentTransportInfo {

  26.     public static final String NAMESPACE = JingleS5BTransport.NAMESPACE_V1;

  27.     @Override
  28.     public final String getNamespace() {
  29.         return NAMESPACE;
  30.     }

  31.     public abstract static class JingleS5BCandidateTransportInfo extends JingleS5BTransportInfo {
  32.         public static final String ATTR_CID = "cid";

  33.         private final String candidateId;

  34.         protected JingleS5BCandidateTransportInfo(String candidateId) {
  35.             this.candidateId = candidateId;
  36.         }

  37.         public final String getCandidateId() {
  38.             return candidateId;
  39.         }

  40.         @Override
  41.         public final XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) {
  42.             XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment);
  43.             xml.attribute(ATTR_CID, getCandidateId());
  44.             xml.closeEmptyElement();
  45.             return xml;
  46.         }

  47.         @Override
  48.         public final boolean equals(Object other) {
  49.             if (!(other instanceof JingleS5BCandidateTransportInfo)) {
  50.                 return false;
  51.             }

  52.             JingleS5BCandidateTransportInfo otherCandidateTransportInfo = (JingleS5BCandidateTransportInfo) other;
  53.             return toXML().toString().equals(otherCandidateTransportInfo.toXML().toString());
  54.         }

  55.         @Override
  56.         public final int hashCode() {
  57.             return getCandidateId().toString().hashCode();
  58.         }
  59.     }

  60.     public static final class CandidateActivated extends JingleS5BCandidateTransportInfo {
  61.         public static final String ELEMENT = "activated";

  62.         public CandidateActivated(String candidateId) {
  63.             super(candidateId);
  64.         }

  65.         @Override
  66.         public String getElementName() {
  67.             return ELEMENT;
  68.         }
  69.     }

  70.     public static final class CandidateUsed extends JingleS5BCandidateTransportInfo {
  71.         public static final String ELEMENT = "candidate-used";

  72.         public CandidateUsed(String candidateId) {
  73.             super(candidateId);
  74.         }

  75.         @Override
  76.         public String getElementName() {
  77.             return ELEMENT;
  78.         }
  79.     }

  80.     public static final class CandidateError extends JingleS5BTransportInfo {
  81.         public static final CandidateError INSTANCE = new CandidateError();

  82.         public static final String ELEMENT = "candidate-error";

  83.         private CandidateError() {
  84.         }

  85.         @Override
  86.         public String getElementName() {
  87.             return ELEMENT;
  88.         }

  89.         @Override
  90.         public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
  91.             XmlStringBuilder xml = new XmlStringBuilder();
  92.             xml.halfOpenElement(this);
  93.             xml.closeEmptyElement();
  94.             return xml;
  95.         }

  96.         @Override
  97.         public boolean equals(Object other) {
  98.             return other == INSTANCE;
  99.         }

  100.         @Override
  101.         public int hashCode() {
  102.             return toXML().toString().hashCode();
  103.         }
  104.     }

  105.     public static final class ProxyError extends JingleS5BTransportInfo {
  106.         public static final ProxyError INSTANCE = new ProxyError();

  107.         public static final String ELEMENT = "proxy-error";

  108.         private ProxyError() {
  109.         }

  110.         @Override
  111.         public String getElementName() {
  112.             return ELEMENT;
  113.         }

  114.         @Override
  115.         public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
  116.             XmlStringBuilder xml = new XmlStringBuilder();
  117.             xml.halfOpenElement(this);
  118.             xml.closeEmptyElement();
  119.             return xml;
  120.         }

  121.         @Override
  122.         public boolean equals(Object other) {
  123.             return other == INSTANCE;
  124.         }

  125.         @Override
  126.         public int hashCode() {
  127.             return toXML().toString().hashCode();
  128.         }
  129.     }
  130. }