mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-02 08:41:34 +00:00
279 lines
8.4 KiB
Java
Executable File
279 lines
8.4 KiB
Java
Executable File
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package com.mozilla.SUTAgentAndroid.service;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.net.ServerSocket;
|
|
import java.net.Socket;
|
|
import java.net.SocketTimeoutException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import com.mozilla.SUTAgentAndroid.R;
|
|
import com.mozilla.SUTAgentAndroid.SUTAgentAndroid;
|
|
|
|
import android.app.Notification;
|
|
import android.app.NotificationManager;
|
|
import android.app.PendingIntent;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.os.Handler;
|
|
|
|
public class RunCmdThread extends Thread
|
|
{
|
|
private ServerSocket SvrSocket = null;
|
|
private Socket socket = null;
|
|
private Handler handler = null;
|
|
boolean bListening = true;
|
|
boolean bNetError = false;
|
|
List<CmdWorkerThread> theWorkers = new ArrayList<CmdWorkerThread>();
|
|
android.app.Service svc = null;
|
|
|
|
public RunCmdThread(ServerSocket socket, android.app.Service service, Handler handler)
|
|
{
|
|
super("RunCmdThread");
|
|
this.SvrSocket = socket;
|
|
this.svc = service;
|
|
this.handler = handler;
|
|
}
|
|
|
|
public void StopListening()
|
|
{
|
|
bListening = false;
|
|
}
|
|
|
|
public void run() {
|
|
try {
|
|
SvrSocket.setSoTimeout(5000);
|
|
while (bListening)
|
|
{
|
|
try
|
|
{
|
|
socket = SvrSocket.accept();
|
|
CmdWorkerThread theWorker = new CmdWorkerThread(this, socket);
|
|
theWorker.start();
|
|
theWorkers.add(theWorker);
|
|
}
|
|
catch (SocketTimeoutException toe)
|
|
{
|
|
continue;
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
e.printStackTrace();
|
|
continue;
|
|
}
|
|
}
|
|
|
|
int nNumWorkers = theWorkers.size();
|
|
for (int lcv = 0; lcv < nNumWorkers; lcv++)
|
|
{
|
|
if (theWorkers.get(lcv).isAlive())
|
|
{
|
|
theWorkers.get(lcv).StopListening();
|
|
while(theWorkers.get(lcv).isAlive())
|
|
;
|
|
}
|
|
}
|
|
|
|
theWorkers.clear();
|
|
|
|
SvrSocket.close();
|
|
|
|
svc.stopSelf();
|
|
|
|
// SUTAgentAndroid.me.finish();
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
return;
|
|
}
|
|
|
|
private String SendPing(String sIPAddr)
|
|
{
|
|
Process pProc;
|
|
String sRet = "";
|
|
String [] theArgs = new String [4];
|
|
boolean bStillRunning = true;
|
|
int nBytesOut = 0;
|
|
int nBytesErr = 0;
|
|
int nBytesRead = 0;
|
|
byte[] buffer = new byte[1024];
|
|
|
|
theArgs[0] = "ping";
|
|
theArgs[1] = "-c";
|
|
theArgs[2] = "3";
|
|
theArgs[3] = sIPAddr;
|
|
|
|
try
|
|
{
|
|
pProc = Runtime.getRuntime().exec(theArgs);
|
|
|
|
InputStream sutOut = pProc.getInputStream();
|
|
InputStream sutErr = pProc.getErrorStream();
|
|
|
|
while (bStillRunning)
|
|
{
|
|
try
|
|
{
|
|
if ((nBytesOut = sutOut.available()) > 0)
|
|
{
|
|
if (nBytesOut > buffer.length)
|
|
{
|
|
buffer = null;
|
|
System.gc();
|
|
buffer = new byte[nBytesOut];
|
|
}
|
|
nBytesRead = sutOut.read(buffer, 0, nBytesOut);
|
|
if (nBytesRead == -1)
|
|
bStillRunning = false;
|
|
else
|
|
{
|
|
String sRep = new String(buffer,0,nBytesRead).replace("\n", "\r\n");
|
|
sRet += sRep;
|
|
sRep = null;
|
|
}
|
|
}
|
|
|
|
if ((nBytesErr = sutErr.available()) > 0)
|
|
{
|
|
if (nBytesErr > buffer.length)
|
|
{
|
|
buffer = null;
|
|
System.gc();
|
|
buffer = new byte[nBytesErr];
|
|
}
|
|
nBytesRead = sutErr.read(buffer, 0, nBytesErr);
|
|
if (nBytesRead == -1)
|
|
bStillRunning = false;
|
|
else
|
|
{
|
|
String sRep = new String(buffer,0,nBytesRead).replace("\n", "\r\n");
|
|
sRet += sRep;
|
|
sRep = null;
|
|
}
|
|
}
|
|
|
|
bStillRunning = (IsProcRunning(pProc) || (sutOut.available() > 0) || (sutErr.available() > 0));
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
|
|
if ((bStillRunning == true) && (nBytesErr == 0) && (nBytesOut == 0))
|
|
{
|
|
try {
|
|
sleep(2000);
|
|
}
|
|
catch (InterruptedException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
pProc.destroy();
|
|
pProc = null;
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
sRet = e.getMessage();
|
|
e.printStackTrace();
|
|
}
|
|
|
|
return (sRet);
|
|
}
|
|
|
|
private boolean IsProcRunning(Process pProc)
|
|
{
|
|
boolean bRet = false;
|
|
@SuppressWarnings("unused")
|
|
int nExitCode = 0;
|
|
|
|
try
|
|
{
|
|
nExitCode = pProc.exitValue();
|
|
}
|
|
catch (IllegalThreadStateException z)
|
|
{
|
|
bRet = true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
|
|
return(bRet);
|
|
}
|
|
|
|
private void SendNotification(String tickerText, String expandedText)
|
|
{
|
|
NotificationManager notificationManager = (NotificationManager)svc.getSystemService(Context.NOTIFICATION_SERVICE);
|
|
|
|
// int icon = android.R.drawable.stat_notify_more;
|
|
// int icon = R.drawable.ic_stat_first;
|
|
// int icon = R.drawable.ic_stat_second;
|
|
// int icon = R.drawable.ic_stat_neterror;
|
|
int icon = R.drawable.ateamlogo;
|
|
long when = System.currentTimeMillis();
|
|
|
|
Context context = svc.getApplicationContext();
|
|
|
|
// Intent to launch an activity when the extended text is clicked
|
|
Intent intent2 = new Intent(svc, SUTAgentAndroid.class);
|
|
PendingIntent launchIntent = PendingIntent.getActivity(context, 0, intent2, 0);
|
|
|
|
|
|
Notification notification = new Notification.Builder(context)
|
|
.setSmallIcon(icon)
|
|
.setContentTitle(tickerText)
|
|
.setContentText(expandedText)
|
|
.setContentIntent(launchIntent)
|
|
.setWhen(when)
|
|
.build();
|
|
|
|
notification.flags |= (Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL);
|
|
notification.defaults |= Notification.DEFAULT_SOUND;
|
|
notification.defaults |= Notification.DEFAULT_VIBRATE;
|
|
notification.defaults |= Notification.DEFAULT_LIGHTS;
|
|
|
|
notificationManager.notify(1959, notification);
|
|
}
|
|
|
|
private void CancelNotification()
|
|
{
|
|
NotificationManager notificationManager = (NotificationManager)svc.getSystemService(Context.NOTIFICATION_SERVICE);
|
|
notificationManager.cancel(1959);
|
|
}
|
|
|
|
class doCancelNotification implements Runnable
|
|
{
|
|
public void run()
|
|
{
|
|
CancelNotification();
|
|
}
|
|
};
|
|
|
|
class doSendNotification implements Runnable
|
|
{
|
|
private String sTitle = "";
|
|
private String sBText = "";
|
|
|
|
doSendNotification(String sTitle, String sBodyText)
|
|
{
|
|
this.sTitle = sTitle;
|
|
this.sBText = sBodyText;
|
|
}
|
|
|
|
public void run()
|
|
{
|
|
SendNotification(sTitle, sBText);
|
|
}
|
|
};
|
|
}
|