aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client_find_servers.c179
1 files changed, 135 insertions, 44 deletions
diff --git a/src/client_find_servers.c b/src/client_find_servers.c
index a85b63f..2212026 100644
--- a/src/client_find_servers.c
+++ b/src/client_find_servers.c
@@ -233,56 +233,110 @@ main (int argc, char **argv)
if (configLoad (argv[1], &cfg) != 0)
return EXIT_FAILURE;
+ /* ---- Shared keys ---- */
+
const char *discoveryServerEndpoint
= configRequire (&cfg, "discoveryEndpoint", "ClientFindServers");
const char *applicationUri
= configRequire (&cfg, "applicationUri", "ClientFindServers");
- const char *certPath
- = configRequire (&cfg, "certificate", "ClientFindServers");
- const char *keyPath
- = configRequire (&cfg, "privateKey", "ClientFindServers");
- const char *securityModeStr
- = configRequire (&cfg, "securityMode", "ClientFindServers");
- const char *securityPolicyStr
- = configRequire (&cfg, "securityPolicy", "ClientFindServers");
- const char *authMode = configRequire (&cfg, "authMode", "ClientFindServers");
-
- if (!discoveryServerEndpoint || !applicationUri || !certPath || !keyPath
- || !securityModeStr || !securityPolicyStr || !authMode)
+
+ if (!discoveryServerEndpoint || !applicationUri)
+ {
+ configFree (&cfg);
+ return EXIT_FAILURE;
+ }
+
+ /* ---- Discovery-side config (LDS connection) ---- */
+
+ const char *discCertPath
+ = configRequire (&cfg, "discoveryCertificate", "ClientFindServers");
+ const char *discKeyPath
+ = configRequire (&cfg, "discoveryPrivateKey", "ClientFindServers");
+ const char *discSecModeStr
+ = configRequire (&cfg, "discoverySecurityMode", "ClientFindServers");
+ const char *discSecPolStr
+ = configRequire (&cfg, "discoverySecurityPolicy", "ClientFindServers");
+ const char *discAuthMode
+ = configRequire (&cfg, "discoveryAuthMode", "ClientFindServers");
+
+ if (!discCertPath || !discKeyPath || !discSecModeStr || !discSecPolStr
+ || !discAuthMode)
+ {
+ configFree (&cfg);
+ return EXIT_FAILURE;
+ }
+
+ UA_MessageSecurityMode discSecMode = parseSecurityMode (discSecModeStr);
+ if (discSecMode == UA_MESSAGESECURITYMODE_INVALID)
+ {
+ UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
+ "Unknown discovery security mode: %s", discSecModeStr);
+ configFree (&cfg);
+ return EXIT_FAILURE;
+ }
+
+ const char *discSecPolUri = resolveSecurityPolicyUri (discSecPolStr);
+ if (!discSecPolUri)
+ {
+ UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
+ "Unknown discovery security policy: %s", discSecPolStr);
+ configFree (&cfg);
+ return EXIT_FAILURE;
+ }
+
+ /* ---- Server-side config (connections to discovered servers) ---- */
+
+ const char *srvCertPath
+ = configRequire (&cfg, "serverCertificate", "ClientFindServers");
+ const char *srvKeyPath
+ = configRequire (&cfg, "serverPrivateKey", "ClientFindServers");
+ const char *srvSecModeStr
+ = configRequire (&cfg, "serverSecurityMode", "ClientFindServers");
+ const char *srvSecPolStr
+ = configRequire (&cfg, "serverSecurityPolicy", "ClientFindServers");
+ const char *srvAuthMode
+ = configRequire (&cfg, "serverAuthMode", "ClientFindServers");
+
+ if (!srvCertPath || !srvKeyPath || !srvSecModeStr || !srvSecPolStr
+ || !srvAuthMode)
{
configFree (&cfg);
return EXIT_FAILURE;
}
- UA_MessageSecurityMode securityMode = parseSecurityMode (securityModeStr);
- if (securityMode == UA_MESSAGESECURITYMODE_INVALID)
+ UA_MessageSecurityMode srvSecMode = parseSecurityMode (srvSecModeStr);
+ if (srvSecMode == UA_MESSAGESECURITYMODE_INVALID)
{
UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "Unknown security mode: %s", securityModeStr);
+ "Unknown server security mode: %s", srvSecModeStr);
configFree (&cfg);
return EXIT_FAILURE;
}
- const char *securityPolicyUri = resolveSecurityPolicyUri (securityPolicyStr);
- if (!securityPolicyUri)
+ const char *srvSecPolUri = resolveSecurityPolicyUri (srvSecPolStr);
+ if (!srvSecPolUri)
{
UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "Unknown security policy: %s", securityPolicyStr);
+ "Unknown server security policy: %s", srvSecPolStr);
configFree (&cfg);
return EXIT_FAILURE;
}
- const char *username = NULL, *password = NULL;
+ /* ---- Server-side auth ---- */
- if (strcmp (authMode, "anonymous") == 0)
+ const char *srvUsername = NULL, *srvPassword = NULL;
+
+ if (strcmp (srvAuthMode, "anonymous") == 0)
{
/* No credentials needed */
}
- else if (strcmp (authMode, "user") == 0)
+ else if (strcmp (srvAuthMode, "user") == 0)
{
- username = configRequire (&cfg, "username", "ClientFindServers");
- password = configRequire (&cfg, "password", "ClientFindServers");
- if (!username || !password)
+ srvUsername
+ = configRequire (&cfg, "serverUsername", "ClientFindServers");
+ srvPassword
+ = configRequire (&cfg, "serverPassword", "ClientFindServers");
+ if (!srvUsername || !srvPassword)
{
configFree (&cfg);
return EXIT_FAILURE;
@@ -291,56 +345,93 @@ main (int argc, char **argv)
else
{
UA_LOG_FATAL (UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "Unknown auth mode: %s "
+ "Unknown server auth mode: %s "
"(expected 'anonymous' or 'user')",
- authMode);
+ srvAuthMode);
configFree (&cfg);
return EXIT_FAILURE;
}
- char **trustPaths = NULL;
- size_t trustSize = 0;
- configGetAll (&cfg, "trustList", &trustPaths, &trustSize);
+ /* ---- Trust lists ---- */
+
+ char **discTrustPaths = NULL;
+ size_t discTrustSize = 0;
+ configGetAll (&cfg, "discoveryTrustList", &discTrustPaths, &discTrustSize);
+
+ char **srvTrustPaths = NULL;
+ size_t srvTrustSize = 0;
+ configGetAll (&cfg, "serverTrustList", &srvTrustPaths, &srvTrustSize);
- UA_Client *client = UA_Client_new ();
+ /* ---- Create discovery client (LDS) ---- */
+
+ UA_Client *discoveryClient = UA_Client_new ();
UA_StatusCode retval = createSecureClientConfig (
- UA_Client_getConfig (client), applicationUri, certPath, keyPath,
- trustPaths, trustSize, securityMode, securityPolicyUri);
+ UA_Client_getConfig (discoveryClient), applicationUri, discCertPath,
+ discKeyPath, discTrustPaths, discTrustSize, discSecMode, discSecPolUri);
if (retval != UA_STATUSCODE_GOOD)
{
- UA_Client_delete (client);
- free (trustPaths);
+ UA_Client_delete (discoveryClient);
+ free (discTrustPaths);
+ free (srvTrustPaths);
configFree (&cfg);
return EXIT_FAILURE;
}
- UA_ClientConfig *clientConfig = UA_Client_getConfig (client);
- clientConfig->logging->context = (void *)(uintptr_t)logLevel;
+ UA_Client_getConfig (discoveryClient)->logging->context
+ = (void *)(uintptr_t)logLevel;
+
+ /* ---- Create server client (discovered servers) ---- */
+
+ UA_Client *serverClient = UA_Client_new ();
+ retval = createSecureClientConfig (
+ UA_Client_getConfig (serverClient), applicationUri, srvCertPath,
+ srvKeyPath, srvTrustPaths, srvTrustSize, srvSecMode, srvSecPolUri);
+ if (retval != UA_STATUSCODE_GOOD)
+ {
+ UA_Client_delete (discoveryClient);
+ UA_Client_delete (serverClient);
+ free (discTrustPaths);
+ free (srvTrustPaths);
+ configFree (&cfg);
+ return EXIT_FAILURE;
+ }
+ UA_Client_getConfig (serverClient)->logging->context
+ = (void *)(uintptr_t)logLevel;
+
+ /* ---- Discovery calls (use discoveryClient) ---- */
UA_ApplicationDescription *applicationDescriptionArray = NULL;
size_t applicationDescriptionArraySize = 0;
- retval = findServers (client, discoveryServerEndpoint,
+ retval = findServers (discoveryClient, discoveryServerEndpoint,
&applicationDescriptionArraySize,
&applicationDescriptionArray);
if (retval != UA_STATUSCODE_GOOD)
{
- UA_Client_delete (client);
- free (trustPaths);
+ UA_Client_delete (discoveryClient);
+ UA_Client_delete (serverClient);
+ free (discTrustPaths);
+ free (srvTrustPaths);
configFree (&cfg);
return EXIT_FAILURE;
}
- getServersEndpoints (client, applicationDescriptionArray,
+ getServersEndpoints (discoveryClient, applicationDescriptionArray,
applicationDescriptionArraySize);
- readServerTime (client, applicationDescriptionArray,
- applicationDescriptionArraySize, username, password);
+ /* ---- Server calls (use serverClient) ---- */
+
+ readServerTime (serverClient, applicationDescriptionArray,
+ applicationDescriptionArraySize, srvUsername, srvPassword);
+
+ /* ---- Cleanup ---- */
- UA_Client_delete (client);
+ UA_Client_delete (discoveryClient);
+ UA_Client_delete (serverClient);
UA_Array_delete (applicationDescriptionArray,
applicationDescriptionArraySize,
&UA_TYPES[UA_TYPES_APPLICATIONDESCRIPTION]);
- free (trustPaths);
+ free (discTrustPaths);
+ free (srvTrustPaths);
configFree (&cfg);
return EXIT_SUCCESS;