#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 #include #include /** * @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 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 */