Просмотр исходного кода

refactor(client): Move UA_Client_new to plugin

So we can use logging already during the initialization.
Julius Pfrommer лет назад: 5
Родитель
Сommit
c126715dd8

+ 10 - 2
include/open62541/client.h

@@ -48,9 +48,17 @@ _UA_BEGIN_DECLS
  * Client Lifecycle
  * ---------------- */
 
-/* Create a new client */
+/* The method UA_Client_new is defined in client_config_default.h. So default
+ * plugins outside of the core library (for logging, etc) are already available
+ * during the initialization.
+ *
+ * UA_Client UA_EXPORT * UA_Client_new(void);
+ */
+
+/* Creates a new client. Moves the config into the client with a shallow copy.
+ * The config content is cleared together with the client. */
 UA_Client UA_EXPORT *
-UA_Client_new(void);
+UA_Client_newWithConfig(const UA_ClientConfig *config);
 
 /* Get the client connection status */
 UA_ClientState UA_EXPORT

+ 3 - 0
plugins/include/open62541/client_config_default.h

@@ -10,9 +10,12 @@
 #define UA_CLIENT_CONFIG_DEFAULT_H_
 
 #include <open62541/client_config.h>
+#include <open62541/client.h>
 
 _UA_BEGIN_DECLS
 
+UA_Client UA_EXPORT * UA_Client_new(void);
+
 UA_StatusCode UA_EXPORT
 UA_ClientConfig_setDefault(UA_ClientConfig *config);
 

+ 9 - 0
plugins/ua_config_default.c

@@ -651,6 +651,15 @@ UA_ServerConfig_setDefaultWithSecurityPolicies(UA_ServerConfig *conf,
 /* Default Client Settings */
 /***************************/
 
+UA_Client * UA_Client_new() {
+    UA_ClientConfig config;
+    memset(&config, 0, sizeof(UA_ClientConfig));
+    config.logger.log = UA_Log_Stdout_log;
+    config.logger.context = NULL;
+    config.logger.clear = UA_Log_Stdout_clear;
+    return UA_Client_newWithConfig(&config);
+}
+
 static UA_INLINE void
 UA_ClientConnectionTCP_poll_callback(UA_Client *client, void *data) {
     UA_ClientConnectionTCP_poll(client, data);

+ 7 - 5
src/client/ua_client.c

@@ -31,7 +31,6 @@
 
 static void
 UA_Client_init(UA_Client* client) {
-    memset(client, 0, sizeof(UA_Client));
     UA_SecureChannel_init(&client->channel);
     if(client->config.stateCallback)
         client->config.stateCallback(client, client->state);
@@ -42,11 +41,15 @@ UA_Client_init(UA_Client* client) {
     UA_WorkQueue_init(&client->workQueue);
 }
 
-UA_Client *
-UA_Client_new() {
+UA_Client UA_EXPORT *
+UA_Client_newWithConfig(const UA_ClientConfig *config) {
+    if(!config)
+        return NULL;
     UA_Client *client = (UA_Client*)UA_malloc(sizeof(UA_Client));
     if(!client)
         return NULL;
+    memset(client, 0, sizeof(UA_Client));
+    client->config = *config;
     UA_Client_init(client);
     return client;
 }
@@ -98,8 +101,6 @@ UA_Client_deleteMembers(UA_Client *client) {
 
     /* Clean up the work queue */
     UA_WorkQueue_cleanup(&client->workQueue);
-
-    UA_ClientConfig_deleteMembers(&client->config);
 }
 
 void
@@ -111,6 +112,7 @@ UA_Client_reset(UA_Client* client) {
 void
 UA_Client_delete(UA_Client* client) {
     UA_Client_deleteMembers(client);
+    UA_ClientConfig_deleteMembers(&client->config);
     UA_free(client);
 }