16bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker/*
26bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * Copyright (C) 2015 The Android Open Source Project
36bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker *
46bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * Licensed under the Apache License, Version 2.0 (the "License");
56bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * you may not use this file except in compliance with the License.
66bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * You may obtain a copy of the License at
76bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker *
86bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker *      http://www.apache.org/licenses/LICENSE-2.0
96bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker *
106bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * Unless required by applicable law or agreed to in writing, software
116bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * distributed under the License is distributed on an "AS IS" BASIS,
126bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * See the License for the specific language governing permissions and
146bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * limitations under the License.
156bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker */
166bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
176bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubakerpackage android.security.net.config;
186bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
196bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubakerimport java.util.Locale;
206bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker/** @hide */
216bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubakerpublic final class Domain {
226bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    /**
236bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker     * Lower case hostname for this domain rule.
246bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker     */
256bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public final String hostname;
266bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
276bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    /**
286bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker     * Whether this domain includes subdomains.
296bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker     */
306bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public final boolean subdomainsIncluded;
316bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
326bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public Domain(String hostname, boolean subdomainsIncluded) {
336bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        if (hostname == null) {
346bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker            throw new NullPointerException("Hostname must not be null");
356bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        }
366bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        this.hostname = hostname.toLowerCase(Locale.US);
376bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        this.subdomainsIncluded = subdomainsIncluded;
386bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    }
396bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
406bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    @Override
416bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public int hashCode() {
426bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        return hostname.hashCode() ^ (subdomainsIncluded ? 1231 : 1237);
436bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    }
446bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
456bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    @Override
466bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public boolean equals(Object other) {
476bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        if (other == this) {
486bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker            return true;
496bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        }
506bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        if (!(other instanceof Domain)) {
516bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker            return false;
526bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        }
536bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        Domain otherDomain = (Domain) other;
546bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        return otherDomain.subdomainsIncluded == this.subdomainsIncluded &&
556bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker                otherDomain.hostname.equals(this.hostname);
566bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    }
576bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker}
58