1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43:
44: public final class ProtocolVersion
45: implements Comparable<ProtocolVersion>, Constructed
46: {
47:
48:
49:
50:
51: public static final ProtocolVersion SSL_3 = new ProtocolVersion(3, 0);
52: public static final ProtocolVersion TLS_1 = new ProtocolVersion(3, 1);
53: public static final ProtocolVersion TLS_1_1 = new ProtocolVersion(3, 2);
54:
55: private final int major;
56: private final int minor;
57:
58:
59:
60:
61: private ProtocolVersion(int major, int minor)
62: {
63: this.major = major;
64: this.minor = minor;
65: }
66:
67:
68:
69:
70: public static ProtocolVersion read(InputStream in) throws IOException
71: {
72: int major = in.read() & 0xFF;
73: int minor = in.read() & 0xFF;
74: return getInstance(major, minor);
75: }
76:
77: public static ProtocolVersion forName (final String name)
78: {
79: if (name.equalsIgnoreCase ("SSLv3"))
80: return SSL_3;
81: if (name.equalsIgnoreCase ("TLSv1"))
82: return TLS_1;
83: if (name.equalsIgnoreCase("TLSv1.1"))
84: return TLS_1_1;
85: throw new IllegalArgumentException ("unknown protocol name: " + name);
86: }
87:
88: public static ProtocolVersion getInstance(final int major, final int minor)
89: {
90: if (major == 3)
91: {
92: switch (minor)
93: {
94: case 0: return SSL_3;
95: case 1: return TLS_1;
96: case 2: return TLS_1_1;
97: }
98: }
99: return new ProtocolVersion(major, minor);
100: }
101:
102: public static ProtocolVersion getInstance (final short raw_value)
103: {
104: int major = raw_value >>> 8 & 0xFF;
105: int minor = raw_value & 0xFF;
106: return getInstance (major, minor);
107: }
108:
109:
110:
111:
112: public int length ()
113: {
114: return 2;
115: }
116:
117: public byte[] getEncoded()
118: {
119: return new byte[] {
120: (byte) major, (byte) minor
121: };
122: }
123:
124: public int major()
125: {
126: return major;
127: }
128:
129: public int minor()
130: {
131: return minor;
132: }
133:
134: public int rawValue ()
135: {
136: return (major << 8) | minor;
137: }
138:
139: public boolean equals(Object o)
140: {
141: if (!(o instanceof ProtocolVersion))
142: {
143: return false;
144: }
145: return ((ProtocolVersion) o).major == this.major
146: && ((ProtocolVersion) o).minor == this.minor;
147: }
148:
149: public int hashCode()
150: {
151: return major << 8 | minor;
152: }
153:
154: public int compareTo(ProtocolVersion that)
155: {
156: if (major > that.major)
157: {
158: return 1;
159: }
160: else if (major < that.major)
161: {
162: return -1;
163: }
164:
165: if (minor > that.minor)
166: {
167: return 1;
168: }
169: else if (minor < that.minor)
170: {
171: return -1;
172: }
173: return 0;
174: }
175:
176: public String toString (String prefix)
177: {
178: return toString ();
179: }
180:
181: public String toString()
182: {
183: if (this == SSL_3)
184: {
185: return "SSLv3";
186: }
187: else if (this == TLS_1)
188: {
189: return "TLSv1";
190: }
191: else if (this == TLS_1_1)
192: {
193: return "TLSv1.1";
194: }
195: else
196: {
197: return "Unsupported; major=" + major + " minor=" + minor;
198: }
199: }
200: }