aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/fil/libre/repwifiapp/helpers/Engine.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/fil/libre/repwifiapp/helpers/Engine.java')
-rw-r--r--app/src/fil/libre/repwifiapp/helpers/Engine.java415
1 files changed, 39 insertions, 376 deletions
diff --git a/app/src/fil/libre/repwifiapp/helpers/Engine.java b/app/src/fil/libre/repwifiapp/helpers/Engine.java
index 68d8745..225d993 100644
--- a/app/src/fil/libre/repwifiapp/helpers/Engine.java
+++ b/app/src/fil/libre/repwifiapp/helpers/Engine.java
@@ -22,167 +22,33 @@ package fil.libre.repwifiapp.helpers;
import java.net.NetworkInterface;
import java.net.SocketException;
-import java.util.ArrayList;
import java.util.Enumeration;
-import fil.libre.repwifiapp.Commons;
public abstract class Engine implements IEngine {
-
- protected String getCmdWpaSup() {
- return "wpa_supplicant -B -dd -i" + Commons.INTERFACE_NAME + " -C" + Commons.SOCKET_DIR
- + " -P" + Commons.PID_FILE + " -I" + Commons.OVERLAY_FILE + " -e"
- + Commons.ENTROPY_FILE;
- }
-
- protected String getCmdWpaCli() {
- return "wpa_cli -p" + Commons.SOCKET_DIR + " -P" + Commons.PID_FILE + " -i"
- + Commons.INTERFACE_NAME;
- }
-
- protected abstract String getCmdWpaStart();
-
- public boolean deleteFileIfExists(String filePath) {
-
- if (filePath == null) {
- return false;
- }
-
- if (filePath.contains("*")) {
- // it's safer to reject bulk rm'ing
- return false;
- }
-
- if (filePath.contains(" -r ")) {
- // only file rm'ing acceppted
- return false;
- }
-
- // needs root (it only gets used by the 4p2 engine, working in
- // /data/misc/wifi)
- return executeRootCmd("if [ -e \"" + filePath + "\" ]; then rm \"" + filePath + "\"; fi");
-
- }
-
- public boolean chmodFile(String filePath, String mod) {
- // needs root (chmod)
- return executeRootCmd("chmod " + mod + " \"" + filePath + "\"");
- }
-
- @Override
- public boolean killBackEndProcesses() {
-
- // needs root (for killall)
-
- Utils.logDebug("killing wpa_supplicant..:");
- if (executeRootCmd("killall -SIGINT wpa_supplicant")) {
- Utils.logDebug("Killed wpa_supplicant");
- } else {
- Utils.logDebug("Wpa_supplicant NOT killed.");
- }
-
- Utils.logDebug("killing dhcpcd..");
- if (executeRootCmd("killall -SIGINT dhcpcd")) {
- Utils.logDebug("Killed dhcpcd");
- } else {
- Utils.logDebug("dhcpcd NOT killed.");
- }
-
- return true;
-
- }
-
- @Override
- public boolean clearWorkingDir() {
-
- // needs root (to work within /data/misc/wifi)
-
- Utils.logDebug("clearWorkingDir():");
-
- if (executeRootCmd("rm -r " + Commons.SOCKET_DIR)) {
- Utils.logDebug("removed socket dir");
- }
-
- if (executeRootCmd("rm " + Commons.ENTROPY_FILE)) {
- Utils.logDebug("removed entropy file");
- }
-
- if (executeRootCmd("rm " + Commons.PID_FILE)) {
- Utils.logDebug("removed pidfile");
- }
-
- if (executeRootCmd("rm " + Commons.SOFTAP_FILE)) {
- Utils.logDebug("removed softap file");
- }
-
- if (executeRootCmd("rm " + Commons.WPA_CONF)) {
- Utils.logDebug("removed wpa conf file");
- }
-
- if (executeRootCmd("rm " + Commons.P2P_CONF)) {
- Utils.logDebug("removed p2p conf file");
- }
-
- return true;
-
- }
-
- @Override
- public boolean startWpaSupplicant() {
-
- Utils.logDebug("startWpaSupplicant():");
-
- // needs root (for wpa_supplicant)
- if (executeRootCmd(getCmdWpaSup())) {
- return true;
- } else {
- Utils.logDebug("Failed to start wpa");
- return false;
- }
-
- }
-
+
@Override
public AccessPointInfo[] getAvailableNetworks() {
Utils.logDebug("getAvailableNetworks():");
- // killPreviousConnections();
-
- // Is it really necessary???
- // seems that clearing /data/misc/wifi is NOT necessary
- // so, commented out - Fil 2017-03-24
- /*
- * if (! clearWorkingDir()){ Utils.logError("Failed clearing dir");
- * return null; }
- */
-
- if (!startWpaSupplicant()) {
+ if (!WpaSupplicant.start()) {
Utils.logError("Failed starting wpa_supplicant");
return null;
}
- if (!createScanScripts()) {
- Utils.logError("Failed creating scripts");
- return null;
- }
-
- if (!scanNetworks()) {
+ if (!WpaCli.scanNetworks()) {
Utils.logError("failed scanning networks");
return null;
}
- if (!getScanResults()) {
+ String scanRes = WpaCli.getScanResults();
+
+ if (scanRes == null) {
Utils.logError("failed getting scan results");
return null;
}
- // chmod 664 scan_file to make it readable
- /*
- * if (!chmodFile(Commons.getScanFile(), "664")){
- * Utils.logError("failed chmodding scan_file"); return null; }
- */
-
- AccessPointInfo[] a = AccessPointInfo.parseScanResult(Commons.getScanFile());
+ AccessPointInfo[] a = AccessPointInfo.parseScanResult(scanRes);
if (a == null) {
Utils.logError("Unable to parse scan file into AccessPointInfo array");
return a;
@@ -200,30 +66,8 @@ public abstract class Engine implements IEngine {
@Override
public boolean disconnect() {
- // needs root (for wpa_cli)
-
- if (!isWpaSupplicantRunning()) {
- return true;
- }
-
- try {
+ return WpaCli.disconnect();
- RootCommand su = new RootCommand(getCmdWpaCli() + " disconnect");
- if (su.execute() == 0) {
- String out = su.getOutput();
- if (out != null && out.trim().replace("\n", "").equals("OK")) {
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
-
- } catch (Exception e) {
- Utils.logError("Error while enabling network", e);
- return false;
- }
}
/***
@@ -231,51 +75,12 @@ public abstract class Engine implements IEngine {
*/
@Override
public ConnectionStatus getConnectionStatus() {
-
- Utils.logDebug("called getConnecitonStatus()");
- if (!isWpaSupplicantRunning()) {
- // wpa_supplicant is not running.
- // unable to determin status.
- Utils.logDebug("wpa not running, cannot get connection status.");
- return null;
-
- }
-
- try {
-
- RootCommand su = new RootCommand(getCmdWpaCli() + " status");
- if (su.execute() == 0) {
- String out = su.getOutput();
- if (out == null || out.trim().equals("")) {
- return null;
- } else {
- return ConnectionStatus.parseWpaCliOutput(out);
- }
- } else {
- return null;
- }
-
- } catch (Exception e) {
- Utils.logError("Error while executing wpa_cli status", e);
- return null;
- }
-
+ return WpaCli.getConnectionStatus();
}
@Override
public boolean isInterfaceAvailable(String ifaceName) throws SocketException {
- /*
- * String[]ifaces = getAvailableInterfaces(); if(ifaces == null ||
- * ifaces.length == 0){ return false; }
- *
- * for(String name : ifaces){
- *
- * if (name.equals(ifaceName)){ return true; } }
- *
- * return false;
- */
-
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface nif = interfaces.nextElement();
@@ -288,182 +93,40 @@ public abstract class Engine implements IEngine {
}
- @Override
- public String[] getAvailableInterfaces() {
-
- try {
-
- // No need for root for "ip link"
- // tested 2017-03-24 - Fil
- ShellCommand cmd = new ShellCommand("ip link");
- if (cmd.execute() == 0) {
-
- String out = cmd.getOutput();
- if (out == null || out.contains("\n") == false) {
- Utils.logDebug("No out from ip link");
- return null;
- }
-
- ArrayList<String> list = new ArrayList<String>();
-
- String[] lines = out.split("\n");
- for (String l : lines) {
-
- String[] fields = l.split(":");
- if (fields.length != 3) {
- continue;
- }
-
- String interfName = fields[1].trim();
- list.add(interfName);
-
- }
-
- String[] retArr = new String[list.size()];
- retArr = list.toArray(retArr);
-
- return retArr;
-
- } else {
- return null;
- }
-
- } catch (Exception e) {
- Utils.logError("Error while querying ip link", e);
- return null;
- }
-
- }
-
public boolean runDhcpcd() {
-
// needs root
- return executeRootCmd("dhcpcd " + Commons.INTERFACE_NAME);
-
- }
-
+ // option -w avoids dhcpcd forking to background,
+ // in order to keep control over its exit code, and be able to wait for it.
+ // option -A avoids ARP IP checking, we use it to save some seconds in the connection process.
+ return RootCommand.executeRootCmd("dhcpcd -w -A " + WpaSupplicant.INTERFACE_NAME);
+
+ }
+
+ public boolean runDhcpcd(DhcpSettings dhcpConfig) {
+
+ if (dhcpConfig == null || dhcpConfig.useDhcp){
+ Utils.logDebug("running dhchpc without dhcp settings, reverting to dhcp");
+ return runDhcpcd();
+ }
+
+ Utils.logDebug("Running dhcpcd with custom ip settings");
+ String cmdMask = "dhcpcd -w -A -S ip_address=%s -S routers=%s %s";
+ String cmd = String.format(cmdMask,
+ dhcpConfig.getStaticIPwithMask(),
+ dhcpConfig.getDefaultGateway(),
+ WpaSupplicant.INTERFACE_NAME);
+
+ return RootCommand.executeRootCmd(cmd);
+
+ }
+
+ public static boolean killDhcpcd(){
+ return RootCommand.executeRootCmd("killall -SIGINT dhcpcd");
+ }
+
public boolean interfaceUp() {
// needs root (tested)
- return executeRootCmd("ifconfig " + Commons.INTERFACE_NAME + " up");
- }
-
- /*
- * protected boolean executeCmd(String cmd){
- *
- * try {
- *
- * ShellCommand c = new ShellCommand(cmd); if ( c.execute() == 0){ return
- * true; }else { return false; }
- *
- * } catch (Exception e) { Utils.logError("Error executing \"" + cmd +
- * "\"",e); return false; }
- *
- * }
- */
-
- protected boolean executeRootCmd(String cmd) {
-
- try {
-
- RootCommand c = new RootCommand(cmd);
- if (c.execute() == 0) {
- return true;
- } else {
- return false;
- }
-
- } catch (Exception e) {
- Utils.logError("Error executing \"" + cmd + "\"", e);
- return false;
- }
- }
-
- protected boolean isWpaSupplicantRunning() {
-
- boolean retval = false;
-
- try {
-
- RootCommand su = new RootCommand("pidof wpa_supplicant");
- if (su.execute() == 0) {
-
- if (su.getOutput().trim().equals("")) {
- retval = false;
- } else {
- retval = true;
- }
-
- } else {
- retval = false;
- }
-
- } catch (Exception e) {
- Utils.logError("Exception during isWpaSupplicantRunning()", e);
- retval = false;
- }
-
- return retval;
-
- }
-
- protected boolean scanNetworks() {
-
- // needs root (for wpa_supplicant and wpa_cli)
- return executeRootCmd("bash " + Commons.getScriptScan());
-
- }
-
- protected boolean getScanResults() {
-
- // needs root (for wpa_supplicant and wpa_cli)
- boolean res = executeRootCmd("bash " + Commons.getScriptScanRes());
- if (!res) {
- return false;
- }
- return res;
-
- }
-
- protected boolean createScanScripts() {
-
- try {
-
- String scan = getCmdWpaCli() + " scan\n" + "if [ $? -ne 0 ]; then\n" + "exit 1\n"
- + "fi\n" + "sleep 2s\n";
-
- String scanRes = "if [ -e \"" + Commons.getScanFile() + "\" ]; then\n" + " rm \""
- + Commons.getScanFile() + "\"\n" + "fi\n" + getCmdWpaCli()
- + " scan_results > \"" + Commons.getScanFile() + "\"\n"
- + "if [ $? -ne 0 ]; then\n" + " exit 1\n" + "fi\n";
-
- if (!Utils.writeFile(Commons.getScriptScan(), scan, true)) {
-
- Exception e = Utils.getLastException();
- if (e != null) {
- Utils.logError("Error while writing scan script.", e);
- }
-
- return false;
- }
-
- if (!Utils.writeFile(Commons.getScriptScanRes(), scanRes, true)) {
-
- Exception e = Utils.getLastException();
- if (e != null) {
- Utils.logError("Error while writing getScanResults script.", e);
- }
-
- return false;
- }
-
- return true;
-
- } catch (Exception e) {
-
- Utils.logError("Error while creating the scanning script.", e);
- return false;
- }
-
+ return RootCommand.executeRootCmd("ifconfig " + WpaSupplicant.INTERFACE_NAME + " up");
}
}