diff --git a/example/daemon/main.c b/example/daemon/main.c index de6ac51..2cde4ab 100644 --- a/example/daemon/main.c +++ b/example/daemon/main.c @@ -11,6 +11,7 @@ #include #include +#define SERVICE_TIMEOUT (1 * 1000) struct args { @@ -19,7 +20,7 @@ struct args bool show_help; }; -static struct wf_server * server; +static bool shutdown_requested = false; static void show_help(void) { @@ -150,7 +151,7 @@ static void on_interrupt(int signal_id) { (void) signal_id; - wf_server_shutdown(server); + shutdown_requested = true; } int main(int argc, char * argv[]) @@ -167,10 +168,14 @@ int main(int argc, char * argv[]) if (!args.show_help) { signal(SIGINT, on_interrupt); - server = wf_server_create(args.config); + struct wf_server * server = wf_server_create(args.config); if (NULL != server) { - wf_server_run(server); + while (!shutdown_requested) + { + wf_server_service(server, SERVICE_TIMEOUT); + } + wf_server_dispose(server); } else diff --git a/example/provider/main.c b/example/provider/main.c index 1cb27cf..18fe42e 100644 --- a/example/provider/main.c +++ b/example/provider/main.c @@ -11,6 +11,8 @@ #include "webfuse_provider.h" +#define SERVICE_TIMEOUT (1 * 1000) + struct config { char * url; @@ -314,13 +316,12 @@ static void fs_read( } } -static struct wfp_client * client; +static volatile bool shutdown_requested = false; static void on_interrupt(int signal_id) { (void) signal_id; - - wfp_client_shutdown(client); + shutdown_requested = true; } int main(int argc, char* argv[]) @@ -362,10 +363,13 @@ int main(int argc, char* argv[]) wfp_client_config_set_onopen(config.client_config, &fs_open); wfp_client_config_set_onread(config.client_config, &fs_read); - client = wfp_client_create(config.client_config); + struct wfp_client * client = wfp_client_create(config.client_config); wfp_client_connect(client, config.url); - wfp_client_run(client); + while (!shutdown_requested) + { + wfp_client_service(client, SERVICE_TIMEOUT); + } wfp_client_dispose(client); } diff --git a/include/webfuse/adapter/server.h b/include/webfuse/adapter/server.h index 2b4bfe9..8a6a3a1 100644 --- a/include/webfuse/adapter/server.h +++ b/include/webfuse/adapter/server.h @@ -17,11 +17,9 @@ extern WF_API struct wf_server * wf_server_create( extern WF_API void wf_server_dispose( struct wf_server * server); -extern WF_API void wf_server_run( - struct wf_server * server); - -extern WF_API void wf_server_shutdown( - struct wf_server * server); +extern WF_API void wf_server_service( + struct wf_server * server, + int timeout_ms); #ifdef __cplusplus } diff --git a/include/webfuse/provider/client.h b/include/webfuse/provider/client.h index 8fa6326..142bfae 100644 --- a/include/webfuse/provider/client.h +++ b/include/webfuse/provider/client.h @@ -24,12 +24,9 @@ extern WFP_API void wfp_client_disconnect( extern WFP_API void wfp_client_dispose( struct wfp_client * client); -extern WFP_API void wfp_client_run( - struct wfp_client * client); - -extern WFP_API void wfp_client_shutdown( - struct wfp_client * client); - +extern WFP_API void wfp_client_service( + struct wfp_client * client, + int timeout_ms); #ifdef __cplusplus } diff --git a/lib/webfuse/adapter/api.c b/lib/webfuse/adapter/api.c index ecfd136..af68a8e 100644 --- a/lib/webfuse/adapter/api.c +++ b/lib/webfuse/adapter/api.c @@ -19,16 +19,11 @@ void wf_server_dispose( wf_impl_server_dispose(server); } -void wf_server_run( - struct wf_server * server) -{ - wf_impl_server_run(server); -} - -void wf_server_shutdown( - struct wf_server * server) +void wf_server_service( + struct wf_server * server, + int timeout_ms) { - wf_impl_server_shutdown(server); + wf_impl_server_service(server, timeout_ms); } // server protocol diff --git a/lib/webfuse/adapter/impl/server.c b/lib/webfuse/adapter/impl/server.c index 13250f6..7a3462a 100644 --- a/lib/webfuse/adapter/impl/server.c +++ b/lib/webfuse/adapter/impl/server.c @@ -13,7 +13,6 @@ #define WF_DISABLE_LWS_LOG 0 #define WF_SERVER_PROTOCOL_COUNT 3 -#define WF_SERVER_TIMEOUT (1 * 1000) struct wf_server { @@ -21,7 +20,6 @@ struct wf_server struct wf_server_protocol protocol; struct lws_protocols ws_protocols[WF_SERVER_PROTOCOL_COUNT]; struct lws_context * context; - volatile bool shutdown_requested; struct lws_http_mount mount; struct lws_context_creation_info info; }; @@ -109,7 +107,6 @@ struct wf_server * wf_impl_server_create( if (NULL != server) { wf_impl_server_protocol_init(&server->protocol, config->mount_point); - server->shutdown_requested = false; wf_impl_server_config_clone(config, &server->config); wf_impl_authenticators_move(&server->config.authenticators, &server->protocol.authenticators); server->context = wf_impl_server_context_create(server); @@ -128,19 +125,9 @@ void wf_impl_server_dispose( free(server); } -void wf_impl_server_run( - struct wf_server * server) -{ - int n = 0; - while ((0 <= n) && (!server->shutdown_requested)) - { - n = lws_service(server->context, WF_SERVER_TIMEOUT); - } -} - -void wf_impl_server_shutdown( - struct wf_server * server) +void wf_impl_server_service( + struct wf_server * server, + int timeout_ms) { - server->shutdown_requested = true; + lws_service(server->context, timeout_ms); } - diff --git a/lib/webfuse/adapter/impl/server.h b/lib/webfuse/adapter/impl/server.h index 57f6d4a..db26e69 100644 --- a/lib/webfuse/adapter/impl/server.h +++ b/lib/webfuse/adapter/impl/server.h @@ -15,11 +15,9 @@ extern struct wf_server * wf_impl_server_create( extern void wf_impl_server_dispose( struct wf_server * server); -extern void wf_impl_server_run( - struct wf_server * server); - -extern void wf_impl_server_shutdown( - struct wf_server * server); +extern void wf_impl_server_service( + struct wf_server * server, + int timeout_ms); #ifdef __cplusplus } diff --git a/lib/webfuse/provider/api.c b/lib/webfuse/provider/api.c index 0d9a96b..c5caa21 100644 --- a/lib/webfuse/provider/api.c +++ b/lib/webfuse/provider/api.c @@ -206,16 +206,11 @@ void wfp_client_dispose( wfp_impl_client_dispose(client); } -void wfp_client_run( - struct wfp_client * client) -{ - wfp_impl_client_run(client); -} - -void wfp_client_shutdown( - struct wfp_client * client) +void wfp_client_service( + struct wfp_client * client, + int timeout_ms) { - wfp_impl_client_shutdown(client); + wfp_impl_client_service(client, timeout_ms); } // dirbuffer diff --git a/lib/webfuse/provider/impl/client.c b/lib/webfuse/provider/impl/client.c index aee5757..3a503e0 100644 --- a/lib/webfuse/provider/impl/client.c +++ b/lib/webfuse/provider/impl/client.c @@ -14,11 +14,9 @@ #define WFP_PROTOCOL ("fs") #define WFP_DISABLE_LWS_LOG 0 #define WFP_CLIENT_PROTOCOL_COUNT 2 -#define WFP_CLIENT_TIMEOUT (1 * 1000) struct wfp_client { - volatile bool is_running; struct wfp_client_protocol protocol; struct lws_context_creation_info info; struct lws_protocols protocols[WFP_CLIENT_PROTOCOL_COUNT]; @@ -36,7 +34,6 @@ struct wfp_client * wfp_impl_client_create( struct wfp_client * client = malloc(sizeof(struct wfp_client)); if (NULL != client) { - client->is_running = true; wfp_impl_client_protocol_init(&client->protocol, &config->provider, config->user_data); memset(client->protocols, 0, sizeof(struct lws_protocols) * WFP_CLIENT_PROTOCOL_COUNT); @@ -102,18 +99,10 @@ void wfp_impl_client_disconnect( // ToDo: implement me } -void wfp_impl_client_run( - struct wfp_client * client) -{ - while (client->is_running) - { - lws_service(client->context, WFP_CLIENT_TIMEOUT); - } -} - -void wfp_impl_client_shutdown( - struct wfp_client * client) +void wfp_impl_client_service( + struct wfp_client * client, + int timeout_ms) { - client->is_running = false; + lws_service(client->context, timeout_ms); } diff --git a/lib/webfuse/provider/impl/client.h b/lib/webfuse/provider/impl/client.h index 68cc892..01e6d73 100644 --- a/lib/webfuse/provider/impl/client.h +++ b/lib/webfuse/provider/impl/client.h @@ -34,12 +34,9 @@ extern void wfp_impl_client_settimeout( extern void wfp_impl_client_dispose( struct wfp_client * client); -extern void wfp_impl_client_run( - struct wfp_client * client); - -extern void wfp_impl_client_shutdown( - struct wfp_client * client); - +extern void wfp_impl_client_service( + struct wfp_client * client, + int timeout_ms); #ifdef __cplusplus }