百度手机卫士 v8.4.5版本的 MD5 值为:c65ef854a40bb6200c4d8c4603c58403
以下内容为反编译后的 ProxyUtils.java 源代码,内容仅作参考
package com.quickbird.mini.utils;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.quickbird.mini.vpn.proxy.HttpProxyRules;
import com.quickbird.mini.vpn.vpn.VpnServiceManager;
import com.quickbird.sdk.QuickBird;
import com.quickbird.sdk.internal.SdkConstant;
import com.quickbird.sdk.utils.QBNetworkUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONException;
public class ProxyUtils {
private static final long QB_GRAY_PKG_EXPIRED_TIME = 86400000;
private static volatile List sHttpVerbs;
private static volatile InetSocketAddress sSafeVpnProxyAdr;
private static final String QB_PROXY_CHARSET_NAME = "latin1";
private static final CharsetDecoder QB_CHARSET_DECODER = Charset.forName(QB_PROXY_CHARSET_NAME).newDecoder();
private static final Pattern PATTERN_LOCAL_ADDRESS = Pattern.compile("^172\\.20\\..*");
private static final Pattern PATTERN_REQUEST_HEADER = Pattern.compile("(?:GET|POST|OPTIONS|PUT|HEAD|CONNECT) ([^\\s]+) HTTP/1\\.\\d\\r\\n.*?Host: ([^\\s]+)\\r\\n", 32);
private static final Pattern PATTERN_REQUEST_MODE = Pattern.compile("(?:GET|POST|OPTIONS|PUT|HEAD|CONNECT) ");
private static final Pattern PATTERN_RESPOND_HEADER = Pattern.compile("HTTP/1\\.\\d");
private static final Pattern PATTERN_QB_GRAY_RESPOND_HEADER = Pattern.compile("X-QB-GRAY: ([^\\s]+)");
private static final int HTTP_PROXY_PORT = 80;
private static final InetSocketAddress BLOCK_ADDRESS = new InetSocketAddress("127.0.0.1", HTTP_PROXY_PORT);
private static final byte[] SAFE_VPN_ENCRYPT_FLAG = {-1, 59};
public static String getProxyCharsetName() {
return QB_PROXY_CHARSET_NAME;
}
public static CoderResult decode(ByteBuffer byteBuffer, CharBuffer charBuffer, boolean z) {
return QB_CHARSET_DECODER.decode(byteBuffer, charBuffer, z);
}
public static boolean isLocalHostAddress(String str) {
return PATTERN_LOCAL_ADDRESS.matcher(str).find();
}
public static boolean isHttpProxyPort(int i) {
return HTTP_PROXY_PORT == i;
}
public static Matcher getRequestHeaderMatcher(CharSequence charSequence) {
return PATTERN_REQUEST_HEADER.matcher(charSequence);
}
public static Matcher getRequestModeMatcher(CharSequence charSequence) {
return PATTERN_REQUEST_MODE.matcher(charSequence);
}
public static boolean isHttpRespondHeader(CharSequence charSequence) {
return PATTERN_RESPOND_HEADER.matcher(charSequence).find();
}
public static byte[] getHttpProxyPrefix() {
try {
return "http://".getBytes(getProxyCharsetName());
} catch (UnsupportedEncodingException e) {
return new byte[]{48};
}
}
public static InetSocketAddress getBlockAddress() {
return BLOCK_ADDRESS;
}
public static boolean isSafeVpnProxy(Context context) {
return VpnServiceManager.getInstance(context).isSafeVpnOpened() && QBNetworkUtils.isWifiNetworkType(context);
}
public static byte[] getSafeVpnEncryptFlag() {
return SAFE_VPN_ENCRYPT_FLAG;
}
public static InetSocketAddress getSafeVpnProxyAddress() {
if (sSafeVpnProxyAdr == null) {
synchronized (ProxyUtils.class) {
if (sSafeVpnProxyAdr == null) {
sSafeVpnProxyAdr = new InetSocketAddress(SdkConstant.SAFE_VPN_PROXY_URL, SdkConstant.SAFE_VPN_PROXY_PORT);
}
}
}
return sSafeVpnProxyAdr;
}
public static short getShort(byte[] bArr, int i) {
return (short) ((bArr[i + 1] << 8) | (bArr[i + 0] & 255));
}
public static List getHttpVerbs() {
if (sHttpVerbs == null) {
synchronized (ProxyUtils.class) {
if (sHttpVerbs == null) {
sHttpVerbs = new ArrayList();
try {
sHttpVerbs.add(ByteBuffer.wrap("GET ".getBytes(getProxyCharsetName())));
sHttpVerbs.add(ByteBuffer.wrap("POST".getBytes(getProxyCharsetName())));
sHttpVerbs.add(ByteBuffer.wrap("HEAD".getBytes(getProxyCharsetName())));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
return sHttpVerbs;
}
public static void matcherQbGrayRespondHeader(Context context, CharSequence charSequence) {
if (!TextUtils.isEmpty(charSequence)) {
Matcher matcher = PATTERN_QB_GRAY_RESPOND_HEADER.matcher(charSequence);
if (matcher.find()) {
String trim = matcher.group(1).trim();
if (QuickBird.SDK_DEBUG) {
Log.i(QuickBird.SDK_TAG, "Matcher gray pkg :" + trim);
}
if (!TextUtils.isEmpty(trim)) {
HttpProxyRules httpProxyRules = HttpProxyRules.getInstance(context);
long currentTimeMillis = 86400000 + System.currentTimeMillis();
ArrayList arrayList = new ArrayList();
arrayList.add(trim);
try {
httpProxyRules.addRules(2, arrayList, 1, currentTimeMillis);
} catch (IOException e) {
} catch (JSONException e2) {
}
}
}
}
}
}