diff options
Diffstat (limited to 'src/server_register.c')
| -rw-r--r-- | src/server_register.c | 86 |
1 files changed, 47 insertions, 39 deletions
diff --git a/src/server_register.c b/src/server_register.c index de333a5..b675e2f 100644 --- a/src/server_register.c +++ b/src/server_register.c @@ -24,7 +24,7 @@ volatile UA_Boolean g_running = true; static void -_s_stop_handler (int sign) +_s_stop_handler (int sig) { g_running = false; } @@ -66,6 +66,40 @@ _s_make_lds_client_config (UA_ClientConfig *cc, const lds_client_params *p) return UA_STATUSCODE_GOOD; } +/** + * Creates a fresh client config and registers with the LDS. + */ +static UA_StatusCode +_s_register_with_lds (UA_Server *server, const lds_client_params *p, + const char *endpoint) +{ + UA_ClientConfig cc; + UA_StatusCode rv = _s_make_lds_client_config (&cc, p); + if (rv != UA_STATUSCODE_GOOD) + return rv; + UA_String url = UA_STRING_ALLOC (endpoint); + rv = UA_Server_registerDiscovery (server, &cc, url, UA_STRING_NULL); + UA_String_clear (&url); + return rv; +} + +/** + * Creates a fresh client config and deregisters from the LDS. + */ +static UA_StatusCode +_s_deregister_from_lds (UA_Server *server, const lds_client_params *p, + const char *endpoint) +{ + UA_ClientConfig cc; + UA_StatusCode rv = _s_make_lds_client_config (&cc, p); + if (rv != UA_STATUSCODE_GOOD) + return rv; + UA_String url = UA_STRING_ALLOC (endpoint); + rv = UA_Server_deregisterDiscovery (server, &cc, url); + UA_String_clear (&url); + return rv; +} + /* ======================================================================== * Main * ======================================================================== */ @@ -175,20 +209,7 @@ main (int argc, char **argv) can periodically re-register with the LDS between iterations. */ UA_Server_run_startup (server); - /* UA_Server_registerDiscovery consumes (clears) the client config, - so _s_make_lds_client_config builds a fresh one for every call. */ - UA_ClientConfig client_config; - retval = _s_make_lds_client_config (&client_config, &lds_params); - if (retval != UA_STATUSCODE_GOOD) - { - UA_Server_run_shutdown (server); - goto cleanup; - } - - UA_String discovery_url = UA_STRING_ALLOC (discovery_endpoint); - retval = UA_Server_registerDiscovery (server, &client_config, discovery_url, - UA_STRING_NULL); - UA_String_clear (&discovery_url); + retval = _s_register_with_lds (server, &lds_params, discovery_endpoint); if (retval != UA_STATUSCODE_GOOD) UA_LOG_WARNING (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "Initial register failed: %s", @@ -205,36 +226,23 @@ main (int argc, char **argv) time_t now = time (NULL); if (now - last_register >= register_interval) { - retval = _s_make_lds_client_config (&client_config, &lds_params); - if (retval == UA_STATUSCODE_GOOD) - { - UA_String rereg_url = UA_STRING_ALLOC (discovery_endpoint); - retval = UA_Server_registerDiscovery (server, &client_config, - rereg_url, UA_STRING_NULL); - UA_String_clear (&rereg_url); - if (retval != UA_STATUSCODE_GOOD) - UA_LOG_WARNING (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, - "Re-register failed: %s", - UA_StatusCode_name (retval)); - } + retval + = _s_register_with_lds (server, &lds_params, discovery_endpoint); + if (retval != UA_STATUSCODE_GOOD) + UA_LOG_WARNING (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, + "Re-register failed: %s", + UA_StatusCode_name (retval)); last_register = now; } } /* Deregister from the LDS before shutting down so the LDS removes our entry immediately rather than waiting for the cleanup timeout. */ - retval = _s_make_lds_client_config (&client_config, &lds_params); - if (retval == UA_STATUSCODE_GOOD) - { - UA_String dereg_url = UA_STRING_ALLOC (discovery_endpoint); - retval - = UA_Server_deregisterDiscovery (server, &client_config, dereg_url); - UA_String_clear (&dereg_url); - if (retval != UA_STATUSCODE_GOOD) - UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, - "Could not unregister from discovery server: %s", - UA_StatusCode_name (retval)); - } + retval = _s_deregister_from_lds (server, &lds_params, discovery_endpoint); + if (retval != UA_STATUSCODE_GOOD) + UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, + "Could not unregister from discovery server: %s", + UA_StatusCode_name (retval)); UA_Server_run_shutdown (server); rc = EXIT_SUCCESS; |
