Explorar el Código

enable release build for client, cosmetic improvements

Julius Pfrommer hace 10 años
padre
commit
853a1a1e0a
Se han modificado 6 ficheros con 68 adiciones y 102 borrados
  1. 4 3
      CMakeLists.txt
  2. 1 0
      examples/client_proper.c
  3. 0 25
      include/ua_client.h
  4. 26 0
      include/ua_types.h
  5. 36 47
      src/client/ua_client.c
  6. 1 27
      src/server/ua_server_internal.h

+ 4 - 3
CMakeLists.txt

@@ -221,6 +221,7 @@ if(BUILD_EXAMPLECLIENT)
 	add_executable(exampleClient $<TARGET_OBJECTS:open62541-object> examples/client.c)
 	add_executable(exampleClient_proper $<TARGET_OBJECTS:open62541-object> examples/client_proper.c examples/networklayer_tcp.c)
     target_include_directories(exampleClient PRIVATE ${PROJECT_BINARY_DIR})
+    target_include_directories(exampleClient_proper PRIVATE ${PROJECT_BINARY_DIR})
     if(ENABLE_MULTITHREADING)
         target_link_libraries(exampleClient urcu-cds urcu urcu-common pthread)
     endif()
@@ -232,8 +233,8 @@ if(BUILD_EXAMPLECLIENT)
         target_link_libraries(exampleClient_proper rt)
     endif()
     if ((CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") AND (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR CMAKE_BUILD_TYPE STREQUAL "Release"))
-    	add_custom_command(TARGET exampleClient POST_BUILD COMMAND ${CMAKE_STRIP} $<TARGET_FILE:exampleClient>)
-	    add_custom_command(TARGET exampleClient_proper POST_BUILD COMMAND ${CMAKE_STRIP} $<TARGET_FILE:exampleClient>)
+       add_custom_command(TARGET exampleClient POST_BUILD COMMAND ${CMAKE_STRIP} $<TARGET_FILE:exampleClient>)
+	   add_custom_command(TARGET exampleClient_proper POST_BUILD COMMAND ${CMAKE_STRIP} $<TARGET_FILE:exampleClient_proper>)
 	endif()
     if(EXTENSION_STATELESS)
         add_executable(statelessClient ${PROJECT_BINARY_DIR}/open62541.c examples/client_stateless.c)
@@ -266,4 +267,4 @@ if(BUILD_DOCUMENTATION)
                       ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
                       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
                       COMMENT "Generating API documentation with Doxygen")
-endif()
+endif()

+ 1 - 0
examples/client_proper.c

@@ -5,6 +5,7 @@
     #include "open62541.h"
 #endif
 
+#include <stdio.h>
 #include "networklayer_tcp.h"
 
 int main(int argc, char *argv[]) {

+ 0 - 25
include/ua_client.h

@@ -36,31 +36,6 @@ UA_StatusCode UA_EXPORT UA_Client_connect(UA_Client *client, UA_ConnectionConfig
 
 UA_StatusCode UA_EXPORT UA_Client_disconnect(UA_Client *client);
 
-typedef enum {
-    UA_ATTRIBUTEID_NODEID                  = 1,
-    UA_ATTRIBUTEID_NODECLASS               = 2,
-    UA_ATTRIBUTEID_BROWSENAME              = 3,
-    UA_ATTRIBUTEID_DISPLAYNAME             = 4,
-    UA_ATTRIBUTEID_DESCRIPTION             = 5,
-    UA_ATTRIBUTEID_WRITEMASK               = 6,
-    UA_ATTRIBUTEID_USERWRITEMASK           = 7,
-    UA_ATTRIBUTEID_ISABSTRACT              = 8,
-    UA_ATTRIBUTEID_SYMMETRIC               = 9,
-    UA_ATTRIBUTEID_INVERSENAME             = 10,
-    UA_ATTRIBUTEID_CONTAINSNOLOOPS         = 11,
-    UA_ATTRIBUTEID_EVENTNOTIFIER           = 12,
-    UA_ATTRIBUTEID_VALUE                   = 13,
-    UA_ATTRIBUTEID_DATATYPE                = 14,
-    UA_ATTRIBUTEID_VALUERANK               = 15,
-    UA_ATTRIBUTEID_ARRAYDIMENSIONS         = 16,
-    UA_ATTRIBUTEID_ACCESSLEVEL             = 17,
-    UA_ATTRIBUTEID_USERACCESSLEVEL         = 18,
-    UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL = 19,
-    UA_ATTRIBUTEID_HISTORIZING             = 20,
-    UA_ATTRIBUTEID_EXECUTABLE              = 21,
-    UA_ATTRIBUTEID_USEREXECUTABLE          = 22
-} UA_AttributeId;
-
 /* Attribute Service Set */
 UA_ReadResponse UA_EXPORT UA_Client_read(UA_Client *client, const UA_ReadRequest *request);
 UA_WriteResponse UA_EXPORT UA_Client_write(UA_Client *client, const UA_WriteRequest *request);

+ 26 - 0
include/ua_types.h

@@ -586,6 +586,32 @@ void UA_EXPORT UA_Array_delete(void *p, const UA_DataType *dataType, UA_Int32 no
 
 /** @} */
 
+/* These are not generated from XML. Server *and* client need them. */
+typedef enum {
+    UA_ATTRIBUTEID_NODEID                  = 1,
+    UA_ATTRIBUTEID_NODECLASS               = 2,
+    UA_ATTRIBUTEID_BROWSENAME              = 3,
+    UA_ATTRIBUTEID_DISPLAYNAME             = 4,
+    UA_ATTRIBUTEID_DESCRIPTION             = 5,
+    UA_ATTRIBUTEID_WRITEMASK               = 6,
+    UA_ATTRIBUTEID_USERWRITEMASK           = 7,
+    UA_ATTRIBUTEID_ISABSTRACT              = 8,
+    UA_ATTRIBUTEID_SYMMETRIC               = 9,
+    UA_ATTRIBUTEID_INVERSENAME             = 10,
+    UA_ATTRIBUTEID_CONTAINSNOLOOPS         = 11,
+    UA_ATTRIBUTEID_EVENTNOTIFIER           = 12,
+    UA_ATTRIBUTEID_VALUE                   = 13,
+    UA_ATTRIBUTEID_DATATYPE                = 14,
+    UA_ATTRIBUTEID_VALUERANK               = 15,
+    UA_ATTRIBUTEID_ARRAYDIMENSIONS         = 16,
+    UA_ATTRIBUTEID_ACCESSLEVEL             = 17,
+    UA_ATTRIBUTEID_USERACCESSLEVEL         = 18,
+    UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL = 19,
+    UA_ATTRIBUTEID_HISTORIZING             = 20,
+    UA_ATTRIBUTEID_EXECUTABLE              = 21,
+    UA_ATTRIBUTEID_USEREXECUTABLE          = 22
+} UA_AttributeId;
+
 #ifdef __cplusplus
 } // extern "C"
 #endif

+ 36 - 47
src/client/ua_client.c

@@ -54,43 +54,6 @@ void UA_Client_delete(UA_Client* client){
     free(client);
 }
 
-static UA_StatusCode HelAckHandshake(UA_Client *client);
-static UA_StatusCode SecureChannelHandshake(UA_Client *client);
-static UA_StatusCode SessionHandshake(UA_Client *client);
-static UA_StatusCode CloseSession(UA_Client *client);
-static UA_StatusCode CloseSecureChannel(UA_Client *client);
-
-UA_StatusCode UA_Client_connect(UA_Client *client, UA_ConnectionConfig conf,
-                                UA_ClientNetworkLayer networkLayer, char *endpointUrl)
-{
-    UA_StatusCode retval = UA_String_copycstring(endpointUrl, &client->endpointUrl);
-    if(retval != UA_STATUSCODE_GOOD)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-
-    client->networkLayer = networkLayer;
-    client->connection.localConf = conf;
-    retval = networkLayer.connect(client->endpointUrl, client->networkLayer.nlHandle);
-    if(retval != UA_STATUSCODE_GOOD)
-        return retval;
-
-    retval = HelAckHandshake(client);
-    if(retval == UA_STATUSCODE_GOOD)
-        retval = SecureChannelHandshake(client);
-    if(retval == UA_STATUSCODE_GOOD)
-        retval = SessionHandshake(client);
-    return retval;
-}
-
-UA_StatusCode UA_EXPORT UA_Client_disconnect(UA_Client *client) {
-    return UA_STATUSCODE_GOOD;
-}
-
-#define SETREQUESTHEADER(HEADER, CLIENT) \
-    UA_NodeId_copy(&CLIENT->authenticationToken, &HEADER.authenticationToken); \
-    HEADER.timestamp = UA_DateTime_now();                               \
-	HEADER.timeoutHint = 10000;                                         \
-    /* extend this */
-
 static UA_StatusCode SecureChannelHandshake(UA_Client *client) {
     UA_ByteString_deleteMembers(&client->clientNonce); // if the handshake is repeated
 	UA_ByteString_newMembers(&client->clientNonce, 1);
@@ -109,14 +72,12 @@ static UA_StatusCode SecureChannelHandshake(UA_Client *client) {
 	UA_String_copycstring("http://opcfoundation.org/UA/SecurityPolicy#None", &asymHeader.securityPolicyUri);
 
     /* id of opensecurechannelrequest */
-	UA_NodeId requestType = UA_NODEID_STATIC(0, UA_NS0ID_OPENSECURECHANNELREQUEST +
-                                             UA_ENCODINGOFFSET_BINARY);
+	UA_NodeId requestType = UA_NODEID_STATIC(0, UA_NS0ID_OPENSECURECHANNELREQUEST + UA_ENCODINGOFFSET_BINARY);
 
 	UA_OpenSecureChannelRequest opnSecRq;
 	UA_OpenSecureChannelRequest_init(&opnSecRq);
 	opnSecRq.requestHeader.timestamp = UA_DateTime_now();
     UA_ByteString_copy(&client->clientNonce, &opnSecRq.clientNonce);
-	opnSecRq.clientProtocolVersion = 0;
 	opnSecRq.requestedLifetime = 30000;
 	opnSecRq.securityMode = UA_MESSAGESECURITYMODE_NONE;
 	opnSecRq.requestType = UA_SECURITYTOKENREQUESTTYPE_ISSUE;
@@ -265,7 +226,7 @@ static void synchronousRequest(const void *request, const UA_DataType *requestTy
     seqHeader.requestId = ++client->requestId;
 
 	UA_NodeId requestId = UA_NODEID_STATIC(0, requestType->typeId.identifier.numeric +
-                                             UA_ENCODINGOFFSET_BINARY);
+                                           UA_ENCODINGOFFSET_BINARY);
 
 	msgHeader.messageHeader.messageSize =
         UA_SecureConversationMessageHeader_calcSizeBinary(&msgHeader) +
@@ -277,7 +238,7 @@ static void synchronousRequest(const void *request, const UA_DataType *requestTy
 	UA_ByteString message;
     UA_StatusCode retval = UA_ByteString_newMembers(&message, msgHeader.messageHeader.messageSize);
     if(retval != UA_STATUSCODE_GOOD) {
-
+        // todo
     }
 
     size_t offset = 0;
@@ -331,15 +292,18 @@ static UA_StatusCode SessionHandshake(UA_Client *client) {
     UA_CreateSessionRequest request;
     UA_CreateSessionRequest_init(&request);
 
-    SETREQUESTHEADER(request.requestHeader, client);
-	/* UA_String_copy(endpointUrl, &rq.endpointUrl); */
-	/* UA_String_copycstring("mysession", &rq.sessionName); */
-	/* UA_String_copycstring("abcd", &rq.clientCertificate); */
-
+    // todo: is this needed for all requests?
+    UA_NodeId_copy(&client->authenticationToken, &request.requestHeader.authenticationToken);
+    request.requestHeader.timestamp = UA_DateTime_now();
+	request.requestHeader.timeoutHint = 10000;
     UA_ByteString_copy(&client->clientNonce, &request.clientNonce);
 	request.requestedSessionTimeout = 1200000;
 	request.maxResponseMessageSize = UA_INT32_MAX;
 
+	/* UA_String_copy(endpointUrl, &rq.endpointUrl); */
+	/* UA_String_copycstring("mysession", &rq.sessionName); */
+	/* UA_String_copycstring("abcd", &rq.clientCertificate); */
+
     UA_CreateSessionResponse response;
     synchronousRequest(&request, &UA_TYPES[UA_TYPES_CREATESESSIONREQUEST],
                        &response, &UA_TYPES[UA_TYPES_CREATESESSIONRESPONSE],
@@ -350,6 +314,31 @@ static UA_StatusCode SessionHandshake(UA_Client *client) {
     return response.responseHeader.serviceResult; // not deleted
 }
 
+UA_StatusCode UA_Client_connect(UA_Client *client, UA_ConnectionConfig conf,
+                                UA_ClientNetworkLayer networkLayer, char *endpointUrl)
+{
+    UA_StatusCode retval = UA_String_copycstring(endpointUrl, &client->endpointUrl);
+    if(retval != UA_STATUSCODE_GOOD)
+        return UA_STATUSCODE_BADOUTOFMEMORY;
+
+    client->networkLayer = networkLayer;
+    client->connection.localConf = conf;
+    retval = networkLayer.connect(client->endpointUrl, client->networkLayer.nlHandle);
+    if(retval != UA_STATUSCODE_GOOD)
+        return retval;
+
+    retval = HelAckHandshake(client);
+    if(retval == UA_STATUSCODE_GOOD)
+        retval = SecureChannelHandshake(client);
+    if(retval == UA_STATUSCODE_GOOD)
+        retval = SessionHandshake(client);
+    return retval;
+}
+
+UA_StatusCode UA_EXPORT UA_Client_disconnect(UA_Client *client) {
+    return UA_STATUSCODE_GOOD;
+}
+
 /*************************/
 /* User-Facing Functions */
 /*************************/

+ 1 - 27
src/server/ua_server_internal.h

@@ -72,32 +72,6 @@ UA_StatusCode UA_Server_addReferenceWithSession(UA_Server *server, UA_Session *s
 
 void UA_Server_deleteTimedWork(UA_Server *server);
 
-/** The (nodes) AttributeIds are defined in part 6, table A1 of the standard */
-typedef enum {
-    UA_ATTRIBUTEID_NODEID                  = 1,
-    UA_ATTRIBUTEID_NODECLASS               = 2,
-    UA_ATTRIBUTEID_BROWSENAME              = 3,
-    UA_ATTRIBUTEID_DISPLAYNAME             = 4,
-    UA_ATTRIBUTEID_DESCRIPTION             = 5,
-    UA_ATTRIBUTEID_WRITEMASK               = 6,
-    UA_ATTRIBUTEID_USERWRITEMASK           = 7,
-    UA_ATTRIBUTEID_ISABSTRACT              = 8,
-    UA_ATTRIBUTEID_SYMMETRIC               = 9,
-    UA_ATTRIBUTEID_INVERSENAME             = 10,
-    UA_ATTRIBUTEID_CONTAINSNOLOOPS         = 11,
-    UA_ATTRIBUTEID_EVENTNOTIFIER           = 12,
-    UA_ATTRIBUTEID_VALUE                   = 13,
-    UA_ATTRIBUTEID_DATATYPE                = 14,
-    UA_ATTRIBUTEID_VALUERANK               = 15,
-    UA_ATTRIBUTEID_ARRAYDIMENSIONS         = 16,
-    UA_ATTRIBUTEID_ACCESSLEVEL             = 17,
-    UA_ATTRIBUTEID_USERACCESSLEVEL         = 18,
-    UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL = 19,
-    UA_ATTRIBUTEID_HISTORIZING             = 20,
-    UA_ATTRIBUTEID_EXECUTABLE              = 21,
-    UA_ATTRIBUTEID_USEREXECUTABLE          = 22
-} UA_AttributeId;
-
 #define ADDREFERENCE(NODEID, REFTYPE_NODEID, TARGET_EXPNODEID) do {     \
         UA_AddReferencesItem item;                                      \
         UA_AddReferencesItem_init(&item);                               \
@@ -108,4 +82,4 @@ typedef enum {
         UA_Server_addReference(server, &item);                          \
     } while(0)
 
-#endif /* UA_SERVER_INTERNAL_H_ */
+#endif /* UA_SERVER_INTERNAL_H_ */