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