aboutsummaryrefslogtreecommitdiffstats
path: root/src/common.h
blob: e8c0c7849f8f7b2af5a64724929e2d55a5b7b356 (plain)
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 */