1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#ifndef DISCOVERY_COMMON_H
#define DISCOVERY_COMMON_H
/**
* @file common.h
* @brief Shared helpers for the OPC UA discovery demo programs.
*
* Provides file-loading, factory, and output formatting functions used by
* the LDS, the registering server, and the FindServers client.
*/
#include <open62541/client.h>
#include <open62541/server.h>
#include <open62541/types.h>
/**
* @brief Loads a DER-encoded certificate or key file into a UA_ByteString.
*
* @param path File path to read.
* @return The file contents, or UA_BYTESTRING_NULL on error.
*/
UA_ByteString loadFile (const char *const path);
/**
* @brief Creates a UA_Server configured with security policies and encryption.
*
* The server is initialized with the specified port, certificate, private key,
* and trustlist. The applicationUri is set in the server's application
* description.
*
* @param port Server port number.
* @param applicationUri OPC UA application URI.
* @param certPath Path to server certificate (.der).
* @param keyPath Path to private key (.der).
* @param trustPaths Array of trustlist file paths (may be NULL if trustSize is
* 0).
* @param trustSize Number of entries in trustPaths.
* @param retval Output parameter set to the status code on failure.
* @return A configured UA_Server, or NULL on error.
*/
UA_Server *createSecureServer (UA_UInt16 port, const char *applicationUri,
const char *certPath, const char *keyPath,
char **trustPaths, size_t trustSize,
UA_StatusCode *retval);
/**
* @brief Parses a log-level name into the corresponding UA_LogLevel value.
*
* Accepted names (case-sensitive): "trace", "debug", "info", "warning",
* "error", "fatal".
*
* @param name Log-level name string.
* @return The matching UA_LogLevel, or -1 if the name is not recognized.
*/
int parseLogLevel (const char *name);
/**
* @brief Parses a security mode name into the corresponding enum value.
*
* Accepted names: "None", "Sign", "SignAndEncrypt".
*
* @param name Mode name string.
* @return The matching UA_MessageSecurityMode, or
* UA_MESSAGESECURITYMODE_INVALID if the name is not recognized.
*/
UA_MessageSecurityMode parseSecurityMode (const char *name);
/**
* @brief Maps a short security policy name to its full OPC UA URI.
*
* Accepted names: "None", "Basic256Sha256", "Aes256_Sha256_RsaPss",
* "Aes128_Sha256_RsaOaep", "ECC_nistP256".
*
* @param shortName Short policy name.
* @return The full URI string, or NULL if the name is not recognized.
*/
const char *resolveSecurityPolicyUri (const char *shortName);
/**
* @brief Initializes a UA_ClientConfig with encryption from file paths.
*
* The config must be zero-initialized by the caller before calling this
* function. Loads the certificate, private key, and trustlist, then applies
* default encryption settings.
*
* @param cc Pointer to a zero-initialized UA_ClientConfig.
* @param applicationUri OPC UA application URI.
* @param certPath Path to client certificate (.der).
* @param keyPath Path to private key (.der).
* @param trustPaths Array of trustlist file paths (may be NULL if trustSize is
* 0).
* @param trustSize Number of entries in trustPaths.
* @param securityMode Requested message security mode.
* @param securityPolicyUri Security policy URI string (e.g.
* "http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256").
* @return UA_STATUSCODE_GOOD on success, error code otherwise.
*/
UA_StatusCode createSecureClientConfig (
UA_ClientConfig *cc, const char *applicationUri, const char *certPath,
const char *keyPath, char **trustPaths, size_t trustSize,
UA_MessageSecurityMode securityMode, const char *securityPolicyUri);
/**
* @brief Logs a UA_ApplicationDescription (server info from FindServers).
*
* Outputs the application URI, name, product URI, type, and discovery URLs
* via UA_LOG_INFO.
*
* @param description The application description to print.
* @param index Display index (e.g. position in the FindServers result array).
*/
void printApplicationDescription (const UA_ApplicationDescription *description,
size_t index);
/**
* @brief Logs a UA_EndpointDescription in a compact one-line format.
*
* Outputs the endpoint URL, security level, security mode, and the short
* policy name (the part after '#') via UA_LOG_INFO.
*
* @param endpoint The endpoint description to print.
* @param index Display index (e.g. position in the GetEndpoints result array).
*/
void printEndpoint (const UA_EndpointDescription *endpoint, size_t index);
#endif /* DISCOVERY_COMMON_H */
|