web_crawler.c 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. #include <web_crawler.h>
  2. void free_buffers(WebCrawlerApp* app) {
  3. if(!app) {
  4. FURI_LOG_E(TAG, "Invalid app context");
  5. return;
  6. }
  7. if(app->path) {
  8. free(app->path);
  9. app->path = NULL;
  10. }
  11. if(app->temp_buffer_path) {
  12. free(app->temp_buffer_path);
  13. app->temp_buffer_path = NULL;
  14. }
  15. if(app->ssid) {
  16. free(app->ssid);
  17. app->ssid = NULL;
  18. }
  19. if(app->temp_buffer_ssid) {
  20. free(app->temp_buffer_ssid);
  21. app->temp_buffer_ssid = NULL;
  22. }
  23. if(app->password) {
  24. free(app->password);
  25. app->password = NULL;
  26. }
  27. if(app->temp_buffer_password) {
  28. free(app->temp_buffer_password);
  29. app->temp_buffer_password = NULL;
  30. }
  31. if(app->file_type) {
  32. free(app->file_type);
  33. app->file_type = NULL;
  34. }
  35. if(app->temp_buffer_file_type) {
  36. free(app->temp_buffer_file_type);
  37. app->temp_buffer_file_type = NULL;
  38. }
  39. if(app->file_rename) {
  40. free(app->file_rename);
  41. app->file_rename = NULL;
  42. }
  43. if(app->temp_buffer_file_rename) {
  44. free(app->temp_buffer_file_rename);
  45. app->temp_buffer_file_rename = NULL;
  46. }
  47. if(app->temp_buffer_http_method) {
  48. free(app->temp_buffer_http_method);
  49. app->temp_buffer_http_method = NULL;
  50. }
  51. if(app->temp_buffer_headers) {
  52. free(app->temp_buffer_headers);
  53. app->temp_buffer_headers = NULL;
  54. }
  55. if(app->temp_buffer_payload) {
  56. free(app->temp_buffer_payload);
  57. app->temp_buffer_payload = NULL;
  58. }
  59. if(app->http_method) {
  60. free(app->http_method);
  61. app->http_method = NULL;
  62. }
  63. if(app->headers) {
  64. free(app->headers);
  65. app->headers = NULL;
  66. }
  67. if(app->payload) {
  68. free(app->payload);
  69. app->payload = NULL;
  70. }
  71. }
  72. void free_resources(WebCrawlerApp* app) {
  73. if(!app) {
  74. FURI_LOG_E(TAG, "Invalid app context");
  75. return;
  76. }
  77. free_buffers(app);
  78. }
  79. void free_all(WebCrawlerApp* app, char* reason) {
  80. if(!app) {
  81. FURI_LOG_E(TAG, "Invalid app context");
  82. return;
  83. }
  84. if(reason) {
  85. FURI_LOG_I(TAG, reason);
  86. }
  87. if(app->view_main) view_free(app->view_main);
  88. if(app->submenu_main) submenu_free(app->submenu_main);
  89. if(app->submenu_config) submenu_free(app->submenu_config);
  90. if(app->variable_item_list_wifi) variable_item_list_free(app->variable_item_list_wifi);
  91. if(app->variable_item_list_file) variable_item_list_free(app->variable_item_list_file);
  92. if(app->variable_item_list_request) variable_item_list_free(app->variable_item_list_request);
  93. if(app->view_dispatcher) view_dispatcher_free(app->view_dispatcher);
  94. if(app->widget_about) widget_free(app->widget_about);
  95. if(app->widget_file_read) widget_free(app->widget_file_read);
  96. if(app->widget_file_delete) widget_free(app->widget_file_delete);
  97. if(app->text_input_path) text_input_free(app->text_input_path);
  98. if(app->text_input_ssid) text_input_free(app->text_input_ssid);
  99. if(app->text_input_password) text_input_free(app->text_input_password);
  100. if(app->text_input_file_type) text_input_free(app->text_input_file_type);
  101. if(app->text_input_file_rename) text_input_free(app->text_input_file_rename);
  102. if(app->text_input_headers) text_input_free(app->text_input_headers);
  103. if(app->text_input_payload) text_input_free(app->text_input_payload);
  104. furi_record_close(RECORD_GUI);
  105. free_resources(app);
  106. }
  107. /**
  108. * @brief Function to free the resources used by WebCrawlerApp.
  109. * @param app The WebCrawlerApp object to free.
  110. */
  111. void web_crawler_app_free(WebCrawlerApp* app) {
  112. if(!app) {
  113. FURI_LOG_E(TAG, "Invalid app context");
  114. return;
  115. }
  116. if(!app->view_dispatcher) {
  117. FURI_LOG_E(TAG, "Invalid view dispatcher");
  118. return;
  119. }
  120. // Remove and free Main view
  121. if(app->view_main) {
  122. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewMain);
  123. view_free(app->view_main);
  124. }
  125. if(app->view_run) {
  126. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewRun);
  127. view_free(app->view_run);
  128. }
  129. // Deinitialize UART
  130. flipper_http_deinit();
  131. // Remove and free Submenu
  132. if(app->submenu_main) {
  133. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewSubmenuMain);
  134. submenu_free(app->submenu_main);
  135. }
  136. if(app->submenu_config) {
  137. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewSubmenuConfig);
  138. submenu_free(app->submenu_config);
  139. }
  140. // Remove and free Variable Item Lists
  141. if(app->variable_item_list_wifi) {
  142. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewVariableItemListWifi);
  143. variable_item_list_free(app->variable_item_list_wifi);
  144. }
  145. if(app->variable_item_list_file) {
  146. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewVariableItemListFile);
  147. variable_item_list_free(app->variable_item_list_file);
  148. }
  149. if(app->variable_item_list_request) {
  150. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewVariableItemListRequest);
  151. variable_item_list_free(app->variable_item_list_request);
  152. }
  153. // Remove and free Text Input views
  154. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInput);
  155. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputSSID);
  156. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputPassword);
  157. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputFileType);
  158. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputFileRename);
  159. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputHeaders);
  160. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputPayload);
  161. if(app->text_input_path) text_input_free(app->text_input_path);
  162. if(app->text_input_ssid) text_input_free(app->text_input_ssid);
  163. if(app->text_input_password) text_input_free(app->text_input_password);
  164. if(app->text_input_file_type) text_input_free(app->text_input_file_type);
  165. if(app->text_input_file_rename) text_input_free(app->text_input_file_rename);
  166. if(app->text_input_headers) text_input_free(app->text_input_headers);
  167. if(app->text_input_payload) text_input_free(app->text_input_payload);
  168. // Remove and free Widgets
  169. if(app->widget_about) {
  170. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewAbout);
  171. widget_free(app->widget_about);
  172. }
  173. if(app->widget_file_read) {
  174. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewFileRead);
  175. widget_free(app->widget_file_read);
  176. }
  177. if(app->widget_file_delete) {
  178. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewFileDelete);
  179. widget_free(app->widget_file_delete);
  180. }
  181. // Free the ViewDispatcher and close GUI
  182. if(app->view_dispatcher) view_dispatcher_free(app->view_dispatcher);
  183. // Free the application structure
  184. if(app) {
  185. free(app);
  186. }
  187. }
  188. WebCrawlerApp* app_instance = NULL;
  189. char* http_method_names[] = {"GET", "POST", "PUT", "DELETE", "DOWNLOAD"};