private void startVpn() { if (LaunchService.isVpnRunning()) { LogUtils.e("vpn is already running, do not start it again"); return; } Intent intent = VpnService.prepare(MainActivity.this); if (intent == null) { onActivityResult(ASK_VPN_PERMISSION, RESULT_OK, null); } else { startActivityForResult(intent, ASK_VPN_PERMISSION); } }
@Override public void onDownloaded(String url, String downloadTo) { downloaded = true; ActivityCompat.invalidateOptionsMenu(this); updateStatus(_(R.string.status_downloaded) + " " + Uri.parse(url).getLastPathSegment()); setExiting(); try { ManagerProcess.kill(); } catch (Exception e) { LogUtils.e("failed to kill manager", e); } ApkUtils.install(this, downloadTo); }
private String getApnName() { try { ConnectivityManager conManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ni = conManager.getActiveNetworkInfo(); if (null == ni) { return null; } return ni.getExtraInfo(); } catch (Exception e) { LogUtils.e("failed to get apn name", e); return null; } }
private void attachLogFiles(Intent i, String... logFileNames) { ArrayList<Uri> logFiles = new ArrayList<Uri>(); for (String logFileName : logFileNames) { File logFile = new File(LOG_DIR + "/" + logFileName); if (logFile.exists()) { logFiles.add(Uri.fromFile(logFile)); } } try { i.putParcelableArrayListExtra(Intent.EXTRA_STREAM, logFiles); } catch (Exception e) { LogUtils.e("failed to attach log", e); } }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { try { if (ASK_VPN_PERMISSION == requestCode) { if (resultCode == RESULT_OK) { if (LaunchService.SOCKS_VPN_SERVICE_CLASS == null) { onHandleFatalError("vpn class not loaded"); } else { updateStatus(_(R.string.status_launch_vpn)); stopService(new Intent(this, LaunchService.SOCKS_VPN_SERVICE_CLASS)); startService(new Intent(this, LaunchService.SOCKS_VPN_SERVICE_CLASS)); uninstallOldVersion(); } } else { onHandleFatalError(_(R.string.status_vpn_rejected)); LogUtils.e("failed to start vpn service: " + resultCode); } } else { super.onActivityResult(requestCode, resultCode, data); } } catch (Exception e) { LogUtils.e("failed to handle onActivityResult", e); } }
private String copyLog(String logFileName) { File destFile = new File(LOG_DIR + "/" + logFileName); if (destFile.exists()) { destFile.delete(); } try { FileInputStream inputStream = new FileInputStream("/data/data/fq.router2/log/" + logFileName); try { FileOutputStream outputStream = new FileOutputStream(LOG_DIR + "/" + logFileName); try { IOUtils.copy(inputStream, outputStream); } finally { outputStream.close(); } } finally { inputStream.close(); } } catch (Exception e) { LogUtils.e("failed to copy " + logFileName, e); return "\n" + "failed to copy " + logFileName + "\n" + e; } return ""; }
private String createLogFiles() { if (!new File(LOG_DIR).exists()) { new File(LOG_DIR).mkdir(); } String error = ""; try { ShellUtils.sudo(ShellUtils.findCommand("getprop"), ">", LOG_DIR + "/getprop.log"); } catch (Exception e) { LogUtils.e("failed to execute getprop", e); error += "\n" + "failed to execute getprop" + "\n" + e; } try { ShellUtils.sudo( ShellUtils.findCommand("logcat"), "-d", "-v", "time", "-s", "fqrouter:V", ">", LOG_DIR + "/logcat.log"); } catch (Exception e) { LogUtils.e("failed to execute logcat", e); error += "\n" + "failed to execute logcat" + "\n" + e; } try { ShellUtils.sudo( ShellUtils.findCommand("iptables"), "-L", "-v", "-n", ">", LOG_DIR + "/iptables.log"); } catch (Exception e) { LogUtils.e("failed to execute iptables for filter table", e); error += "\n" + "failed to execute iptables for filter table" + "\n" + e; } try { ShellUtils.sudo( ShellUtils.findCommand("iptables"), "-t", "nat", "-L", "-v", "-n", ">>", LOG_DIR + "/iptables.log"); } catch (Exception e) { LogUtils.e("failed to execute iptables for nat table", e); error += "\n" + "failed to execute iptables for nat table" + "\n" + e; } try { ShellUtils.sudo( "/data/data/fq.router2/busybox", "chmod", "0666", "/data/data/fq.router2/log/*.log"); } catch (Exception e) { LogUtils.e("failed to change log file permission", e); error += "\n" + "failed to change log file permission using busybox chmod" + "\n" + e; try { ShellUtils.sudo(ShellUtils.findCommand("chmod"), "0666", "/data/data/fq.router2/log/*.log"); } catch (Exception e2) { LogUtils.e("failed to change log file permission", e2); error += "\n" + "failed to change log file permission using system chmod" + "\n" + e2; } } error += copyLog("manager.log"); error += copyLog("fqsocks.log"); error += copyLog("fqsocks.log.1"); error += copyLog("fqdns.log"); error += copyLog("fqting.log"); error += copyLog("fqlan.log"); error += copyLog("scan.log"); error += copyLog("wifi.log"); error += copyLog("wifi.log.1"); error += copyLog("current-java.log"); error += copyLog("current-python.log"); return error; }