summaryrefslogtreecommitdiff
path: root/command/java/com/android/commands/lowpan/LowpanCtl.java
diff options
context:
space:
mode:
Diffstat (limited to 'command/java/com/android/commands/lowpan/LowpanCtl.java')
-rw-r--r--command/java/com/android/commands/lowpan/LowpanCtl.java121
1 files changed, 80 insertions, 41 deletions
diff --git a/command/java/com/android/commands/lowpan/LowpanCtl.java b/command/java/com/android/commands/lowpan/LowpanCtl.java
index 8e36841..89cf086 100644
--- a/command/java/com/android/commands/lowpan/LowpanCtl.java
+++ b/command/java/com/android/commands/lowpan/LowpanCtl.java
@@ -16,6 +16,7 @@
package com.android.commands.lowpan;
+import android.net.LinkAddress;
import android.net.lowpan.ILowpanInterface;
import android.net.lowpan.LowpanBeaconInfo;
import android.net.lowpan.LowpanCredential;
@@ -26,7 +27,6 @@ import android.net.lowpan.LowpanInterface;
import android.net.lowpan.LowpanManager;
import android.net.lowpan.LowpanProvision;
import android.net.lowpan.LowpanScanner;
-import android.net.LinkAddress;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.util.AndroidRuntimeException;
@@ -85,7 +85,6 @@ public class LowpanCtl extends BaseCommand {
+ "subcommand-options:\n"
+ " -r / --raw ........................ Print only key contents\n"
+ "\n");
-
}
private class CommandErrorException extends AndroidRuntimeException {
@@ -94,21 +93,43 @@ public class LowpanCtl extends BaseCommand {
}
}
+ private class ArgumentErrorException extends IllegalArgumentException {
+ public ArgumentErrorException(String desc) {
+ super(desc);
+ }
+ }
+
private void throwCommandError(String desc) {
throw new CommandErrorException(desc);
}
+ private void throwArgumentError(String desc) {
+ throw new ArgumentErrorException(desc);
+ }
+
+ private LowpanManager getLowpanManager() {
+ if (mLowpanManager == null) {
+ mLowpanManager = LowpanManager.getManager();
+
+ if (mLowpanManager == null) {
+ System.err.println(NO_SYSTEM_ERROR_CODE);
+ throwCommandError("Can't connect to LoWPAN service; is the service running?");
+ }
+ }
+ return mLowpanManager;
+ }
+
private LowpanInterface getLowpanInterface() {
if (mLowpanInterface == null) {
if (mLowpanInterfaceName == null) {
- String interfaceArray[] = mLowpanManager.getInterfaceList();
+ String interfaceArray[] = getLowpanManager().getInterfaceList();
if (interfaceArray.length != 0) {
mLowpanInterfaceName = interfaceArray[0];
} else {
throwCommandError("No LoWPAN interfaces are present");
}
}
- mLowpanInterface = mLowpanManager.getInterface(mLowpanInterfaceName);
+ mLowpanInterface = getLowpanManager().getInterface(mLowpanInterfaceName);
if (mLowpanInterface == null) {
throwCommandError("Unknown LoWPAN interface \"" + mLowpanInterfaceName + "\"");
@@ -126,20 +147,16 @@ public class LowpanCtl extends BaseCommand {
@Override
public void onRun() throws Exception {
- mLowpanManager = LowpanManager.getManager();
-
- if (mLowpanManager == null) {
- System.err.println(NO_SYSTEM_ERROR_CODE);
- throwCommandError("Can't connect to LoWPAN service; is the service running?");
- }
-
try {
String op;
while ((op = nextArgRequired()) != null) {
if (op.equals("-I") || op.equals("--interface")) {
mLowpanInterfaceName = nextArgRequired();
+ } else if (op.equals("-h") || op.equals("--help") || op.equals("help")) {
+ onShowUsage(System.out);
+ break;
} else if (op.startsWith("-")) {
- throwCommandError("Unrecognized argument \"" + op + "\"");
+ throwArgumentError("Unrecognized argument \"" + op + "\"");
} else if (op.equals("status") || op.equals("stat")) {
runStatus();
break;
@@ -177,15 +194,31 @@ public class LowpanCtl extends BaseCommand {
runReset();
break;
} else {
- showError("Error: unknown command '" + op + "'");
+ throwArgumentError("Unrecognized argument \"" + op + "\"");
break;
}
}
} catch (ServiceSpecificException x) {
System.out.println(
"ServiceSpecificException: " + x.errorCode + ": " + x.getLocalizedMessage());
+ throw x;
+
+ } catch (ArgumentErrorException x) {
+ // Rethrow so we get syntax help.
+ throw x;
+
+ } catch (IllegalArgumentException x) {
+ // This was an argument exception that wasn't an
+ // argument error. We dump our stack trace immediately
+ // because this might not be from a command line argument.
+ x.printStackTrace(System.err);
+ System.exit(1);
+
} catch (CommandErrorException x) {
+ // Command errors are normal errors that just
+ // get printed out without any fanfare.
System.out.println("error: " + x.getLocalizedMessage());
+ System.exit(1);
}
}
@@ -225,10 +258,8 @@ public class LowpanCtl extends BaseCommand {
masterKey = HexDump.hexStringToByteArray(nextArgRequired());
} else if (arg.equals("--master-key-index")) {
masterKeyIndex = Integer.decode(nextArgRequired());
- } else if (arg.equals("--help")) {
- throwCommandError("");
} else if (arg.startsWith("-") || hasName) {
- throwCommandError("Unrecognized argument \"" + arg + "\"");
+ throwArgumentError("Unrecognized argument \"" + arg + "\"");
} else {
// This is the network name
identityBuilder.setName(arg);
@@ -247,7 +278,7 @@ public class LowpanCtl extends BaseCommand {
if (credential != null) {
builder.setLowpanCredential(credential);
} else if (credentialRequired) {
- throwCommandError("No credential (like a master key) was specified!");
+ throwArgumentError("No credential (like a master key) was specified!");
}
return builder.setLowpanIdentity(identityBuilder.build()).build();
@@ -284,9 +315,7 @@ public class LowpanCtl extends BaseCommand {
if (provision.getLowpanCredential() != null) {
System.out.println(
- "Forming "
- + provision.getLowpanIdentity()
- + " with provided credential");
+ "Forming " + provision.getLowpanIdentity() + " with provided credential");
} else {
System.out.println("Forming " + provision.getLowpanIdentity());
}
@@ -302,26 +331,37 @@ public class LowpanCtl extends BaseCommand {
sb.append(iface.getName())
.append("\t")
- .append(iface.getState() + " (" + iface.getRole() + ")");
+ .append(iface.getState());
- if (iface.isUp()) {
- sb.append(" UP");
- }
+ if (!iface.isEnabled()) {
+ sb.append(" DISABLED");
- if (iface.isConnected()) {
- sb.append(" CONNECTED");
- }
+ } else if (iface.getState() != LowpanInterface.STATE_FAULT) {
+ sb.append(" (" + iface.getRole() + ")");
- if (iface.isCommissioned()) {
- sb.append(" COMMISSIONED");
- }
+ if (iface.isUp()) {
+ sb.append(" UP");
+ }
- sb
- .append("\n\t")
- .append(getLowpanInterface().getLowpanIdentity());
+ if (iface.isConnected()) {
+ sb.append(" CONNECTED");
+ }
+
+ if (iface.isCommissioned()) {
+ sb.append(" COMMISSIONED");
+
+ LowpanIdentity identity = getLowpanInterface().getLowpanIdentity();
- for (LinkAddress addr : iface.getLinkAddresses()) {
- sb.append("\n\t").append(addr);
+ if (identity != null) {
+ sb.append("\n\t").append(identity);
+ }
+ }
+
+ if (iface.isUp()) {
+ for (LinkAddress addr : iface.getLinkAddresses()) {
+ sb.append("\n\t").append(addr);
+ }
+ }
}
sb.append("\n");
@@ -336,7 +376,7 @@ public class LowpanCtl extends BaseCommand {
if (arg.equals("--raw") || arg.equals("-r")) {
raw = true;
} else {
- throwCommandError("Unrecognized argument \"" + arg + "\"");
+ throwArgumentError("Unrecognized argument \"" + arg + "\"");
}
}
@@ -344,13 +384,12 @@ public class LowpanCtl extends BaseCommand {
if (raw) {
System.out.println(HexDump.toHexString(credential.getMasterKey()));
} else {
- System.out.println(
- iface.getName() + "\t" + credential.toSensitiveString());
+ System.out.println(iface.getName() + "\t" + credential.toSensitiveString());
}
}
private void runListInterfaces() {
- for (String name : mLowpanManager.getInterfaceList()) {
+ for (String name : getLowpanManager().getInterfaceList()) {
System.out.println(name);
}
}
@@ -363,7 +402,7 @@ public class LowpanCtl extends BaseCommand {
if (arg.equals("-c") || arg.equals("--channel")) {
scanner.addChannel(Integer.decode(nextArgRequired()));
} else {
- throwCommandError("Unrecognized argument \"" + arg + "\"");
+ throwArgumentError("Unrecognized argument \"" + arg + "\"");
}
}
@@ -401,7 +440,7 @@ public class LowpanCtl extends BaseCommand {
if (arg.equals("-c") || arg.equals("--channel")) {
scanner.addChannel(Integer.decode(nextArgRequired()));
} else {
- throwCommandError("Unrecognized argument \"" + arg + "\"");
+ throwArgumentError("Unrecognized argument \"" + arg + "\"");
}
}