Browse Source

filtering bug fix in uglydbhelper

Julien Clauter 10 years ago
parent
commit
1432f67060

+ 48 - 33
src/de/tudarmstadt/informatik/hostage/logging/UglyDbHelper.java

@@ -1,14 +1,15 @@
 package de.tudarmstadt.informatik.hostage.logging;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
 import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
 import de.tudarmstadt.informatik.hostage.ui.LogFilter;
 
@@ -35,9 +36,9 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 	private static final String DATABASE_NAME = "recordManager";
 
 	// Contacts table names
-	private static final String TABLE_ATTACK_INFO = "attack_info";
-	private static final String TABLE_RECORDS = "records";
-	private static final String TABLE_BSSIDS = "bssids";
+	public static final String TABLE_ATTACK_INFO = "attack_info";
+    public static final String TABLE_RECORDS = "records";
+    public static final String TABLE_BSSIDS = "bssids";
 
 	// Contacts Table Columns names
 	public static final String KEY_ID = "_id";
@@ -61,26 +62,40 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 
 	// Database sql create statements
 	private static final String CREATE_RECORD_TABLE = "CREATE TABLE "
-			+ TABLE_RECORDS + "(" + KEY_ID + " INTEGER NOT NULL,"
-			+ KEY_ATTACK_ID + " INTEGER NOT NULL," + KEY_TYPE + " TEXT,"
-			+ KEY_TIME + " INTEGER," + KEY_PACKET + " TEXT," + "FOREIGN KEY("
+			+ TABLE_RECORDS + "("
+            + KEY_ID + " INTEGER NOT NULL,"
+			+ KEY_ATTACK_ID + " INTEGER NOT NULL,"
+            + KEY_TYPE + " TEXT,"
+			+ KEY_TIME + " INTEGER,"
+            + KEY_PACKET + " TEXT,"
+            + "FOREIGN KEY("
 			+ KEY_ATTACK_ID + ") REFERENCES " + TABLE_ATTACK_INFO + "("
 			+ KEY_ATTACK_ID + ")," + "PRIMARY KEY(" + KEY_ID + ", "
 			+ KEY_ATTACK_ID + ")" + ")";
 
 	private static final String CREATE_ATTACK_INFO_TABLE = "CREATE TABLE "
-			+ TABLE_ATTACK_INFO + "(" + KEY_ATTACK_ID + " INTEGER PRIMARY KEY,"
-			+ KEY_PROTOCOL + " TEXT," + KEY_EXTERNAL_IP + " TEXT,"
-			+ KEY_LOCAL_IP + " BLOB," + KEY_LOCAL_HOSTNAME + " TEXT,"
-			+ KEY_LOCAL_PORT + " INTEGER," + KEY_REMOTE_IP + " BLOB,"
-			+ KEY_REMOTE_HOSTNAME + " TEXT," + KEY_REMOTE_PORT + " INTEGER,"
-			+ KEY_BSSID + " TEXT," + "FOREIGN KEY(" + KEY_BSSID
+			+ TABLE_ATTACK_INFO + "("
+            + KEY_ATTACK_ID + " INTEGER PRIMARY KEY,"
+			+ KEY_PROTOCOL + " TEXT,"
+            + KEY_EXTERNAL_IP + " TEXT,"
+			+ KEY_LOCAL_IP + " BLOB,"
+            + KEY_LOCAL_HOSTNAME + " TEXT,"
+			+ KEY_LOCAL_PORT + " INTEGER,"
+            + KEY_REMOTE_IP + " BLOB,"
+			+ KEY_REMOTE_HOSTNAME + " TEXT,"
+            + KEY_REMOTE_PORT + " INTEGER,"
+			+ KEY_BSSID + " TEXT,"
+            + "FOREIGN KEY(" + KEY_BSSID
 			+ ") REFERENCES " + TABLE_BSSIDS + "(" + KEY_BSSID + ")" + ")";
 
 	private static final String CREATE_BSSID_TABLE = "CREATE TABLE "
-			+ TABLE_BSSIDS + "(" + KEY_BSSID + " TEXT PRIMARY KEY," + KEY_SSID
-			+ " TEXT," + KEY_LATITUDE + " INTEGER," + KEY_LONGITUDE
-			+ " INTEGER," + KEY_ACCURACY + " INTEGER," + KEY_TIME + " INTEGER"
+			+ TABLE_BSSIDS + "("
+            + KEY_BSSID + " TEXT PRIMARY KEY,"
+            + KEY_SSID + " TEXT,"
+            + KEY_LATITUDE + " INTEGER,"
+            + KEY_LONGITUDE + " INTEGER,"
+            + KEY_ACCURACY + " INTEGER,"
+            + KEY_TIME + " INTEGER"
 			+ ")";
 
 	public UglyDbHelper(Context context) {
@@ -115,12 +130,12 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 	 */
 	public ArrayList<Record> getRecordsForFilter(LogFilter filter) {
 		ArrayList<Record> recordList = new ArrayList<Record>();
-		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " NATURAL JOIN " + TABLE_ATTACK_INFO + " NATURAL JOIN " + TABLE_BSSIDS;
+		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS + " NATURAL JOIN " + TABLE_ATTACK_INFO +  " JOIN " + TABLE_BSSIDS + " USING "+ "(" + KEY_BSSID + ")";
 
 		// TIMESTAMPS
-		selectQuery = selectQuery + " WHERE " + KEY_TIME;
+		selectQuery = selectQuery + " WHERE " + TABLE_RECORDS +"."+KEY_TIME;
 		selectQuery = selectQuery + " < " + filter.getBelowTimestamp();
-		selectQuery = selectQuery + " AND " + KEY_TIME;
+		selectQuery = selectQuery + " AND " + TABLE_RECORDS +"."+KEY_TIME;
 		selectQuery = selectQuery + " > " + filter.getAboveTimestamp();
 
 		if (filter.getBSSIDs() != null && filter.getBSSIDs().size() > 0) {
@@ -283,7 +298,7 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 	 */
 	public boolean bssidSeen(String protocol, String BSSID) {
 		String countQuery = "SELECT  * FROM " + TABLE_ATTACK_INFO
-				+ " NATURAL JOIN " + TABLE_BSSIDS + " WHERE " + KEY_PROTOCOL
+				+ " JOIN " + TABLE_BSSIDS + " USING " + "(" + KEY_BSSID + ")" + " WHERE " + KEY_PROTOCOL
 				+ " = " + "'" + protocol + "'" + " AND " + KEY_BSSID + " = "
 				+ "'" + BSSID + "'";
 		SQLiteDatabase db = this.getReadableDatabase();
@@ -368,8 +383,8 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 	public ArrayList<Record> getAllReceivedRecordsOfEachAttack() {
 		ArrayList<Record> recordList = new ArrayList<Record>();
 		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS
-				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " NATURAL JOIN "
-				+ TABLE_BSSIDS + " WHERE " + KEY_TYPE + "='RECEIVE'"
+				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " JOIN "
+				+ TABLE_BSSIDS + " USING " + "(" + KEY_BSSID + ")" + " WHERE " + KEY_TYPE + "='RECEIVE'"
 				+ " ORDER BY " + KEY_TIME;
 		SQLiteDatabase db = this.getReadableDatabase();
 		Cursor cursor = db.rawQuery(selectQuery, null);
@@ -399,7 +414,7 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 		// Select All Query
 		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS
 				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " JOIN "
-				+ TABLE_BSSIDS + " USING (_bssid)";
+				+ TABLE_BSSIDS + " USING " + "(" + KEY_BSSID + ")";
 
 		SQLiteDatabase db = this.getWritableDatabase();
 		Cursor cursor = db.rawQuery(selectQuery, null);
@@ -519,8 +534,8 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 	 */
 	public Record getRecord(int id) {
 		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS
-				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " NATURAL JOIN "
-				+ TABLE_BSSIDS + " WHERE " + KEY_ID + " = " + id;
+				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " JOIN "
+				+ TABLE_BSSIDS + " USING " + "(" + KEY_BSSID + ")" + " WHERE " + KEY_ID + " = " + id;
 		SQLiteDatabase db = this.getReadableDatabase();
 
 		Cursor cursor = db.rawQuery(selectQuery, null);
@@ -561,8 +576,8 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 	 */
 	public Record getRecordOfAttackId(long attack_id) {
 		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS
-				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " NATURAL JOIN "
-				+ TABLE_BSSIDS + " WHERE " + KEY_ATTACK_ID + " = " + attack_id
+				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " JOIN "
+				+ TABLE_BSSIDS + " USING " + "(" + KEY_BSSID + ")" + " WHERE " + KEY_ATTACK_ID + " = " + attack_id
 				+ " GROUP BY " + KEY_ATTACK_ID;
 		SQLiteDatabase db = this.getReadableDatabase();
 		Cursor cursor = db.rawQuery(selectQuery, null);
@@ -588,8 +603,8 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 	public ArrayList<Record> getRecordOfEachAttack() {
 		ArrayList<Record> recordList = new ArrayList<Record>();
 		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS
-				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " NATURAL JOIN "
-				+ TABLE_BSSIDS + " GROUP BY " + KEY_ATTACK_ID;
+				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " JOIN "
+				+ TABLE_BSSIDS  + " USING " + "(" + KEY_BSSID + ")" + " GROUP BY " + KEY_ATTACK_ID;
 		SQLiteDatabase db = this.getReadableDatabase();
 		Cursor cursor = db.rawQuery(selectQuery, null);
 
@@ -620,8 +635,8 @@ public class UglyDbHelper extends SQLiteOpenHelper {
 	public ArrayList<Record> getRecordOfEachAttack(long attack_id) {
 		ArrayList<Record> recordList = new ArrayList<Record>();
 		String selectQuery = "SELECT  * FROM " + TABLE_RECORDS
-				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " NATURAL JOIN "
-				+ TABLE_BSSIDS + " WHERE " + KEY_ATTACK_ID + " > " + attack_id
+				+ " NATURAL JOIN " + TABLE_ATTACK_INFO + " JOIN "
+				+ TABLE_BSSIDS + " USING " + "(" + KEY_BSSID + ")" + " WHERE " + KEY_ATTACK_ID + " > " + attack_id
 				+ " GROUP BY " + KEY_ATTACK_ID;
 		SQLiteDatabase db = this.getReadableDatabase();
 		Cursor cursor = db.rawQuery(selectQuery, null);

+ 9 - 9
src/de/tudarmstadt/informatik/hostage/ui/LogFilter.java

@@ -1,12 +1,12 @@
 package de.tudarmstadt.informatik.hostage.ui;
 
+import android.os.Parcel;
+import android.os.Parcelable;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 
-import de.tudarmstadt.informatik.hostage.R;
-
-import android.os.Parcel;
-import android.os.Parcelable;
+import de.tudarmstadt.informatik.hostage.logging.UglyDbHelper;
 
 
 public class LogFilter implements Parcelable{
@@ -173,13 +173,13 @@ public class LogFilter implements Parcelable{
 	
 	
 	public String getBSSIDQueryStatement(String key){
-		return this.convertArrayListToQueryString(this.BSSIDs, key);
+		return this.convertArrayListToQueryString(this.BSSIDs, UglyDbHelper.TABLE_BSSIDS, key);
 	}
 	public String getESSIDQueryStatement(String key){
-		return this.convertArrayListToQueryString(this.ESSIDs, key);
+		return this.convertArrayListToQueryString(this.ESSIDs, UglyDbHelper.TABLE_BSSIDS ,key);
 	}
 	public String getProtocolsQueryStatement(String key){
-		return this.convertArrayListToQueryString(this.protocols, key);
+		return this.convertArrayListToQueryString(this.protocols,UglyDbHelper.TABLE_ATTACK_INFO, key);
 	}
 
     public boolean isSet(){
@@ -192,7 +192,7 @@ public class LogFilter implements Parcelable{
     }
 
 	
-	public String convertArrayListToQueryString(ArrayList<String> list, String key){
+	public String convertArrayListToQueryString(ArrayList<String> list, String table,  String key){
 		String statement = "";
 		if (list == null) return statement;
 		statement = " ( ";
@@ -200,7 +200,7 @@ public class LogFilter implements Parcelable{
 		int i = 0, max = list.size();
 		for (String element : list){
 			i++;
-			statement = statement + key + " = " + "'" + element + "'";
+			statement = statement + table + "." + key + " = " + "'" + element + "'";
 			if (i == max) continue;
 			statement = statement +" OR ";
 		}