web_crawler.c 7.2 KB

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