Aborting units -> stopping units
This commit is contained in:
		
							parent
							
								
									b2cc2709c6
								
							
						
					
					
						commit
						de4009fb4d
					
				| @ -39,7 +39,7 @@ struct service | ||||
| 	int flags;                          ///< Service flags
 | ||||
| 	void *user_data;                    ///< User data
 | ||||
| 
 | ||||
| 	// scan_init -> on_data* -> [on_eof/on_error] -> on_aborted -> scan_free
 | ||||
| 	// scan_init -> on_data* -> [on_eof/on_error] -> on_stopped -> scan_free
 | ||||
| 
 | ||||
| 	/// Initialize a scan, returning a handle to it
 | ||||
| 	void *(*scan_init) (struct service *self, struct unit *u); | ||||
| @ -58,8 +58,8 @@ struct service | ||||
| 	/// Network or other error has occured
 | ||||
| 	void (*on_error) (void *handle); | ||||
| 
 | ||||
| 	/// The scan has been aborted
 | ||||
| 	void (*on_aborted) (void *handle); | ||||
| 	/// The scan has been stopped
 | ||||
| 	void (*on_stopped) (void *handle); | ||||
| }; | ||||
| 
 | ||||
| struct plugin_api | ||||
| @ -83,7 +83,7 @@ struct plugin_api | ||||
| 	void (*unit_add_info) (struct unit *u, const char *result); | ||||
| 
 | ||||
| 	/// Abort the scan, close the connection
 | ||||
| 	void (*unit_abort) (struct unit *u); | ||||
| 	void (*unit_stop) (struct unit *u); | ||||
| }; | ||||
| 
 | ||||
| struct plugin_info | ||||
|  | ||||
| @ -90,7 +90,7 @@ on_headers_complete (http_parser *parser) | ||||
| 	struct scan_data *scan = parser->data; | ||||
| 	// We've got this far, this must be an HTTP server
 | ||||
| 	g_data.api->unit_set_success (scan->u, true); | ||||
| 	g_data.api->unit_abort (scan->u); | ||||
| 	g_data.api->unit_stop (scan->u); | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| @ -144,12 +144,12 @@ on_data (void *handle, const void *data, size_t len) | ||||
| 	if (parser->upgrade) | ||||
| 	{ | ||||
| 		// We should never get here though because `on_headers_complete'
 | ||||
| 		// is called first and ends up aborting the unit.
 | ||||
| 		// is called first and ends up stopping the unit.
 | ||||
| 		g_data.api->unit_add_info (scan->u, "upgrades to a different protocol"); | ||||
| 		g_data.api->unit_abort (scan->u); | ||||
| 		g_data.api->unit_stop (scan->u); | ||||
| 	} | ||||
| 	else if (n_parsed != len && parser->http_errno != HPE_CB_headers_complete) | ||||
| 		g_data.api->unit_abort (scan->u); | ||||
| 		g_data.api->unit_stop (scan->u); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| @ -168,7 +168,7 @@ static struct service g_http_service = | ||||
| 	.on_data     = on_data, | ||||
| 	.on_eof      = on_eof, | ||||
| 	.on_error    = NULL, | ||||
| 	.on_aborted  = NULL | ||||
| 	.on_stopped  = NULL | ||||
| }; | ||||
| 
 | ||||
| static bool | ||||
|  | ||||
| @ -107,7 +107,7 @@ on_irc_message (const struct irc_message *msg, const char *raw, void *user_data) | ||||
| 			g_data.api->unit_add_info (scan->u, info); | ||||
| 			free (info); | ||||
| 
 | ||||
| 			g_data.api->unit_abort (scan->u); | ||||
| 			g_data.api->unit_stop (scan->u); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @ -130,7 +130,7 @@ static struct service g_irc_service = | ||||
| 	.on_data     = on_data, | ||||
| 	.on_eof      = NULL, | ||||
| 	.on_error    = NULL, | ||||
| 	.on_aborted  = NULL | ||||
| 	.on_stopped  = NULL | ||||
| }; | ||||
| 
 | ||||
| static bool | ||||
|  | ||||
| @ -110,10 +110,10 @@ xlua_unit_add_info (lua_State *L) | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| xlua_unit_abort (lua_State *L) | ||||
| xlua_unit_stop (lua_State *L) | ||||
| { | ||||
| 	struct unit_wrapper *data = luaL_checkudata (L, 1, UNIT_METATABLE); | ||||
| 	g_data.api->unit_abort (data->unit); | ||||
| 	g_data.api->unit_stop (data->unit); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| @ -133,7 +133,7 @@ static luaL_Reg xlua_unit_table[] = | ||||
| 	{ "write",            xlua_unit_write       }, | ||||
| 	{ "set_success",      xlua_unit_set_success }, | ||||
| 	{ "add_info",         xlua_unit_add_info    }, | ||||
| 	{ "abort",            xlua_unit_abort       }, | ||||
| 	{ "stop",             xlua_unit_stop        }, | ||||
| 	{ "__gc",             xlua_unit_destroy     }, | ||||
| 	{ NULL,               NULL                  } | ||||
| }; | ||||
| @ -208,7 +208,7 @@ handle_scan_method_failure (struct scan_data *data) | ||||
| { | ||||
| 	print_error ("Lua: service `%s': %s", data->service->name, | ||||
| 		lua_tostring (data->L, -1)); | ||||
| 	g_data.api->unit_abort (data->unit); | ||||
| 	g_data.api->unit_stop (data->unit); | ||||
| 	lua_pop (data->L, 1); | ||||
| } | ||||
| 
 | ||||
| @ -273,10 +273,10 @@ on_error (void *handle) | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| on_aborted (void *handle) | ||||
| on_stopped (void *handle) | ||||
| { | ||||
| 	struct scan_data *data = handle; | ||||
| 	if (!prepare_scan_method (data, "on_aborted")) | ||||
| 	if (!prepare_scan_method (data, "on_stopped")) | ||||
| 		return; | ||||
| 	if (lua_pcall (data->L, 1, 0, 0)) | ||||
| 		handle_scan_method_failure (data); | ||||
| @ -329,7 +329,7 @@ xlua_register_service (lua_State *L) | ||||
| 	s->on_data    = on_data; | ||||
| 	s->on_eof     = on_eof; | ||||
| 	s->on_error   = on_error; | ||||
| 	s->on_aborted = on_aborted; | ||||
| 	s->on_stopped = on_stopped; | ||||
| 
 | ||||
| 	g_data.api->register_service (g_data.ctx, s); | ||||
| 	return 0; | ||||
|  | ||||
| @ -34,7 +34,7 @@ function MPD:on_data (data) | ||||
| 			self.unit:add_info ("version " .. version) | ||||
| 			self.unit:set_success (true) | ||||
| 		end | ||||
| 		self.unit:abort () | ||||
| 		self.unit:stop () | ||||
| 	end | ||||
| end | ||||
| 
 | ||||
|  | ||||
| @ -38,7 +38,7 @@ function Socks4:on_data (data) | ||||
| 		if null == 0 and code >= 90 and code <= 93 then | ||||
| 			self.unit:set_success (true) | ||||
| 		end | ||||
| 		self.unit:abort () | ||||
| 		self.unit:stop () | ||||
| 	end | ||||
| end | ||||
| 
 | ||||
| @ -75,7 +75,7 @@ function Socks5:on_data (data) | ||||
| 			end | ||||
| 			self.unit:set_success (true) | ||||
| 		end | ||||
| 		self.unit:abort () | ||||
| 		self.unit:stop () | ||||
| 	end | ||||
| end | ||||
| 
 | ||||
|  | ||||
| @ -77,7 +77,7 @@ on_data (void *handle, const void *data, size_t len) | ||||
| 	g_data.api->unit_set_success (scan->u, true); | ||||
| 
 | ||||
| end_scan: | ||||
| 	g_data.api->unit_abort (scan->u); | ||||
| 	g_data.api->unit_stop (scan->u); | ||||
| } | ||||
| 
 | ||||
| static struct service g_ssh_service = | ||||
| @ -90,7 +90,7 @@ static struct service g_ssh_service = | ||||
| 	.on_data     = on_data, | ||||
| 	.on_eof      = NULL, | ||||
| 	.on_error    = NULL, | ||||
| 	.on_aborted  = NULL | ||||
| 	.on_stopped  = NULL | ||||
| }; | ||||
| 
 | ||||
| static bool | ||||
|  | ||||
							
								
								
									
										46
									
								
								ponymap.c
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								ponymap.c
									
									
									
									
									
								
							| @ -204,7 +204,7 @@ struct target | ||||
| 
 | ||||
| 	/// All currently running units for this target, holding a reference to us.
 | ||||
| 	/// They remove themselves from this list upon terminating.  The purpose of
 | ||||
| 	/// this list is making it possible to abort them forcefully.
 | ||||
| 	/// this list is making it possible to stop them forcefully.
 | ||||
| 	struct unit *running_units; | ||||
| }; | ||||
| 
 | ||||
| @ -235,8 +235,8 @@ struct unit | ||||
| 
 | ||||
| 	struct str_vector info;             ///< Info resulting from the scan
 | ||||
| 	bool scan_started;                  ///< Whether the scan has been started
 | ||||
| 	bool abortion_requested;            ///< Abortion requested by service
 | ||||
| 	bool aborted;                       ///< Scan has been aborted
 | ||||
| 	bool stop_requested;                ///< Stopping requested by service
 | ||||
| 	bool stopped;                       ///< Scan has been stopped
 | ||||
| 	bool success;                       ///< Service has been found
 | ||||
| }; | ||||
| 
 | ||||
| @ -522,16 +522,16 @@ unit_unref (struct unit *self) | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| unit_abort (struct unit *u) | ||||
| unit_stop (struct unit *u) | ||||
| { | ||||
| 	if (u->aborted) | ||||
| 	if (u->stopped) | ||||
| 		return; | ||||
| 
 | ||||
| 	u->aborted = true; | ||||
| 	u->stopped = true; | ||||
| 	if (u->scan_started) | ||||
| 	{ | ||||
| 		if (u->service->on_aborted) | ||||
| 			u->service->on_aborted (u->service_data); | ||||
| 		if (u->service->on_stopped) | ||||
| 			u->service->on_stopped (u->service_data); | ||||
| 
 | ||||
| 		u->service->scan_free (u->service_data); | ||||
| 		u->transport->cleanup (u); | ||||
| @ -599,8 +599,8 @@ on_unit_ready (const struct pollfd *pfd, struct unit *u) | ||||
| 		service->on_data (u->service_data, buf->str, buf->len); | ||||
| 		str_remove_slice (buf, 0, buf->len); | ||||
| 
 | ||||
| 		if (u->abortion_requested) | ||||
| 			goto abort; | ||||
| 		if (u->stop_requested) | ||||
| 			goto stop; | ||||
| 	} | ||||
| 
 | ||||
| 	if ((result = transport->on_writeable (u)) == TRANSPORT_IO_ERROR) | ||||
| @ -611,8 +611,8 @@ on_unit_ready (const struct pollfd *pfd, struct unit *u) | ||||
| 	{ | ||||
| 		if (service->on_eof) | ||||
| 			service->on_eof (u->service_data); | ||||
| 		if (u->abortion_requested || !u->write_buffer.len) | ||||
| 			goto abort; | ||||
| 		if (u->stop_requested || !u->write_buffer.len) | ||||
| 			goto stop; | ||||
| 	} | ||||
| 
 | ||||
| 	unit_update_poller (u, pfd); | ||||
| @ -622,8 +622,8 @@ error: | ||||
| 	if (service->on_error) | ||||
| 		service->on_error (u->service_data); | ||||
| 
 | ||||
| abort: | ||||
| 	unit_abort (u); | ||||
| stop: | ||||
| 	unit_stop (u); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| @ -632,7 +632,7 @@ unit_start_scan (struct unit *u) | ||||
| 	if (!u->transport->init (u)) | ||||
| 	{ | ||||
| 		// TODO: maybe print a message with the problem?
 | ||||
| 		unit_abort (u); | ||||
| 		unit_stop (u); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| @ -663,7 +663,7 @@ on_unit_connected (const struct pollfd *pfd, struct unit *u) | ||||
| 		//   But POSIX seems to say that this can block, too.
 | ||||
| 		soft_assert (error != EADDRNOTAVAIL); | ||||
| 
 | ||||
| 		unit_abort (u); | ||||
| 		unit_stop (u); | ||||
| 	} | ||||
| 	else | ||||
| 		unit_start_scan (u); | ||||
| @ -686,7 +686,7 @@ unit_new (struct target *target, int socket_fd, uint16_t port, | ||||
| 	str_vector_init (&u->info); | ||||
| 
 | ||||
| 	poller_timer_init (&u->timeout_event, &target->ctx->poller); | ||||
| 	u->timeout_event.dispatcher = (poller_timer_fn) unit_abort; | ||||
| 	u->timeout_event.dispatcher = (poller_timer_fn) unit_stop; | ||||
| 	u->timeout_event.user_data = u; | ||||
| 
 | ||||
| 	poller_fd_init (&u->fd_event, &target->ctx->poller, socket_fd); | ||||
| @ -773,7 +773,7 @@ initiate_quit (struct app_context *ctx) | ||||
| 		for (u_iter = t_iter->running_units; u_iter; u_iter = u_next) | ||||
| 		{ | ||||
| 			u_next = u_iter->next; | ||||
| 			unit_abort (u_iter); | ||||
| 			unit_stop (u_iter); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| @ -813,7 +813,7 @@ plugin_api_unit_get_address (struct unit *u) | ||||
| static ssize_t | ||||
| plugin_api_unit_write (struct unit *u, const void *buf, size_t len) | ||||
| { | ||||
| 	if (u->abortion_requested || u->aborted) | ||||
| 	if (u->stop_requested || u->stopped) | ||||
| 		return -1; | ||||
| 
 | ||||
| 	str_append_data (&u->write_buffer, buf, len); | ||||
| @ -833,9 +833,9 @@ plugin_api_unit_add_info (struct unit *u, const char *result) | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| plugin_api_unit_abort (struct unit *u) | ||||
| plugin_api_unit_stop (struct unit *u) | ||||
| { | ||||
| 	u->abortion_requested = true; | ||||
| 	u->stop_requested = true; | ||||
| } | ||||
| 
 | ||||
| static struct plugin_api g_plugin_vtable = | ||||
| @ -846,7 +846,7 @@ static struct plugin_api g_plugin_vtable = | ||||
| 	.unit_write        = plugin_api_unit_write, | ||||
| 	.unit_set_success  = plugin_api_unit_set_success, | ||||
| 	.unit_add_info     = plugin_api_unit_add_info, | ||||
| 	.unit_abort        = plugin_api_unit_abort | ||||
| 	.unit_stop         = plugin_api_unit_stop | ||||
| }; | ||||
| 
 | ||||
| // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | ||||
| @ -1546,7 +1546,7 @@ target_unref (struct target *self) | ||||
| 	if (self->results) | ||||
| 		target_dump_results (self); | ||||
| 
 | ||||
| 	// These must have been aborted already (although we could do that in here)
 | ||||
| 	// These must have been stopped already (although we could do that in here)
 | ||||
| 	hard_assert (!self->running_units); | ||||
| 
 | ||||
| 	struct unit *iter, *next; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user