Browse Source

Fixed Bugs caused by wrong attack id's

lp-tu 10 years ago
parent
commit
5a87083e49

+ 11 - 2
src/de/tudarmstadt/informatik/hostage/handler/AbstractHandler.java

@@ -5,6 +5,10 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.Socket;
 
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.preference.PreferenceManager;
 import de.tudarmstadt.informatik.hostage.HoneyListener;
 import de.tudarmstadt.informatik.hostage.HoneyService;
 import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
@@ -13,6 +17,7 @@ import de.tudarmstadt.informatik.hostage.logging.Record;
 import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
 import de.tudarmstadt.informatik.hostage.logging.SQLLogger;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
+import de.tudarmstadt.informatik.hostage.ui.MainActivity;
 
 public abstract class AbstractHandler implements Runnable {
 
@@ -36,8 +41,12 @@ public abstract class AbstractHandler implements Runnable {
 		this.protocol = protocol;
 		this.client = client;
 		this.thread = new Thread(this);
-		//TODO attack_id für jeden Logger		
-		attack_id = log.getAttackCount();
+		//TODO attack_id für jeden Logger
+		SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(service);
+		Editor editor = pref.edit();
+		attack_id = pref.getInt("ATTACK_ID_COUNTER", 0);
+		editor.putInt("ATTACK_ID_COUNTER", attack_id + 1);
+		editor.commit();
 		BSSID = HelperUtils.getBSSID(service.getApplicationContext());
 		SSID = HelperUtils.getSSID(service.getApplicationContext());
 		setSoTimeout(client);

+ 26 - 0
src/de/tudarmstadt/informatik/hostage/logging/DatabaseHandler.java

@@ -195,6 +195,32 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         return result;
     }
     
+    //Get the smallest AttackId
+    public int getSmallestAttackId(){
+    	String selectQuery = "SELECT MIN(" + KEY_ATTACK_ID +") FROM " + TABLE_RECORDS;
+        SQLiteDatabase db = this.getReadableDatabase();
+        Cursor cursor = db.rawQuery(selectQuery, null);
+        
+        if (cursor.moveToFirst()) {
+        	return cursor.getInt(0);
+        } else{
+        	return -1;
+        }
+    }
+    
+    //Get the smallest AttackId
+    public int getHighestAttackId(){
+    	String selectQuery = "SELECT MAX(" + KEY_ATTACK_ID +") FROM " + TABLE_RECORDS;
+        SQLiteDatabase db = this.getReadableDatabase();
+        Cursor cursor = db.rawQuery(selectQuery, null);
+        
+        if (cursor.moveToFirst()) {
+        	return cursor.getInt(0);
+        } else{
+        	return -1;
+        }
+    }
+    
 	// Getting first Record for each AttackId
     public ArrayList<Record> getRecordOfEachAttack() {
     	ArrayList<Record> recordList = new ArrayList<Record>();

+ 5 - 6
src/de/tudarmstadt/informatik/hostage/logging/SQLLogger.java

@@ -32,7 +32,6 @@ public class SQLLogger implements Logger{
 	DatabaseHandler dbh;
 	public static final int JSON = 0x01;
 	private int progressMax;
-	private int lastUploadedAttackId;
 	private NotificationCompat.Builder builder;
 	private NotificationManager mNotifyManager;
 	SharedPreferences pref;
@@ -84,10 +83,10 @@ public class SQLLogger implements Logger{
 		}	
 	}	
 	
-	public void uploadDatabase(){		
-		lastUploadedAttackId = pref.getInt("LAST_UPLOADED_ATTACK_ID", -1);
-		int currentAttackCount = dbh.getAttackCount();
-		if(lastUploadedAttackId == currentAttackCount -1){
+	public void uploadDatabase(){	
+		final int lastUploadedAttackId = pref.getInt("LAST_UPLOADED_ATTACK_ID", -1);
+		int currentAttackId = pref.getInt("ATTACK_ID_COUNTER", 0);
+		if(lastUploadedAttackId == currentAttackId -1){
 			Toast.makeText(context, "All data have already been uploaded.", Toast.LENGTH_SHORT).show();
 			return;
 		}
@@ -141,7 +140,7 @@ public class SQLLogger implements Logger{
 		            mNotifyManager.notify(2, builder.build());
 
 			}}).start();
-		editor.putInt("LAST_UPLOADED_ATTACK_ID",currentAttackCount - 1);
+		editor.putInt("LAST_UPLOADED_ATTACK_ID",currentAttackId - 1);
 		editor.commit();				
 	}
 	

+ 1 - 0
src/de/tudarmstadt/informatik/hostage/ui/MainActivity.java

@@ -47,6 +47,7 @@ public class MainActivity extends Activity {
 
 	public static final String BROADCAST = "de.tudarmstadt.informatik.hostage.BROADCAST";
 	public static final String SESSION_DATA = "de.tudarmstadt.informatik.hostage.SESSION_DATA";
+	public static final String PERSISTENT_DATA = "de.tudarmstadt.informatik.hostage.SESSION_DATA";
 	public static final String LISTENER = "_LISTENER";
 	public static final String HANDLER_COUNT = "_HANDLER_COUNT";
 	public static final String SSID = "SSID";

+ 11 - 7
src/de/tudarmstadt/informatik/hostage/ui/ViewLog.java

@@ -22,6 +22,7 @@ import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.os.Build;
 import android.os.Bundle;
+import android.preference.PreferenceManager;
 import android.support.v4.app.FragmentTransaction;
 import android.util.Log;
 import android.view.Gravity;
@@ -212,6 +213,11 @@ public class ViewLog extends Activity {
 							public void onClick(DialogInterface dialog, int id) {
 								// Clear all Data
 								dbh.clearData();
+								SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
+								Editor editor = pref.edit();
+								editor.putInt("ATTACK_ID_COUNTER", 0);
+								editor.putInt("LAST_UPLOADED_ATTACK_ID", -1);
+								editor.commit();
 								Toast.makeText(getApplicationContext(),
 										"Database cleared!", Toast.LENGTH_SHORT)
 										.show();
@@ -273,16 +279,14 @@ public class ViewLog extends Activity {
 	}
 
 	private void setFirstAndLastAttack() {
-		int attackCount = dbh.getRecordCount();
-		if (attackCount > 0) {
-
-			Date resultdate = new Date(dbh.getRecordOfAttackId(0)
-					.getTimestamp());
+		int firstAttackId = dbh.getSmallestAttackId();
+		int lastAttackId = dbh.getHighestAttackId();
+		if (firstAttackId != -1) {
+			Date resultdate = new Date(dbh.getRecordOfAttackId(firstAttackId).getTimestamp());
 			TextView text = (TextView) findViewById(R.id.textFirstAttackValue);
 			text.setText(sdf.format(resultdate));
 			text = (TextView) findViewById(R.id.textLastAttackValue);
-			resultdate = new Date(dbh.getRecordOfAttackId(
-					dbh.getAttackCount() - 1).getTimestamp());
+			resultdate = new Date(dbh.getRecordOfAttackId(lastAttackId).getTimestamp());
 			text.setText(sdf.format(resultdate));
 		} else {
 			TextView text = (TextView) findViewById(R.id.textFirstAttackValue);