1fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin/* 2fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * Copyright (C) 2014 The Android Open Source Project 3fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * 4fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * Licensed under the Apache License, Version 2.0 (the "License"); 5fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * you may not use this file except in compliance with the License. 6fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * You may obtain a copy of the License at 7fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * 8fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * http://www.apache.org/licenses/LICENSE-2.0 9fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * 10fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * Unless required by applicable law or agreed to in writing, software 11fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * distributed under the License is distributed on an "AS IS" BASIS, 12fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * See the License for the specific language governing permissions and 14fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * limitations under the License. 15fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin */ 16fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 17fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubinpackage libcore.tlswire.handshake; 18fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 19fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin/** 20fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * {@code CompressionMethod} enum from TLS 1.2 RFC 5246. 21fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin */ 22fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubinpublic class CompressionMethod { 23fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 24fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public static final CompressionMethod NULL = new CompressionMethod(0, "null"); 25fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public static final CompressionMethod DEFLATE = new CompressionMethod(1, "deflate"); 26fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 27fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public final int type; 28fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public final String name; 29fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 30fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin private CompressionMethod(int type, String name) { 31fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin this.type = type; 32fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin this.name = name; 33fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 34fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 35fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public static CompressionMethod valueOf(int type) { 36fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin switch (type) { 37fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin case 0: 38fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return NULL; 39fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin case 1: 40fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return DEFLATE; 41fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin default: 42fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return new CompressionMethod(type, String.valueOf(type)); 43fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 44fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 45fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 46fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin @Override 47fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public String toString() { 48fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return name; 49fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 50fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 51fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin @Override 52fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public int hashCode() { 53fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin final int prime = 31; 54fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin int result = 1; 55fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin result = prime * result + type; 56fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return result; 57fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 58fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 59fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin @Override 60fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public boolean equals(Object obj) { 61fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (this == obj) { 62fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return true; 63fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 64fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (obj == null) { 65fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return false; 66fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 67fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (getClass() != obj.getClass()) { 68fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return false; 69fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 70fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin CompressionMethod other = (CompressionMethod) obj; 71fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (type != other.type) { 72fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return false; 73fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 74fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return true; 75fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 76fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin} 77