diff options
Diffstat (limited to 'command/java/com/android/commands/lowpan/LowpanCtl.java')
-rw-r--r-- | command/java/com/android/commands/lowpan/LowpanCtl.java | 121 |
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 + "\""); } } |