123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- /* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
- #include <open62541/client_config_default.h>
- #include <open62541/client_highlevel.h>
- #include <open62541/client_subscriptions.h>
- #include <open62541/plugin/log_stdout.h>
- #include "common.h"
- static void usage(void) {
- printf("Usage: client [-username name] [-password password] ");
- #ifdef UA_ENABLE_ENCRYPTION
- printf("[-cert certfile.der] [-key keyfile.der] "
- "[-securityMode <0-3>] [-securityPolicy policyUri] ");
- #endif
- printf("opc.tcp://<host>:<port>\n");
- }
- int main(int argc, char *argv[]) {
- UA_String securityPolicyUri = UA_STRING_NULL;
- UA_MessageSecurityMode securityMode = UA_MESSAGESECURITYMODE_INVALID; /* allow everything */
- char *serverurl = NULL;
- char *username = NULL;
- char *password = NULL;
- #ifdef UA_ENABLE_ENCRYPTION
- char *certfile = NULL;
- char *keyfile = NULL;
- #endif
- /* At least one argument is required for the server uri */
- if(argc <= 1) {
- usage();
- return EXIT_FAILURE;
- }
- /* Parse the arguments */
- for(int argpos = 1; argpos < argc; argpos++) {
- if(strcmp(argv[argpos], "--help") == 0 ||
- strcmp(argv[argpos], "-h") == 0) {
- usage();
- return EXIT_SUCCESS;
- }
- if(argpos + 1 == argc) {
- serverurl = argv[argpos];
- continue;
- }
- if(strcmp(argv[argpos], "-username") == 0) {
- argpos++;
- username = argv[argpos];
- continue;
- }
- if(strcmp(argv[argpos], "-password") == 0) {
- argpos++;
- password = argv[argpos];
- continue;
- }
- #ifdef UA_ENABLE_ENCRYPTION
- if(strcmp(argv[argpos], "-cert") == 0) {
- argpos++;
- certfile = argv[argpos];
- continue;
- }
- if(strcmp(argv[argpos], "-key") == 0) {
- argpos++;
- keyfile = argv[argpos];
- continue;
- }
- if(strcmp(argv[argpos], "-securityMode") == 0) {
- argpos++;
- if(sscanf(argv[argpos], "%i", (int*)&securityMode) != 1) {
- usage();
- return EXIT_FAILURE;
- }
- continue;
- }
- if(strcmp(argv[argpos], "-securityPolicy") == 0) {
- argpos++;
- securityPolicyUri = UA_STRING(argv[argpos]);
- continue;
- }
- #endif
- usage();
- return EXIT_FAILURE;
- }
- /* Create the server and set its config */
- UA_Client *client = UA_Client_new();
- UA_ClientConfig *cc = UA_Client_getConfig(client);
- #ifdef UA_ENABLE_ENCRYPTION
- if(certfile) {
- UA_ByteString certificate = loadFile(certfile);
- UA_ByteString privateKey = loadFile(keyfile);
- UA_ClientConfig_setDefaultEncryption(cc, certificate, privateKey,
- NULL, 0, NULL, 0);
- UA_ByteString_clear(&certificate);
- UA_ByteString_clear(&privateKey);
- } else {
- UA_ClientConfig_setDefault(cc);
- }
- #else
- UA_ClientConfig_setDefault(cc);
- #endif
- cc->securityMode = securityMode;
- cc->securityPolicyUri = securityPolicyUri;
- /* Connect to the server */
- UA_StatusCode retval = UA_STATUSCODE_GOOD;
- if(username)
- retval = UA_Client_connect_username(client, serverurl, username, password);
- else
- retval = UA_Client_connect(client, serverurl);
- if(retval != UA_STATUSCODE_GOOD) {
- UA_Client_delete(client);
- return EXIT_FAILURE;
- }
- UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Connected!");
- /* Read the server-time */
- UA_Variant value;
- UA_Variant_init(&value);
- UA_Client_readValueAttribute(client,
- UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME),
- &value);
- if(UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DATETIME])) {
- UA_DateTimeStruct dts = UA_DateTime_toStruct(*(UA_DateTime *)value.data);
- UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
- "The server date is: %02u-%02u-%04u %02u:%02u:%02u.%03u",
- dts.day, dts.month, dts.year, dts.hour, dts.min, dts.sec, dts.milliSec);
- }
- UA_Variant_clear(&value);
- /* Clean up */
- UA_Client_disconnect(client);
- UA_Client_delete(client);
- return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
- }
|