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

Added support for structuring stages in an array

tcpassos 2 лет назад
Родитель
Сommit
04c16750d2

+ 21 - 2
applications/external/wifi_marauder_companion/script/wifi_marauder_script.c

@@ -339,7 +339,7 @@ void _wifi_marauder_script_add_stage(WifiMarauderScript *script, WifiMarauderScr
 }
 
 void _wifi_marauder_script_load_stages(WifiMarauderScript *script, cJSON *stages) {
-    WifiMarauderScriptStage *prev_stage = NULL;
+    WifiMarauderScriptStage *prev_stage = wifi_marauder_script_get_last_stage(script);
 
     // Scan stage
     WifiMarauderScriptStageScan *stage_scan = _wifi_marauder_script_get_stage_scan(stages);
@@ -473,8 +473,16 @@ WifiMarauderScript *wifi_marauder_script_parse_raw(const char* json_raw) {
     }
     cJSON* meta = cJSON_GetObjectItem(json, "meta");
     _wifi_marauder_script_load_meta(script, meta);
+
     cJSON* stages = cJSON_GetObjectItem(json, "stages");
-    _wifi_marauder_script_load_stages(script, stages);
+    if (cJSON_IsArray(stages)) {
+        cJSON* stage_item = NULL;
+        cJSON_ArrayForEach(stage_item, stages) {
+            _wifi_marauder_script_load_stages(script, stage_item);
+        }
+    } else {
+        _wifi_marauder_script_load_stages(script, stages);
+    }
 
     return script;
 }
@@ -518,6 +526,17 @@ WifiMarauderScriptStage* wifi_marauder_script_get_stage(WifiMarauderScript* scri
     return NULL;
 }
 
+WifiMarauderScriptStage* wifi_marauder_script_get_last_stage(WifiMarauderScript* script) {
+    if (script == NULL || script->first_stage == NULL) {
+        return NULL;
+    }
+    WifiMarauderScriptStage* current_stage = script->first_stage;
+    while (current_stage->next_stage != NULL) {
+        current_stage = current_stage->next_stage;
+    }
+    return current_stage;
+}
+
 void wifi_marauder_script_free(WifiMarauderScript *script) {
     if (script == NULL) {
         return;

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

@@ -91,6 +91,16 @@
  *         }
  *     }
  * }
+ * 
+ * Note: It is possible to inform "stages" as an array, allowing ordering and repetition of stages of the same type:
+ *     "stages": [
+ *       {
+ *         "beaconList": { "ssids": ["SSID 1", "SSID 2"] }
+ *       },
+ *       {
+ *         "beaconList": { "generate": 4 }
+ *       },
+ *     ]
  * ----------------------------------------------------------------------------------------------------
  */
 
@@ -211,4 +221,5 @@ WifiMarauderScript* wifi_marauder_script_alloc();
 WifiMarauderScript* wifi_marauder_script_parse_raw(const char* script_raw);
 WifiMarauderScript* wifi_marauder_script_parse_file(const char* file_path, Storage* storage);
 WifiMarauderScriptStage* wifi_marauder_script_get_stage(WifiMarauderScript* script, WifiMarauderScriptStageType stage_type);
+WifiMarauderScriptStage* wifi_marauder_script_get_last_stage(WifiMarauderScript* script);
 void wifi_marauder_script_free(WifiMarauderScript *script);