X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=src%2Fro%2Fieval%2Ffonbot%2FHeavy.java;h=fcc5e4d40b9bbb54ab1fea6eeb6fb888864facdb;hb=9645668991d7052f71a2974553c476a02126de00;hp=e4ff0a4cb2dd2f45939d4f970d3bc9b779326a1f;hpb=617d0e2caa7067ee40511d45f326fa35d319776e;p=fonbot.git diff --git a/src/ro/ieval/fonbot/Heavy.java b/src/ro/ieval/fonbot/Heavy.java index e4ff0a4..fcc5e4d 100644 --- a/src/ro/ieval/fonbot/Heavy.java +++ b/src/ro/ieval/fonbot/Heavy.java @@ -3,11 +3,13 @@ package ro.ieval.fonbot; import static ro.ieval.fonbot.R.string.*; import static ro.ieval.fonbot.Utils.toNonNull; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileNotFoundException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; @@ -632,6 +634,9 @@ final class Heavy { case SMS: Utils.sendMessage(context, replyTo, sms_help); break; + case SMSQ: + Utils.sendMessage(context, replyTo, smsq_help); + break; case SMSLOG: Utils.sendMessage(context, replyTo, smslog_help); break; @@ -665,6 +670,17 @@ final class Heavy { case TORCH: Utils.sendMessage(context, replyTo, torch_help); break; + case GETFILE: + Utils.sendMessage(context, replyTo, getfile_help); + break; + case SH: + Utils.sendMessage(context, replyTo, sh_help); + break; + case ROOTSH: + Utils.sendMessage(context, replyTo, rootsh_help); + break; + default: + Utils.sendMessage(context, replyTo, command_not_documented); } } @@ -1405,7 +1421,7 @@ final class Heavy { * @param destination destination phone number * @param text text message contents */ - public static void sms(final Context context, final Address replyTo, final String destination, final String text){ + public static void sms(final Context context, final Address replyTo, final String destination, final String text, final boolean quiet){ final SmsManager manager=SmsManager.getDefault(); final ArrayList messages=manager.divideMessage(text); if(messages.size() > 1) @@ -1440,7 +1456,7 @@ final class Heavy { } Log.d(Heavy.class.getName(), "Sending sms to "+destination); - manager.sendMultipartTextMessage(destination, null, messages, sents, delivereds); + manager.sendMultipartTextMessage(destination, null, messages, sents, quiet ? null : delivereds); } /** @@ -1844,12 +1860,21 @@ final class Heavy { public static void reboot(final Context context, final Address replyTo, final @Nullable String reason) { final PowerManager pm=(PowerManager) context.getSystemService(Context.POWER_SERVICE); Utils.sendMessage(context, replyTo, rebooting); - pm.reboot(reason); - Runtime.getRuntime().exec(new String[]{ - "su", - "-c", - "reboot" - }).waitFor(); + try { + pm.reboot(reason); + } catch (final Exception e){ + e.printStackTrace(); + } + try { + Runtime.getRuntime().exec(new String[]{ + "su", + "-c", + "reboot" + }).waitFor(); + } catch (final Exception e){ + e.printStackTrace(); + } + Utils.sendMessage(toNonNull(context), toNonNull(replyTo), reboot_failed); } /** @@ -1918,4 +1943,30 @@ final class Heavy { public static void getfile(final Context context, final Address replyTo, final String filename, final String hostname, final int port){ new GetfileExecutableRunnable(context, replyTo, filename, hostname, port).execute(); } + + /** + * Execute a command using a given shell and reply with the output. + * + * @param context Context instance + * @param replyTo reply Address + * @param shell The shell to execute with. Usually sh or su. + * @param command The command to pass to the shell. + */ + public static void execute(final Context context, final Address replyTo, final String shell, final String command) { + try { + final Process proc = Runtime.getRuntime().exec(new String[]{ + shell, + "-c", + command + }); + final BufferedReader br = new BufferedReader (new InputStreamReader(proc.getInputStream())); + String line; + while((line = br.readLine()) != null) + Utils.sendMessage(context, replyTo, line); + proc.waitFor(); + } catch (final Exception e){ + Utils.sendMessage(context, replyTo, error_while_processing_command, e.getClass().getName(), e.getMessage()); + Log.w(Heavy.class.getName(), "Error while processing command", e); + } + } }