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}