watobo 0.9.21 → 0.9.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +46 -1
  3. data/bin/nfq_server.rb +0 -9
  4. data/bin/watobo_gui.rb +3 -13
  5. data/custom-views/prettify-json.rb +9 -18
  6. data/icons/watobo.ico +0 -0
  7. data/icons/watobo.ico.old +0 -0
  8. data/lib/watobo.rb +10 -19
  9. data/lib/watobo/adapters.rb +5 -14
  10. data/lib/watobo/adapters/data_store.rb +50 -59
  11. data/lib/watobo/adapters/file/file_store.rb +287 -296
  12. data/lib/watobo/adapters/file/marshal_store.rb +293 -296
  13. data/lib/watobo/adapters/session_store.rb +5 -14
  14. data/lib/watobo/ca.rb +1 -10
  15. data/lib/watobo/config.rb +197 -206
  16. data/lib/watobo/constants.rb +0 -9
  17. data/lib/watobo/core.rb +3 -12
  18. data/lib/watobo/core/active_check.rb +72 -135
  19. data/lib/watobo/core/active_checks.rb +49 -58
  20. data/lib/watobo/core/ca.rb +369 -389
  21. data/lib/watobo/core/cert_store.rb +34 -43
  22. data/lib/watobo/core/chat.rb +92 -101
  23. data/lib/watobo/core/chats.rb +271 -280
  24. data/lib/watobo/core/client_cert_store.rb +106 -35
  25. data/lib/watobo/core/conversation.rb +48 -57
  26. data/lib/watobo/core/cookie.rb +23 -32
  27. data/lib/watobo/core/egress_handlers.rb +98 -0
  28. data/lib/watobo/core/finding.rb +66 -75
  29. data/lib/watobo/core/findings.rb +107 -114
  30. data/lib/watobo/core/forwarding_proxy.rb +13 -22
  31. data/lib/watobo/core/fuzz_gen.rb +0 -9
  32. data/lib/watobo/core/intercept_carver.rb +166 -177
  33. data/lib/watobo/core/intercept_filter.rb +235 -244
  34. data/lib/watobo/core/interceptor.rb +98 -107
  35. data/lib/watobo/core/min_class.rb +4 -13
  36. data/lib/watobo/core/netfilter_queue.rb +170 -179
  37. data/lib/watobo/core/ott_cache.rb +132 -141
  38. data/lib/watobo/core/parameter.rb +43 -52
  39. data/lib/watobo/core/passive_check.rb +103 -102
  40. data/lib/watobo/core/passive_checks.rb +48 -57
  41. data/lib/watobo/core/passive_scanner.rb +54 -55
  42. data/lib/watobo/core/plugin.rb +11 -20
  43. data/lib/watobo/core/project.rb +3 -9
  44. data/lib/watobo/core/proxy.rb +43 -52
  45. data/lib/watobo/core/request.rb +125 -123
  46. data/lib/watobo/core/response.rb +44 -53
  47. data/lib/watobo/core/scanner.rb +0 -9
  48. data/lib/watobo/core/scanner3.rb +405 -414
  49. data/lib/watobo/core/scope.rb +83 -92
  50. data/lib/watobo/core/session.rb +1043 -1026
  51. data/lib/watobo/core/sid_cache.rb +98 -107
  52. data/lib/watobo/core/subscriber.rb +25 -34
  53. data/lib/watobo/defaults.rb +21 -30
  54. data/lib/watobo/external/diff/lcs.rb +0 -9
  55. data/lib/watobo/external/diff/lcs/array.rb +0 -9
  56. data/lib/watobo/external/diff/lcs/block.rb +0 -9
  57. data/lib/watobo/external/diff/lcs/callbacks.rb +0 -9
  58. data/lib/watobo/external/diff/lcs/change.rb +0 -9
  59. data/lib/watobo/external/diff/lcs/hunk.rb +0 -9
  60. data/lib/watobo/external/diff/lcs/ldiff.rb +0 -9
  61. data/lib/watobo/external/diff/lcs/string.rb +0 -9
  62. data/lib/watobo/externals.rb +6 -15
  63. data/lib/watobo/framework.rb +4 -13
  64. data/lib/watobo/framework/create_project.rb +60 -69
  65. data/lib/watobo/framework/init.rb +0 -9
  66. data/lib/watobo/framework/init_modules.rb +0 -9
  67. data/lib/watobo/framework/license_text.rb +28 -37
  68. data/lib/watobo/framework/load_chat.rb +13 -22
  69. data/lib/watobo/gui.rb +132 -123
  70. data/lib/watobo/gui/about_watobo.rb +0 -9
  71. data/lib/watobo/gui/browser_preview.rb +0 -9
  72. data/lib/watobo/gui/certificate_dialog.rb +0 -9
  73. data/lib/watobo/gui/chat_diff.rb +0 -9
  74. data/lib/watobo/gui/chatviewer_frame.rb +73 -72
  75. data/lib/watobo/gui/checkboxtree.rb +0 -9
  76. data/lib/watobo/gui/checks_policy_frame.rb +0 -9
  77. data/lib/watobo/gui/client_cert_dialog.rb +96 -87
  78. data/lib/watobo/gui/confirm_scan_dialog.rb +0 -9
  79. data/lib/watobo/gui/conversation_table.rb +158 -164
  80. data/lib/watobo/gui/conversation_table_ctrl.rb +207 -216
  81. data/lib/watobo/gui/conversation_table_ctrl2.rb +373 -382
  82. data/lib/watobo/gui/csrf_token_dialog.rb +0 -9
  83. data/lib/watobo/gui/custom_viewer.rb +374 -383
  84. data/lib/watobo/gui/dashboard.rb +296 -303
  85. data/lib/watobo/gui/define_scope_frame.rb +0 -9
  86. data/lib/watobo/gui/differ_frame.rb +215 -224
  87. data/lib/watobo/gui/edit_comment.rb +0 -9
  88. data/lib/watobo/gui/edit_scope_dialog.rb +0 -9
  89. data/lib/watobo/gui/export_dialog.rb +104 -113
  90. data/lib/watobo/gui/finding_info.rb +0 -9
  91. data/lib/watobo/gui/findings_tree.rb +210 -217
  92. data/lib/watobo/gui/full_scan_dialog.rb +0 -9
  93. data/lib/watobo/gui/fuzzer_gui.rb +1295 -1313
  94. data/lib/watobo/gui/fxsave_thread.rb +14 -0
  95. data/lib/watobo/gui/goto_url_dialog.rb +70 -79
  96. data/lib/watobo/gui/hex_viewer.rb +0 -9
  97. data/lib/watobo/gui/html_viewer.rb +287 -296
  98. data/lib/watobo/gui/intercept_filter_dialog.rb +188 -197
  99. data/lib/watobo/gui/interceptor_gui.rb +1041 -1051
  100. data/lib/watobo/gui/interceptor_settings_dialog.rb +0 -9
  101. data/lib/watobo/gui/json_viewer.rb +287 -0
  102. data/lib/watobo/gui/list_box.rb +101 -110
  103. data/lib/watobo/gui/log_file_viewer.rb +32 -41
  104. data/lib/watobo/gui/log_viewer.rb +83 -88
  105. data/lib/watobo/gui/login_wizzard.rb +0 -9
  106. data/lib/watobo/gui/main_window.rb +587 -618
  107. data/lib/watobo/gui/manual_request_editor.rb +620 -565
  108. data/lib/watobo/gui/master_pw_dialog.rb +0 -9
  109. data/lib/watobo/gui/mixins/gui_settings.rb +29 -38
  110. data/lib/watobo/gui/page_tree.rb +217 -226
  111. data/lib/watobo/gui/password_policy_dialog.rb +0 -9
  112. data/lib/watobo/gui/plugin_board.rb +0 -9
  113. data/lib/watobo/gui/preferences_dialog.rb +0 -9
  114. data/lib/watobo/gui/progress_window.rb +17 -27
  115. data/lib/watobo/gui/project_wizzard.rb +0 -9
  116. data/lib/watobo/gui/proxy_dialog.rb +1 -10
  117. data/lib/watobo/gui/quick_scan_dialog.rb +0 -9
  118. data/lib/watobo/gui/request_builder_frame.rb +102 -111
  119. data/lib/watobo/gui/request_editor.rb +181 -137
  120. data/lib/watobo/gui/rewrite_filters_dialog.rb +394 -403
  121. data/lib/watobo/gui/rewrite_rules_dialog.rb +372 -381
  122. data/lib/watobo/gui/save_chat_dialog.rb +140 -149
  123. data/lib/watobo/gui/scanner_settings_dialog.rb +0 -9
  124. data/lib/watobo/gui/select_chat_dialog.rb +0 -9
  125. data/lib/watobo/gui/session_management_dialog.rb +0 -9
  126. data/lib/watobo/gui/sites_tree.rb +0 -9
  127. data/lib/watobo/gui/status_bar.rb +0 -9
  128. data/lib/watobo/gui/table_editor.rb +0 -9
  129. data/lib/watobo/gui/tagless_viewer.rb +0 -9
  130. data/lib/watobo/gui/templates/plugin.rb +0 -9
  131. data/lib/watobo/gui/templates/plugin2.rb +92 -100
  132. data/lib/watobo/gui/templates/plugin_base.rb +144 -153
  133. data/lib/watobo/gui/text_viewer.rb +0 -9
  134. data/lib/watobo/gui/transcoder_window.rb +0 -9
  135. data/lib/watobo/gui/utils/gui_utils.rb +0 -9
  136. data/lib/watobo/gui/utils/init_icons.rb +86 -95
  137. data/lib/watobo/gui/utils/load_icons.rb +33 -42
  138. data/lib/watobo/gui/utils/load_plugins.rb +116 -119
  139. data/lib/watobo/gui/utils/master_password.rb +68 -77
  140. data/lib/watobo/gui/utils/save_default_settings.rb +113 -122
  141. data/lib/watobo/gui/utils/save_project_settings.rb +0 -9
  142. data/lib/watobo/gui/utils/save_proxy_settings.rb +41 -50
  143. data/lib/watobo/gui/utils/save_scanner_settings.rb +18 -27
  144. data/lib/watobo/gui/utils/session_history.rb +112 -121
  145. data/lib/watobo/gui/workspace_dialog.rb +0 -9
  146. data/lib/watobo/gui/www_auth_dialog.rb +0 -9
  147. data/lib/watobo/gui/xml_viewer_frame.rb +0 -9
  148. data/lib/watobo/http.rb +4 -13
  149. data/lib/watobo/http/cookies/cookies.rb +26 -35
  150. data/lib/watobo/http/data/data.rb +45 -54
  151. data/lib/watobo/http/data/json.rb +47 -55
  152. data/lib/watobo/http/url/url.rb +38 -47
  153. data/lib/watobo/http/xml/xml.rb +124 -130
  154. data/lib/watobo/interceptor.rb +3 -12
  155. data/lib/watobo/interceptor/proxy.rb +742 -739
  156. data/lib/watobo/interceptor/transparent.rb +22 -24
  157. data/lib/watobo/mixins.rb +10 -19
  158. data/lib/watobo/mixins/check_info.rb +27 -36
  159. data/lib/watobo/mixins/httpparser.rb +613 -637
  160. data/lib/watobo/mixins/request_parser.rb +88 -97
  161. data/lib/watobo/mixins/shapers.rb +515 -529
  162. data/lib/watobo/mixins/transcoders.rb +3 -11
  163. data/lib/watobo/parser.rb +1 -10
  164. data/lib/watobo/parser/html.rb +83 -92
  165. data/lib/watobo/patch_fxruby_setfocus.rb +26 -0
  166. data/lib/watobo/sockets.rb +3 -12
  167. data/lib/watobo/sockets/agent.rb +828 -837
  168. data/lib/watobo/sockets/client_socket.rb +308 -312
  169. data/lib/watobo/sockets/connection.rb +401 -410
  170. data/lib/watobo/sockets/http_socket.rb +11 -13
  171. data/lib/watobo/sockets/ntlm_auth.rb +129 -138
  172. data/lib/watobo/utils.rb +10 -19
  173. data/lib/watobo/utils/check_regex.rb +0 -9
  174. data/lib/watobo/utils/copy_object.rb +0 -9
  175. data/lib/watobo/utils/crypto.rb +0 -9
  176. data/lib/watobo/utils/expand_range.rb +23 -32
  177. data/lib/watobo/utils/export_xml.rb +97 -106
  178. data/lib/watobo/utils/file_management.rb +9 -11
  179. data/lib/watobo/utils/hexprint.rb +9 -18
  180. data/lib/watobo/utils/load_chat.rb +0 -9
  181. data/lib/watobo/utils/load_icon.rb +0 -9
  182. data/lib/watobo/utils/ntlm.rb +866 -875
  183. data/lib/watobo/utils/print_debug.rb +12 -21
  184. data/lib/watobo/utils/response_builder.rb +90 -99
  185. data/lib/watobo/utils/response_hash.rb +0 -9
  186. data/lib/watobo/utils/secure_eval.rb +0 -9
  187. data/lib/watobo/utils/strings.rb +10 -19
  188. data/lib/watobo/utils/text2request.rb +0 -9
  189. data/lib/watobo/utils/url.rb +23 -32
  190. data/lib/watobo/utils/utf16.rb +11 -20
  191. data/modules/active/Apache/mod_status.rb +0 -9
  192. data/modules/active/Apache/multiview.rb +151 -160
  193. data/modules/active/Flash/crossdomain.rb +0 -9
  194. data/modules/active/JWT/jwt_oauth2_none.rb +111 -0
  195. data/modules/active/cq5/cq5_default_selectors.rb +106 -115
  196. data/modules/active/cq5/cqp_user_enumeration.rb +125 -134
  197. data/modules/active/directories/dirwalker.rb +0 -9
  198. data/modules/active/discovery/fileextensions.rb +0 -9
  199. data/modules/active/discovery/http_methods.rb +0 -9
  200. data/modules/active/discovery/jsmapfiles.rb +79 -0
  201. data/modules/active/domino/domino_db.rb +68 -76
  202. data/modules/active/dotNET/custom_errors.rb +102 -111
  203. data/modules/active/dotNET/dotnet_files.rb +90 -99
  204. data/modules/active/fileinclusion/lfi_simple.rb +0 -9
  205. data/modules/active/jboss/jboss_basic.rb +0 -9
  206. data/modules/active/sap/business_objects.rb +51 -60
  207. data/modules/active/sap/its_commands.rb +0 -9
  208. data/modules/active/sap/its_service_parameter.rb +0 -9
  209. data/modules/active/sap/its_services.rb +0 -9
  210. data/modules/active/sap/its_xss.rb +0 -9
  211. data/modules/active/shell_shock/shell_shock.rb +139 -148
  212. data/modules/active/siebel/siebel_apps.rb +160 -169
  213. data/modules/active/sqlinjection/sql_boolean.rb +0 -9
  214. data/modules/active/sqlinjection/sql_numerical.rb +198 -0
  215. data/modules/active/sqlinjection/sqli_error.rb +0 -9
  216. data/modules/active/sqlinjection/sqli_timing.rb +220 -229
  217. data/modules/active/struts2/default_handler_ognl.rb +106 -115
  218. data/modules/active/struts2/include_params_ognl.rb +105 -114
  219. data/modules/active/xml/xml_xxe.rb +112 -123
  220. data/modules/active/xss/xss_ng.rb +214 -223
  221. data/modules/active/xss/xss_simple.rb +0 -9
  222. data/modules/passive/ajax.rb +68 -77
  223. data/modules/passive/autocomplete.rb +56 -65
  224. data/modules/passive/cookie_options.rb +0 -9
  225. data/modules/passive/cookie_xss.rb +0 -9
  226. data/modules/passive/detect_code.rb +0 -9
  227. data/modules/passive/detect_fileupload.rb +0 -9
  228. data/modules/passive/detect_infrastructure.rb +0 -9
  229. data/modules/passive/detect_one_time_tokens.rb +0 -9
  230. data/modules/passive/dirindexing.rb +0 -9
  231. data/modules/passive/disclosure_domino.rb +55 -64
  232. data/modules/passive/disclosure_emails.rb +0 -9
  233. data/modules/passive/disclosure_ipaddr.rb +55 -53
  234. data/modules/passive/filename_as_parameter.rb +0 -9
  235. data/modules/passive/form_spotter.rb +0 -9
  236. data/modules/passive/hidden_fields.rb +50 -59
  237. data/modules/passive/hotspots.rb +0 -9
  238. data/modules/passive/in_script_parameter.rb +0 -9
  239. data/modules/passive/json_web_token.rb +93 -0
  240. data/modules/passive/multiple_server_headers.rb +0 -9
  241. data/modules/passive/possible_login.rb +0 -9
  242. data/modules/passive/redirect_url.rb +0 -9
  243. data/modules/passive/redirectionz.rb +0 -9
  244. data/modules/passive/sap-headers.rb +56 -65
  245. data/modules/passive/xss_dom.rb +0 -9
  246. data/plugins/aem/aem.rb +11 -20
  247. data/plugins/aem/gui/main.rb +118 -127
  248. data/plugins/aem/gui/tree_view.rb +171 -180
  249. data/plugins/aem/lib/agent.rb +130 -138
  250. data/plugins/aem/lib/dispatcher.rb +45 -51
  251. data/plugins/aem/lib/engine.rb +177 -186
  252. data/plugins/catalog/catalog.rb +345 -355
  253. data/plugins/crawler/crawler.rb +4 -13
  254. data/plugins/crawler/gui.rb +5 -14
  255. data/plugins/crawler/gui/auth_frame.rb +270 -279
  256. data/plugins/crawler/gui/crawler_gui.rb +271 -276
  257. data/plugins/crawler/gui/general_settings_frame.rb +96 -105
  258. data/plugins/crawler/gui/hooks_frame.rb +80 -89
  259. data/plugins/crawler/gui/scope_frame.rb +50 -59
  260. data/plugins/crawler/gui/settings_tabbook.rb +38 -47
  261. data/plugins/crawler/gui/status_frame.rb +59 -68
  262. data/plugins/crawler/lib/bags.rb +18 -27
  263. data/plugins/crawler/lib/constants.rb +11 -20
  264. data/plugins/crawler/lib/engine.rb +488 -497
  265. data/plugins/crawler/lib/grabber.rb +68 -77
  266. data/plugins/crawler/lib/status.rb +71 -80
  267. data/plugins/crawler/lib/uri_mp.rb +12 -21
  268. data/plugins/filefinder/filefinder.rb +326 -333
  269. data/plugins/sqlmap/bin/test.rb +78 -87
  270. data/plugins/sqlmap/gui.rb +4 -13
  271. data/plugins/sqlmap/gui/main.rb +218 -227
  272. data/plugins/sqlmap/gui/options_frame.rb +97 -106
  273. data/plugins/sqlmap/lib/sqlmap_ctrl.rb +90 -100
  274. data/plugins/sqlmap/sqlmap.rb +2 -11
  275. data/plugins/sslchecker/cli/sslchecker_cli.rb +0 -9
  276. data/plugins/sslchecker/gui/cipher_table.rb +246 -254
  277. data/plugins/sslchecker/gui/gui.rb +258 -264
  278. data/plugins/sslchecker/gui/sslchecker.rb +4 -13
  279. data/plugins/sslchecker/lib/check.rb +127 -133
  280. data/plugins/wshell/gui/main.rb +119 -117
  281. data/plugins/wshell/lib/core.rb +38 -88
  282. data/plugins/wshell/wshell.rb +11 -20
  283. metadata +170 -164
@@ -1,30 +1,21 @@
1
- #.
2
- # response.rb
3
- #.
4
- # Copyright 2014 by siberas, http://www.siberas.de
5
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
6
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
7
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
9
-
10
1
  # @private
11
- module Watobo#:nodoc: all
12
- class Response < Array
13
- def self.is_html?
14
-
15
- end
16
-
17
- def self.is_json?
18
-
2
+ module Watobo#:nodoc: all
3
+ class Response < Array
4
+ def self.is_html?
5
+
19
6
  end
20
7
 
21
-
22
- def self.create( response )
23
- raise ArgumentError, "Array Expected." unless response.is_a? Array
24
- response.extend Watobo::Mixin::Parser::Url
25
- response.extend Watobo::Mixin::Parser::Web10
26
- response.extend Watobo::Mixin::Shaper::Web10
27
- response.extend Watobo::Mixin::Shaper::HttpResponse
8
+ def self.is_json?
9
+
10
+ end
11
+
12
+
13
+ def self.create( response )
14
+ raise ArgumentError, "Array Expected." unless response.is_a? Array
15
+ response.extend Watobo::Mixin::Parser::Url
16
+ response.extend Watobo::Mixin::Parser::Web10
17
+ response.extend Watobo::Mixin::Shaper::Web10
18
+ response.extend Watobo::Mixin::Shaper::HttpResponse
28
19
  end
29
20
 
30
21
  def to_s
@@ -37,33 +28,33 @@ module Watobo#:nodoc: all
37
28
  end
38
29
  data
39
30
  end
40
-
41
-
42
- def data
43
- @data
44
- end
45
-
46
- def copy
47
- c = Watobo::Utils.copyObject self
48
- Watobo::Request.new c
49
- end
50
-
51
- def initialize(r)
52
- if r.respond_to? :concat
53
- #puts "Create REQUEST from ARRAY"
54
- self.concat r
55
- elsif r.is_a? String
56
- raise ArgumentError, "Need Array"
57
- end
58
- self.extend Watobo::Mixin::Parser::Url
59
- self.extend Watobo::Mixin::Parser::Web10
60
- self.extend Watobo::Mixin::Shaper::Web10
61
- self.extend Watobo::Mixin::Shaper::HttpResponse
62
-
63
- if content_type =~ /(html|text)/
64
- self.extend Watobo::Parser::HTML
65
- end
66
-
67
- end
68
- end
31
+
32
+
33
+ def data
34
+ @data
35
+ end
36
+
37
+ def copy
38
+ c = Watobo::Utils.copyObject self
39
+ Watobo::Request.new c
40
+ end
41
+
42
+ def initialize(r)
43
+ if r.respond_to? :concat
44
+ #puts "Create REQUEST from ARRAY"
45
+ self.concat r
46
+ elsif r.is_a? String
47
+ raise ArgumentError, "Need Array"
48
+ end
49
+ self.extend Watobo::Mixin::Parser::Url
50
+ self.extend Watobo::Mixin::Parser::Web10
51
+ self.extend Watobo::Mixin::Shaper::Web10
52
+ self.extend Watobo::Mixin::Shaper::HttpResponse
53
+
54
+ if content_type =~ /(html|text)/
55
+ self.extend Watobo::Parser::HTML
56
+ end
57
+
58
+ end
59
+ end
69
60
  end
@@ -1,12 +1,3 @@
1
- #.
2
- # scanner.rb
3
- #.
4
- # Copyright 2014 by siberas, http://www.siberas.de
5
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
6
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
7
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
9
-
10
1
  # @private
11
2
  module Watobo#:nodoc: all
12
3
  class Scanner2
@@ -1,102 +1,93 @@
1
- #.
2
- # scanner3.rb
3
- #.
4
- # Copyright 2014 by siberas, http://www.siberas.de
5
- # This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
6
- # WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
7
- # WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
8
- # You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
9
-
10
1
  # @private
11
- module Watobo#:nodoc: all
12
- class Scanner3
13
-
14
- include Watobo::Constants
15
- include Watobo::Subscriber
16
-
17
- SCANNER_READY = 0x0000
18
- SCANNER_RUNNING = 0x0001
19
-
20
- GENERATION_STARTED = 0x0100
21
- GENERATION_FINISHED = 0x0200
22
- class Worker
23
- include Watobo::Constants
24
- include Watobo::Subscriber
25
-
26
- attr :engine
27
-
28
- STATE_IDLE = 0x00
29
- STATE_RUNNING = 0x01
2
+ module Watobo#:nodoc: all
3
+ class Scanner3
4
+
5
+ include Watobo::Constants
6
+ include Watobo::Subscriber
7
+
8
+ SCANNER_READY = 0x0000
9
+ SCANNER_RUNNING = 0x0001
10
+
11
+ GENERATION_STARTED = 0x0100
12
+ GENERATION_FINISHED = 0x0200
13
+ class Worker
14
+ include Watobo::Constants
15
+ include Watobo::Subscriber
16
+
17
+ attr :engine
18
+
19
+ STATE_IDLE = 0x00
20
+ STATE_RUNNING = 0x01
30
21
  STATE_WAIT_FOR_LOGIN = 0x02
31
- def state
32
- state = nil
33
- @state_mutex.synchronize do
34
- state = @state
35
- end
36
- state
37
- end
38
-
39
- def run
40
- @state_mutex.synchronize do @state = STATE_RUNNING; end
41
- Thread.new{ @engine.run }
42
- end
43
-
44
- def start
45
- @engine = Thread.new(@prefs){ |prefs|
46
- relogin_count = 0
22
+ def state
23
+ state = nil
24
+ @state_mutex.synchronize do
25
+ state = @state
26
+ end
27
+ state
28
+ end
29
+
30
+ def run
31
+ @state_mutex.synchronize do @state = STATE_RUNNING; end
32
+ Thread.new{ @engine.run }
33
+ end
34
+
35
+ def start
36
+ @engine = Thread.new(@prefs){ |prefs|
37
+ relogin_count = 0
47
38
  loop do
48
- Thread.current[:pos] = "wait for task"
49
- task = @tasks.deq
50
- begin
51
- #puts "RUNNING #{task[:module]}"
52
- request, response = task[:check].call()
53
-
39
+ Thread.current[:pos] = "wait for task"
40
+ task = @tasks.deq
41
+ begin
42
+ #puts "RUNNING #{task[:module]}"
43
+ request, response = task[:check].call()
44
+
54
45
  next if response.nil?
55
-
56
- unless prefs[:logout_signatures].empty? or prefs[:auto_login] == false
57
- logged_out = false
58
- prefs[:logout_signatures].each do |sig|
59
- logged_out = true if response.join =~ /#{sig}/
60
- end
61
-
46
+
47
+ unless prefs[:logout_signatures].empty? or prefs[:auto_login] == false
48
+ logged_out = false
49
+ prefs[:logout_signatures].each do |sig|
50
+ logged_out = true if response.join =~ /#{sig}/
51
+ end
52
+
62
53
  if logged_out
63
- Thread.current[:pos] = "logged out"
64
- @state_mutex.synchronize do @state = STATE_WAIT_FOR_LOGIN; end
65
- @logged_out_queue.push self
66
- # stop current thread, will be waked-up by scanner
67
- Thread.stop
54
+ Thread.current[:pos] = "logged out"
55
+ @state_mutex.synchronize do @state = STATE_WAIT_FOR_LOGIN; end
56
+ @logged_out_queue.push self
57
+ # stop current thread, will be waked-up by scanner
58
+ Thread.stop
68
59
  relogin_count += 1
69
- Thread.current[:pos] = "set state"
70
- @state_mutex.synchronize do @state = STATE_RUNNING; end
71
- unless relogin_count > 5
72
- request, response = task[:check].call()
73
- end
74
- end
75
- end
76
-
77
- unless prefs[:scanlog_name].nil? or prefs[:scanlog_name].empty?
78
- chat = Chat.new(request, response, :id => 0, :chat_source => prefs[:chat_source])
79
- Watobo::DataStore.add_scan_log(chat, prefs[:scanlog_name])
80
- end
81
- rescue => bang
82
- puts "!!! #{task[:module]} !!!"
83
- puts bang
84
- puts bang.backtrace if $DEBUG
85
- ensure
60
+ Thread.current[:pos] = "set state"
61
+ @state_mutex.synchronize do @state = STATE_RUNNING; end
62
+ unless relogin_count > 5
63
+ request, response = task[:check].call()
64
+ end
65
+ end
66
+ end
67
+
68
+ unless prefs[:scanlog_name].nil? or prefs[:scanlog_name].empty?
69
+ chat = Chat.new(request, response, :id => 0, :chat_source => prefs[:chat_source])
70
+ Watobo::DataStore.add_scan_log(chat, prefs[:scanlog_name])
71
+ end
72
+ rescue => bang
73
+ puts "!!! #{task[:module]} !!!"
74
+ puts bang
75
+ puts bang.backtrace if $DEBUG
76
+ ensure
86
77
  #puts "FINISHED #{task[:module]}"
87
- Thread.current[:pos] = "scan_finished"
88
- notify(:task_finished, task[:module])
89
- end
90
- Thread.exit if relogin_count > 5
91
- relogin_count = 0
92
- end
93
- }
94
- end
95
-
96
- def stop
78
+ Thread.current[:pos] = "scan_finished"
79
+ notify(:task_finished, task[:module])
80
+ end
81
+ Thread.exit if relogin_count > 5
82
+ relogin_count = 0
83
+ end
84
+ }
85
+ end
86
+
87
+ def stop
97
88
  @state_mutex.synchronize{ @state = STATE_IDLE }
98
89
  begin
99
- return false if @engine.nil?
90
+ return false if @engine.nil?
100
91
  if @engine.alive?
101
92
  puts "[#{self}] got stopped"
102
93
  Thread.kill @engine
@@ -106,83 +97,83 @@ module Watobo#:nodoc: all
106
97
  puts "!!! could not stop worker !!!"
107
98
  puts bang
108
99
  puts bang.backtrace
109
- end
110
- end
111
-
112
- def wait_for_login?
113
- state = false
114
- @state_mutex.synchronize do
115
- state = ( @state == STATE_WAIT_FOR_LOGIN )
116
- end
117
- state
118
- end
119
-
120
- def running?
121
- @state_mutex.synchronize do
122
- running = ( @state == STATE_RUNNING )
123
- end
124
- running
125
- end
126
-
127
- def initialize(task_queue, logged_out_queue, prefs)
128
- @engine = nil
129
- @tasks = task_queue
130
- @logged_out_queue = logged_out_queue
131
- @prefs = prefs
132
- @relogin_count = 0
133
- @state_mutex = Mutex.new
134
- @state = STATE_IDLE
135
-
136
- end
137
-
138
- end
139
- #
140
- # E N D O F W O R K E R
141
-
142
- def tasks
143
- @tasks
144
- end
145
-
146
- def status_running?
147
- ( status & SCANNER_RUNNING ) > 0
148
- end
149
-
150
- def generation_finished?
151
- ( status & GENERATION_FINISHED ) > 0
152
- end
100
+ end
101
+ end
102
+
103
+ def wait_for_login?
104
+ state = false
105
+ @state_mutex.synchronize do
106
+ state = ( @state == STATE_WAIT_FOR_LOGIN )
107
+ end
108
+ state
109
+ end
110
+
111
+ def running?
112
+ @state_mutex.synchronize do
113
+ running = ( @state == STATE_RUNNING )
114
+ end
115
+ running
116
+ end
117
+
118
+ def initialize(task_queue, logged_out_queue, prefs)
119
+ @engine = nil
120
+ @tasks = task_queue
121
+ @logged_out_queue = logged_out_queue
122
+ @prefs = prefs
123
+ @relogin_count = 0
124
+ @state_mutex = Mutex.new
125
+ @state = STATE_IDLE
126
+
127
+ end
128
+
129
+ end
130
+ #
131
+ # E N D O F W O R K E R
132
+
133
+ def tasks
134
+ @tasks
135
+ end
136
+
137
+ def status_running?
138
+ ( status & SCANNER_RUNNING ) > 0
139
+ end
140
+
141
+ def generation_finished?
142
+ ( status & GENERATION_FINISHED ) > 0
143
+ end
153
144
 
154
145
  def finished?
155
146
  # puts "num_waiting: #{@tasks.num_waiting}"
156
147
  # puts "workers: #{@workers.length}"
157
148
  # puts "generation finished? #{generation_finished?.class}"
158
149
  # puts "num tasks: #{@tasks.size}"
159
- # puts "running workers: #{running_workers}"
160
- return true if (
161
- status_running? &&
162
- ( @tasks.num_waiting == @workers.length ) &&
163
- ( @tasks.size == 0 ) &&
164
- generation_finished?
165
- )
166
- false
167
- end
150
+ # puts "running workers: #{running_workers}"
151
+ return true if (
152
+ status_running? &&
153
+ ( @tasks.num_waiting == @workers.length ) &&
154
+ ( @tasks.size == 0 ) &&
155
+ generation_finished?
156
+ )
157
+ false
158
+ end
168
159
 
169
160
  def running?()
170
-
171
- return false if (
172
- status_running? &&
173
- ( @tasks.num_waiting == @workers.length ) &&
174
- ( @tasks.size == 0 ) &&
175
- generation_finished?
176
- )
177
- return true if status_running?
178
- return false
179
- end
161
+
162
+ return false if (
163
+ status_running? &&
164
+ ( @tasks.num_waiting == @workers.length ) &&
165
+ ( @tasks.size == 0 ) &&
166
+ generation_finished?
167
+ )
168
+ return true if status_running?
169
+ return false
170
+ end
180
171
 
181
172
  def stop()
182
- print "\n[#{self}] stopping ... "
183
- begin
184
- @workers.each do |w|
185
- w.stop
173
+ print "\n[#{self}] stopping ... "
174
+ begin
175
+ @workers.each do |w|
176
+ w.stop
186
177
  end
187
178
  unless @ctrl_thread.nil?
188
179
  if @ctrl_thread.alive?
@@ -190,274 +181,274 @@ module Watobo#:nodoc: all
190
181
  Thread.kill @ctrl_thread
191
182
  end
192
183
  end
193
- print "[OK]\n"
184
+ print "[OK]\n"
194
185
  rescue => bang
195
- print "[OUTCH]\n"
196
- puts bang
197
- puts bang.backtrace if $DEBUG
198
- end
199
- end
200
-
201
- def cancel()
202
- begin
203
- @workers.each do |w|
204
- w.stop
205
- end
206
- rescue => bang
207
- puts bang
208
- puts bang.backtrace if $DEBUG
209
- end
210
- end
211
-
212
- def continue()
213
- # TODO
214
- end
215
-
216
- def progress
217
- @task_count_lock.synchronize do
218
- YAML.load(YAML.dump(@task_counter))
219
- end
220
- end
221
-
222
- def sum_total
223
- sum = 0
224
- @task_count_lock.synchronize do
225
- sum = @task_counter.values.inject(0){|i,v| i + v[:total] }
226
- end
227
- sum
228
- end
229
-
230
- def sum_progress
231
- sum = 0
232
- @task_count_lock.synchronize do
233
- sum = @task_counter.values.inject(0){|i,v| i + v[:progress] }
234
- end
235
- sum
236
- end
237
-
238
- def run( check_prefs={} )
239
- # @sites_online.clear
240
- @uniqueRequests = Hash.new
241
- set_status_running
242
-
243
- @login_count = 0
244
- @max_login_count = 20
245
-
246
- @ctrl_thread = Thread.new{
247
- size = -1
248
- loop do
186
+ print "[OUTCH]\n"
187
+ puts bang
188
+ puts bang.backtrace if $DEBUG
189
+ end
190
+ end
191
+
192
+ def cancel()
193
+ begin
194
+ @workers.each do |w|
195
+ w.stop
196
+ end
197
+ rescue => bang
198
+ puts bang
199
+ puts bang.backtrace if $DEBUG
200
+ end
201
+ end
202
+
203
+ def continue()
204
+ # TODO
205
+ end
206
+
207
+ def progress
208
+ @task_count_lock.synchronize do
209
+ YAML.load(YAML.dump(@task_counter))
210
+ end
211
+ end
212
+
213
+ def sum_total
214
+ sum = 0
215
+ @task_count_lock.synchronize do
216
+ sum = @task_counter.values.inject(0){|i,v| i + v[:total] }
217
+ end
218
+ sum
219
+ end
220
+
221
+ def sum_progress
222
+ sum = 0
223
+ @task_count_lock.synchronize do
224
+ sum = @task_counter.values.inject(0){|i,v| i + v[:progress] }
225
+ end
226
+ sum
227
+ end
228
+
229
+ def run( check_prefs={} )
230
+ # @sites_online.clear
231
+ @uniqueRequests = Hash.new
232
+ set_status_running
233
+
234
+ @login_count = 0
235
+ @max_login_count = 20
236
+
237
+ @ctrl_thread = Thread.new{
238
+ size = -1
239
+ loop do
249
240
  if @tasks.num_waiting == @workers.length and @tasks.size == 0 and generation_finished?
250
241
  begin
251
- puts "[#{self}] seems scan is finished. stopping workers now ..."
242
+ puts "[#{self}] seems scan is finished. stopping workers now ..."
252
243
  @workers.map{|w|
253
244
  #puts "[]#{self}] stopping worker #{w}"
254
245
  w.stop
255
- }
256
- # suizide!
246
+ }
247
+ # suizide!
257
248
  Thread.exit
258
249
  rescue => bang
259
250
  puts bang
260
251
  puts bang.backtrace
261
- end
262
- end
263
-
264
- if @logged_out.size == ( @workers.length - @tasks.num_waiting) or @tasks.num_waiting == @workers.size
265
- @logged_out.clear
266
- #puts "!LOGOUT DETECTED!\n#{@logged_out.size} - #{@workers.length} - #{@tasks.num_waiting}\n\n"
267
- begin
268
- puts "Run login ..."
269
- login
270
- @workers.each do |wrkr|
271
- # puts "State: #{wrkr.state}"
272
- if wrkr.wait_for_login?
273
- wrkr.engine.run
274
- end
275
- end
276
-
277
- rescue => bang
278
- puts bang
279
- puts bang.backtrace
280
- end
281
-
282
- end
283
-
284
- sleep 1
285
- end
286
- }
287
-
288
- @prefs.update check_prefs
289
- msg = "\n[Scanner] Starting Scan ..."
290
- notify(:logger, LOG_INFO, msg )
291
- puts msg
292
-
293
- # starting workers before check generation
294
- start_workers( @prefs)
295
- @max_tasks = 1000
296
-
297
- # start check generation in seperate thread
298
- Thread.new{
299
- begin
300
- set_status GENERATION_STARTED
301
- @chat_list.uniq.each do |chat|
302
- # puts chat.request.url.to_s
303
- @active_checks.uniq.each do |ac|
304
- ac.reset()
305
- if site_alive?(chat) then
306
- ac.generateChecks(chat){ |check|
307
- while @tasks.size > @max_tasks
308
- sleep 1
309
- end
310
- task = { :module => ac,
311
- :check => check
312
- }
313
- @tasks.push task
314
- }
315
- end
316
- end
317
- end
318
- rescue => bang
319
- puts bang
320
- puts bang.backtrace if $DEBUG
321
- ensure
322
- set_status GENERATION_FINISHED
323
- end
324
- }
325
-
326
- end
327
-
328
- def initialize(chat_list=[], active_checks=[], passive_checks=[], prefs={})
329
- @chat_list = chat_list
330
- @active_checks = []
331
- @passive_checks = passive_checks
332
-
333
- @tasks = Queue.new
334
- @logged_out = Queue.new
335
-
336
- @workers = []
337
-
338
- @status_lock = Mutex.new
339
-
340
- @task_count_lock = Mutex.new
252
+ end
253
+ end
254
+
255
+ if @logged_out.size == ( @workers.length - @tasks.num_waiting) or @tasks.num_waiting == @workers.size
256
+ @logged_out.clear
257
+ #puts "!LOGOUT DETECTED!\n#{@logged_out.size} - #{@workers.length} - #{@tasks.num_waiting}\n\n"
258
+ begin
259
+ puts "Run login ..."
260
+ login
261
+ @workers.each do |wrkr|
262
+ # puts "State: #{wrkr.state}"
263
+ if wrkr.wait_for_login?
264
+ wrkr.engine.run
265
+ end
266
+ end
267
+
268
+ rescue => bang
269
+ puts bang
270
+ puts bang.backtrace
271
+ end
272
+
273
+ end
274
+
275
+ sleep 1
276
+ end
277
+ }
278
+
279
+ @prefs.update check_prefs
280
+ msg = "\n[Scanner] Starting Scan ..."
281
+ notify(:logger, LOG_INFO, msg )
282
+ puts msg
283
+
284
+ # starting workers before check generation
285
+ start_workers( @prefs)
286
+ @max_tasks = 1000
287
+
288
+ # start check generation in seperate thread
289
+ Thread.new{
290
+ begin
291
+ set_status GENERATION_STARTED
292
+ @chat_list.uniq.each do |chat|
293
+ # puts chat.request.url.to_s
294
+ @active_checks.uniq.each do |ac|
295
+ ac.reset()
296
+ if site_alive?(chat) then
297
+ ac.generateChecks(chat){ |check|
298
+ while @tasks.size > @max_tasks
299
+ sleep 1
300
+ end
301
+ task = { :module => ac,
302
+ :check => check
303
+ }
304
+ @tasks.push task
305
+ }
306
+ end
307
+ end
308
+ end
309
+ rescue => bang
310
+ puts bang
311
+ puts bang.backtrace if $DEBUG
312
+ ensure
313
+ set_status GENERATION_FINISHED
314
+ end
315
+ }
316
+
317
+ end
318
+
319
+ def initialize(chat_list=[], active_checks=[], passive_checks=[], prefs={})
320
+ @chat_list = chat_list
321
+ @active_checks = []
322
+ @passive_checks = passive_checks
323
+
324
+ @tasks = Queue.new
325
+ @logged_out = Queue.new
326
+
327
+ @workers = []
328
+
329
+ @status_lock = Mutex.new
330
+
331
+ @task_count_lock = Mutex.new
341
332
  @task_counter = {}
342
333
 
343
- @ctrl_thread = nil
344
-
345
- # @onlineCheck = OnlineCheck.new(@project)
346
- msg = "Initializing Scanner ..."
347
- notify(:logger, LOG_INFO, msg)
348
- puts msg
349
-
350
- @prefs = Watobo::Conf::Scanner.to_h
351
-
352
- @prefs.update prefs
353
-
354
- puts @prefs.to_yaml
355
-
356
- unique_checks = {}
357
- active_checks.each do |x|
358
- if x.respond_to? :new
359
- ac = x.new(self.object_id, @prefs)
360
- else
361
- ac = x
362
- end
363
- unique_checks[ac.class.to_s] = ac unless unique_checks.has_key?(ac.class.to_s)
364
- end
365
- unique_checks.each_value do |check|
366
- @active_checks << check
367
- end
368
-
369
- puts "#ActiveModules: #{@active_checks.length}"
370
-
371
- @active_checks.uniq.each do |check|
372
-
373
- check.resetCounters()
374
- @chat_list.each_with_index do |chat, index|
375
- #print "."
376
- check.updateCounters(chat, @prefs)
377
- puts "* [#{index}] CheckCounter #{chat.id}: #{check.check_name} - #{check.numChecks}"
378
- end
379
-
380
- # @numTotalChecks += check.numChecks
381
- # cn = check.info[:check_name]
382
- # puts "+ add check: #{cn}"
383
- # notify(:logger, LOG_INFO, "add check #{cn}")
384
- @task_counter[check.check_name] = { :total => check.numChecks,
385
- :progress => 0
386
- }
387
- end
388
- @status = SCANNER_READY
389
- msg = "Scanner Ready!"
390
- notify(:logger, LOG_INFO, msg)
391
- puts msg
392
- end
393
-
394
- private
395
-
396
- def set_status_running
397
- s = ( status | SCANNER_RUNNING )
398
- set_status( s )
399
- end
400
-
401
- def set_status(s)
402
- @status_lock.synchronize {
403
- @status |= s
404
- }
405
- end
406
-
407
- def status
408
- @status_lock.synchronize {
409
- return @status
410
- }
334
+ @ctrl_thread = nil
335
+
336
+ # @onlineCheck = OnlineCheck.new(@project)
337
+ msg = "Initializing Scanner ..."
338
+ notify(:logger, LOG_INFO, msg)
339
+ puts msg
340
+
341
+ @prefs = Watobo::Conf::Scanner.to_h
342
+
343
+ @prefs.update prefs
344
+
345
+ puts @prefs.to_yaml
346
+
347
+ unique_checks = {}
348
+ active_checks.each do |x|
349
+ if x.respond_to? :new
350
+ ac = x.new(self.object_id, @prefs)
351
+ else
352
+ ac = x
353
+ end
354
+ unique_checks[ac.class.to_s] = ac unless unique_checks.has_key?(ac.class.to_s)
355
+ end
356
+ unique_checks.each_value do |check|
357
+ @active_checks << check
358
+ end
359
+
360
+ puts "#ActiveModules: #{@active_checks.length}"
361
+
362
+ @active_checks.uniq.each do |check|
363
+
364
+ check.resetCounters()
365
+ @chat_list.each_with_index do |chat, index|
366
+ #print "."
367
+ check.updateCounters(chat, @prefs)
368
+ puts "* [#{index}] CheckCounter #{chat.id}: #{check.check_name} - #{check.numChecks}"
369
+ end
370
+
371
+ # @numTotalChecks += check.numChecks
372
+ # cn = check.info[:check_name]
373
+ # puts "+ add check: #{cn}"
374
+ # notify(:logger, LOG_INFO, "add check #{cn}")
375
+ @task_counter[check.check_name] = { :total => check.numChecks,
376
+ :progress => 0
377
+ }
378
+ end
379
+ @status = SCANNER_READY
380
+ msg = "Scanner Ready!"
381
+ notify(:logger, LOG_INFO, msg)
382
+ puts msg
383
+ end
384
+
385
+ private
386
+
387
+ def set_status_running
388
+ s = ( status | SCANNER_RUNNING )
389
+ set_status( s )
390
+ end
391
+
392
+ def set_status(s)
393
+ @status_lock.synchronize {
394
+ @status |= s
395
+ }
396
+ end
397
+
398
+ def status
399
+ @status_lock.synchronize {
400
+ return @status
401
+ }
402
+ end
403
+
404
+ def start_workers(check_prefs)
405
+ num_workers = @prefs.has_key?(:max_parallel_checks) ? @prefs[:max_parallel_checks] : Watobo::Conf::Scanner.max_parallel_checks
406
+
407
+ puts "Starting #{num_workers} Workers ..."
408
+
409
+ num_workers.times do |i|
410
+ print "... #{i + 1}"
411
+ w = Scanner3::Worker.new(@tasks, @logged_out, check_prefs)
412
+
413
+ w.subscribe(:task_finished){ |m|
414
+ @task_count_lock.synchronize do
415
+ cn = m.check_name
416
+ @task_counter[cn][:progress] += 1
417
+ end
418
+ }
419
+
420
+ @logout_count ||= 0
421
+ @logout_count_lock ||= Mutex.new
422
+ @num_waiting = 0
423
+
424
+ w.start
425
+ @workers << w
426
+ end
427
+ print "\n"
428
+
429
+ end
430
+
431
+ def login
432
+ puts "do relogin"
433
+ login_chats = Watobo::Conf::Scanner.login_chat_ids.uniq.map{|id| Watobo::Chats.get_by_id(id) }
434
+ # puts "running #{login_chats.length} login requests"
435
+ # puts login_chats.first.class
436
+
437
+ @active_checks.first.runLogin(login_chats, @prefs)
438
+
439
+ end
440
+
441
+ def site_alive?(chat)
442
+ @sites_alive ||= Hash.new
443
+ site = chat.request.site
444
+ return true if @sites_alive.has_key? site
445
+
446
+ if Watobo::HTTPSocket.siteAlive?(chat)
447
+ @sites_alive[site] = true
448
+ return true
449
+ end
450
+ return false
411
451
  end
412
452
 
413
- def start_workers(check_prefs)
414
- num_workers = @prefs.has_key?(:max_parallel_checks) ? @prefs[:max_parallel_checks] : Watobo::Conf::Scanner.max_parallel_checks
415
-
416
- puts "Starting #{num_workers} Workers ..."
417
-
418
- num_workers.times do |i|
419
- print "... #{i + 1}"
420
- w = Scanner3::Worker.new(@tasks, @logged_out, check_prefs)
421
-
422
- w.subscribe(:task_finished){ |m|
423
- @task_count_lock.synchronize do
424
- cn = m.check_name
425
- @task_counter[cn][:progress] += 1
426
- end
427
- }
428
-
429
- @logout_count ||= 0
430
- @logout_count_lock ||= Mutex.new
431
- @num_waiting = 0
432
-
433
- w.start
434
- @workers << w
435
- end
436
- print "\n"
437
-
438
- end
439
-
440
- def login
441
- puts "do relogin"
442
- login_chats = Watobo::Conf::Scanner.login_chat_ids.uniq.map{|id| Watobo::Chats.get_by_id(id) }
443
- # puts "running #{login_chats.length} login requests"
444
- # puts login_chats.first.class
445
-
446
- @active_checks.first.runLogin(login_chats, @prefs)
447
-
448
- end
449
-
450
- def site_alive?(chat)
451
- @sites_alive ||= Hash.new
452
- site = chat.request.site
453
- return true if @sites_alive.has_key? site
454
-
455
- if Watobo::HTTPSocket.siteAlive?(chat)
456
- @sites_alive[site] = true
457
- return true
458
- end
459
- return false
460
- end
461
-
462
- end
463
- end
453
+ end
454
+ end