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