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