com.qiniu.android.dns.local.Hosts Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of happy-dns Show documentation
Show all versions of happy-dns Show documentation
Qiniu Happy Dns for Android
package com.qiniu.android.dns.local;
import com.qiniu.android.dns.Domain;
import com.qiniu.android.dns.NetworkInfo;
import java.util.ArrayList;
import java.util.Hashtable;
/**
* Created by bailong on 15/6/18.
*/
public final class Hosts {
private final Hashtable> hosts = new Hashtable<>();
public String[] query(Domain domain, NetworkInfo info) {
ArrayList values = hosts.get(domain.domain);
if (values == null || values.isEmpty()) {
return null;
}
if (values.size() > 1) {
Value first = values.get(0);
values.remove(0);
values.add(first);
}
values = filter(values, info);
return toIps(values);
}
private ArrayList filter(ArrayList origin, NetworkInfo info) {
ArrayList normal = new ArrayList<>();
ArrayList special = new ArrayList<>();
for (Value v : origin) {
if (v.provider == NetworkInfo.ISP_GENERAL) {
normal.add(v);
}
if (info.provider != NetworkInfo.ISP_GENERAL
&& v.provider == info.provider) {
special.add(v);
}
}
if (special.size() != 0) {
return special;
}
return normal;
}
public String[] toIps(ArrayList vals) {
int size = vals.size();
String[] r = new String[size];
for (int i = 0; i < size; i++) {
Value v = vals.get(i);
r[i] = v.ip;
}
return r;
}
public Hosts put(String domain, Value val) {
ArrayList vals = hosts.get(domain);
if (vals == null) {
vals = new ArrayList<>();
}
vals.add(val);
hosts.put(domain, vals);
return this;
}
public Hosts put(String domain, String val) {
put(domain, new Value(val));
return this;
}
public static class Value {
public final String ip;
public final int provider;
public Value(String ip, int provider) {
this.ip = ip;
this.provider = provider;
}
public Value(String ip) {
this(ip, NetworkInfo.ISP_GENERAL);
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || !(o instanceof Value)) {
return false;
}
Value another = (Value) o;
return this.ip.equals(another.ip)
&& this.provider == another.provider;
}
}
}