Просмотр исходного кода

Added support for EnableLED and SavePCAP settings

tcpassos 2 лет назад
Родитель
Сommit
5113f9e049

+ 1 - 1
applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c

@@ -139,7 +139,7 @@ void wifi_marauder_scene_console_output_on_enter(void* context) {
         // Run the script if the file with the script has been opened
         // Run the script if the file with the script has been opened
         if(app->script) {
         if(app->script) {
             app->script_worker = wifi_marauder_script_worker_alloc();
             app->script_worker = wifi_marauder_script_worker_alloc();
-            wifi_marauder_script_worker_start(app->script_worker, app->script, wifi_marauder_script_execute_stage, app->script_worker);
+            wifi_marauder_script_worker_start(app->script_worker, app->script);
         }
         }
     }
     }
 }
 }

+ 14 - 0
applications/external/wifi_marauder_companion/script/wifi_marauder_script.c

@@ -6,6 +6,8 @@
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF_PMKID 60
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF_PMKID 60
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF_BEACON 60
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF_BEACON 60
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_BEACON 60
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_BEACON 60
+#define WIFI_MARAUDER_DEFAULT_ENABLE_LED true
+#define WIFI_MARAUDER_DEFAULT_SAVE_PCAP true
 
 
 WifiMarauderScript *wifi_marauder_script_alloc() {
 WifiMarauderScript *wifi_marauder_script_alloc() {
     WifiMarauderScript *script = (WifiMarauderScript *) malloc(sizeof(WifiMarauderScript));
     WifiMarauderScript *script = (WifiMarauderScript *) malloc(sizeof(WifiMarauderScript));
@@ -15,6 +17,8 @@ WifiMarauderScript *wifi_marauder_script_alloc() {
     script->name = NULL;
     script->name = NULL;
     script->description = NULL;
     script->description = NULL;
     script->first_stage = NULL;
     script->first_stage = NULL;
+    script->enable_led = WIFI_MARAUDER_DEFAULT_ENABLE_LED;
+    script->save_pcap = WIFI_MARAUDER_DEFAULT_SAVE_PCAP;
     script->repeat = 1;
     script->repeat = 1;
     return script;
     return script;
 }
 }
@@ -26,6 +30,16 @@ void _wifi_marauder_script_load_meta(WifiMarauderScript *script, cJSON *meta_sec
         if (description != NULL) {
         if (description != NULL) {
             script->description = strdup(description->valuestring);
             script->description = strdup(description->valuestring);
         }
         }
+        // Enable LED
+        cJSON* enable_led_json = cJSON_GetObjectItemCaseSensitive(meta_section, "enableLed");
+        if (cJSON_IsBool(enable_led_json)) {
+            script->enable_led = enable_led_json->valueint;
+        }
+        // Save PCAP
+        cJSON* save_pcap_json = cJSON_GetObjectItemCaseSensitive(meta_section, "savePcap");
+        if (cJSON_IsBool(save_pcap_json)) {
+            script->save_pcap = save_pcap_json->valueint;
+        }
         // Times the script will be repeated
         // Times the script will be repeated
         cJSON* repeat = cJSON_GetObjectItem(meta_section, "repeat");
         cJSON* repeat = cJSON_GetObjectItem(meta_section, "repeat");
         if (repeat != NULL) {
         if (repeat != NULL) {

+ 5 - 0
applications/external/wifi_marauder_companion/script/wifi_marauder_script.h

@@ -29,6 +29,8 @@
  *     "meta": {
  *     "meta": {
  *         "description": "My script",
  *         "description": "My script",
  *         "repeat": times the script will repeat (default 1),
  *         "repeat": times the script will repeat (default 1),
+ *         "enableLed": true (default) | false,
+ *         "savePcap": true (default) | false
  *     },
  *     },
  *     "stages": {
  *     "stages": {
  *         "scan": {
  *         "scan": {
@@ -134,6 +136,9 @@ typedef struct WifiMarauderScript {
     char* name;
     char* name;
     char* description;
     char* description;
     WifiMarauderScriptStage *first_stage;
     WifiMarauderScriptStage *first_stage;
+    // TODO: Think of a way to not change the settings if they are not informed in the JSON
+    bool enable_led;
+    bool save_pcap;
     int repeat;
     int repeat;
 } WifiMarauderScript;
 } WifiMarauderScript;
 
 

+ 18 - 0
applications/external/wifi_marauder_companion/script/wifi_marauder_script_executor.c

@@ -118,6 +118,24 @@ void _wifi_marauder_script_execute_beacon_list(WifiMarauderScriptStageBeaconList
     _send_stop();
     _send_stop();
 }
 }
 
 
+void wifi_marauder_script_execute_start(void *context) {
+    furi_assert(context);
+    WifiMarauderScriptWorker* worker = context;
+    WifiMarauderScript* script = worker->script;
+    char command[100];
+
+    // Enables or disables the LED according to script settings
+    snprintf(command, sizeof(command), "settings -s EnableLED %s", script->enable_led ? "enable" : "disable");
+    wifi_marauder_uart_tx((uint8_t*)command, strlen(command));
+    _send_line_break();
+
+    // Enables or disables PCAP saving according to script settings
+    snprintf(command, sizeof(command), "settings -s SavePCAP %s", script->save_pcap ? "enable" : "disable");
+    wifi_marauder_uart_tx((uint8_t*)command, strlen(command));
+    _send_line_break();
+}
+
+
 void wifi_marauder_script_execute_stage(WifiMarauderScriptStage* stage, void *context) {
 void wifi_marauder_script_execute_stage(WifiMarauderScriptStage* stage, void *context) {
     furi_assert(context);
     furi_assert(context);
     WifiMarauderScriptWorker* worker = context;
     WifiMarauderScriptWorker* worker = context;

+ 1 - 0
applications/external/wifi_marauder_companion/script/wifi_marauder_script_executor.h

@@ -2,4 +2,5 @@
 
 
 #include "wifi_marauder_script.h"
 #include "wifi_marauder_script.h"
 
 
+void wifi_marauder_script_execute_start(void *context);
 void wifi_marauder_script_execute_stage(WifiMarauderScriptStage* stage, void *context);
 void wifi_marauder_script_execute_stage(WifiMarauderScriptStage* stage, void *context);

+ 19 - 8
applications/external/wifi_marauder_companion/script/wifi_marauder_script_worker.c

@@ -6,7 +6,8 @@ WifiMarauderScriptWorker* wifi_marauder_script_worker_alloc() {
     if (worker == NULL) {
     if (worker == NULL) {
         return NULL;
         return NULL;
     }
     }
-    worker->callback = NULL;
+    worker->callback_start = NULL;
+    worker->callback_stage = NULL;
     worker->worker_thread = NULL;
     worker->worker_thread = NULL;
     worker->is_running = false;
     worker->is_running = false;
     return worker;
     return worker;
@@ -16,29 +17,39 @@ int32_t _wifi_marauder_script_worker_task(void* worker) {
     WifiMarauderScriptWorker* script_worker = worker;
     WifiMarauderScriptWorker* script_worker = worker;
     WifiMarauderScript *script = script_worker->script;
     WifiMarauderScript *script = script_worker->script;
     if (script == NULL) {
     if (script == NULL) {
-        return 0;    
+        return WifiMarauderScriptWorkerStatusInvalidScript;
     }
     }
 
 
+    // Setup
+    script_worker->callback_start(script_worker->context);
+    if (!script_worker->is_running) {
+        return WifiMarauderScriptWorkerStatusForceExit;
+    }
+
+    // Stages
     for (int i = 0; i < script->repeat; i++) {
     for (int i = 0; i < script->repeat; i++) {
         WifiMarauderScriptStage *current_stage = script->first_stage;
         WifiMarauderScriptStage *current_stage = script->first_stage;
         while (current_stage != NULL && script_worker->is_running) {
         while (current_stage != NULL && script_worker->is_running) {
-            script_worker->callback(current_stage, script_worker->context);
+            script_worker->callback_stage(current_stage, script_worker->context);
             current_stage = current_stage->next_stage;
             current_stage = current_stage->next_stage;
         }
         }
         if (!script_worker->is_running) {
         if (!script_worker->is_running) {
-            break;
+            return WifiMarauderScriptWorkerStatusForceExit;
         }
         }
     }
     }
-    return 0;
+
+    script_worker->is_running = false;
+    return WifiMarauderScriptWorkerStatusSuccess;
 }
 }
 
 
-bool wifi_marauder_script_worker_start(WifiMarauderScriptWorker* instance, WifiMarauderScript* script, void (*callback)(WifiMarauderScriptStage*, void*), void* context) {
+bool wifi_marauder_script_worker_start(WifiMarauderScriptWorker* instance, WifiMarauderScript* script) {
     if (!instance || !script) {
     if (!instance || !script) {
         return false;
         return false;
     }
     }
-    instance->callback = callback;
+    instance->callback_start = wifi_marauder_script_execute_start;
+    instance->callback_stage = wifi_marauder_script_execute_stage;
     instance->script = script;
     instance->script = script;
-    instance->context = context;
+    instance->context = instance;
     instance->is_running = true;
     instance->is_running = true;
     instance->worker_thread = furi_thread_alloc_ex("WifiMarauderScriptWorker", 1024, _wifi_marauder_script_worker_task, instance);
     instance->worker_thread = furi_thread_alloc_ex("WifiMarauderScriptWorker", 1024, _wifi_marauder_script_worker_task, instance);
     if (!instance->worker_thread) {
     if (!instance->worker_thread) {

+ 9 - 4
applications/external/wifi_marauder_companion/script/wifi_marauder_script_worker.h

@@ -2,10 +2,17 @@
 
 
 #include "wifi_marauder_script.h"
 #include "wifi_marauder_script.h"
 
 
+typedef enum {
+    WifiMarauderScriptWorkerStatusSuccess = 0,
+    WifiMarauderScriptWorkerStatusInvalidScript = 1,
+    WifiMarauderScriptWorkerStatusForceExit = 2
+} WifiMarauderScriptWorkerStatus;
+
 typedef struct WifiMarauderScriptWorker {
 typedef struct WifiMarauderScriptWorker {
     WifiMarauderScript *script;
     WifiMarauderScript *script;
     FuriThread *worker_thread;
     FuriThread *worker_thread;
-    void (*callback)(WifiMarauderScriptStage*, void*);
+    void (*callback_start)(void*);
+    void (*callback_stage)(WifiMarauderScriptStage*, void*);
     void *context;
     void *context;
     bool is_running;
     bool is_running;
 } WifiMarauderScriptWorker;
 } WifiMarauderScriptWorker;
@@ -22,11 +29,9 @@ WifiMarauderScriptWorker* wifi_marauder_script_worker_alloc();
  *
  *
  * @param instance A pointer to the instance of WifiMarauderScriptWorker to start.
  * @param instance A pointer to the instance of WifiMarauderScriptWorker to start.
  * @param script Script to be executed
  * @param script Script to be executed
- * @param callback A pointer to the callback function to be called after each stage is executed.
- * The callback function should receive a parameter of type WifiMarauderScriptStage* and return nothing.
  * @return True if the worker was successfully started, false otherwise.
  * @return True if the worker was successfully started, false otherwise.
  */
  */
-bool wifi_marauder_script_worker_start(WifiMarauderScriptWorker* instance, WifiMarauderScript* script, void (*callback)(WifiMarauderScriptStage*, void*), void* context);
+bool wifi_marauder_script_worker_start(WifiMarauderScriptWorker* instance, WifiMarauderScript* script);
 
 
 /**
 /**
  * @brief Frees the memory used by the instance of WifiMarauderScriptWorker.
  * @brief Frees the memory used by the instance of WifiMarauderScriptWorker.