Browse Source

added function pointer struct in order to handle a different service set which operates on an external data source

Florian Palm 10 years ago
parent
commit
d52431c6b5
5 changed files with 246 additions and 62 deletions
  1. 1 0
      CMakeLists.txt
  2. 5 0
      include/ua_server.h
  3. 13 3
      src/server/ua_server.c
  4. 44 22
      src/server/ua_server_binary.c
  5. 183 37
      src/server/ua_services.h

+ 1 - 0
CMakeLists.txt

@@ -23,6 +23,7 @@ set(lib_sources src/ua_types.c
                 src/ua_securechannel.c
                 src/ua_session.c
                 src/ua_util.c
+		src/server/ua_services.c
                 src/server/ua_server.c
                 src/server/ua_securechannel_manager.c
                 src/server/ua_session_manager.c

+ 5 - 0
include/ua_server.h

@@ -24,6 +24,7 @@ extern "C" {
 #include "ua_types_generated.h"
 #include "ua_connection.h"
 #include "ua_log.h"
+//not good, is it?
 
 /** @defgroup server Server */
 
@@ -40,6 +41,9 @@ typedef struct UA_SessionManager UA_SessionManager;
 struct UA_NodeStore;
 typedef struct UA_NodeStore UA_NodeStore;
 
+struct ServiceFunctionpointers;
+typedef struct ServiceFunctionpointers ServiceFunctionpointers;
+
 typedef struct UA_Server {
     UA_ApplicationDescription description;
     UA_SecureChannelManager *secureChannelManager;
@@ -51,6 +55,7 @@ typedef struct UA_Server {
     // todo: move these somewhere sane
     UA_ExpandedNodeId objectsNodeId;
     UA_NodeId hasComponentReferenceTypeId;
+    ServiceFunctionpointers *serviceImplementations;
 } UA_Server;
 
 void UA_EXPORT UA_Server_init(UA_Server *server, UA_String *endpointUrl);

+ 13 - 3
src/server/ua_server.c

@@ -16,14 +16,23 @@ UA_Int32 UA_Server_deleteMembers(UA_Server *server) {
 }
 
 void UA_Server_init(UA_Server *server, UA_String *endpointUrl) {
-    UA_ExpandedNodeId_init(&server->objectsNodeId);
+
+	server->serviceImplementations = (ServiceFunctionpointers*)UA_alloc(sizeof(ServiceFunctionpointers));
+
+	UA_ExpandedNodeId_init(&server->objectsNodeId);
     server->objectsNodeId.nodeId.identifier.numeric = 85;
 
     UA_NodeId_init(&server->hasComponentReferenceTypeId);
     server->hasComponentReferenceTypeId.identifier.numeric = 47;
-    
+
     UA_ApplicationDescription_init(&server->description);
     UA_ByteString_init(&server->serverCertificate);
+
+
+
+
+
+
 #define MAXCHANNELCOUNT 100
 #define STARTCHANNELID 1
 #define TOKENLIFETIME 10000
@@ -535,7 +544,8 @@ UA_AddNodesResult UA_Server_addNode(UA_Server *server, UA_Node **node, UA_Expand
 
 void UA_Server_addReference(UA_Server *server, const UA_AddReferencesRequest *request,
                             UA_AddReferencesResponse *response) {
-    Service_AddReferences(server, &adminSession, request, response);
+
+	server->serviceImplementations->AddReferences(server, &adminSession, request, response);
 }
 
 UA_AddNodesResult UA_Server_addScalarVariableNode(UA_Server *server, UA_String *browseName, void *value,

+ 44 - 22
src/server/ua_server_binary.c

@@ -6,6 +6,10 @@
 #include "ua_session_manager.h"
 #include "ua_util.h"
 
+
+
+
+
 static UA_Int32 UA_ByteStringArray_deleteMembers(UA_ByteStringArray *stringarray) {
     if(!stringarray)
         return UA_ERROR;
@@ -21,6 +25,7 @@ static void processHello(UA_Connection *connection, const UA_ByteString *msg,
         connection->close(connection->callbackHandle);
         return;
     }
+
     connection->remoteConf.maxChunkCount   = helloMessage.maxChunkCount;
     connection->remoteConf.maxMessageSize  = helloMessage.maxMessageSize;
     connection->remoteConf.protocolVersion = helloMessage.protocolVersion;
@@ -84,7 +89,7 @@ static void processOpen(UA_Connection *connection, UA_Server *server,
     // perform request
     UA_OpenSecureChannelResponse p;
     UA_OpenSecureChannelResponse_init(&p);
-    Service_OpenSecureChannel(server, connection, &r, &p);
+    server->serviceImplementations->OpenSecureChannel(server, connection, &r, &p);
 
     // response
     UA_TcpMessageHeader respHeader;
@@ -131,20 +136,36 @@ static void init_response_header(const UA_RequestHeader *p, UA_ResponseHeader *r
             return;                  \
         } } while(0)
 
-#define INVOKE_SERVICE(TYPE) do {                                                                         \
-        UA_##TYPE##Request p;                                                                             \
-        UA_##TYPE##Response r;                                                                            \
-        CHECK_PROCESS(UA_##TYPE##Request_decodeBinary(msg, pos, &p),; );                                  \
-        UA_##TYPE##Response_init(&r);                                                                     \
-        init_response_header(&p.requestHeader, &r.responseHeader);                                        \
-        DBG_VERBOSE(printf("Invoke Service: %s\n", # TYPE));                                              \
-        Service_##TYPE(server, channel->session, &p, &r);                                                 \
-        DBG_VERBOSE(printf("Finished Service: %s\n", # TYPE));                                            \
-        UA_ByteString_newMembers(message, UA_##TYPE##Response_calcSizeBinary(&r)); \
-        UA_##TYPE##Response_encodeBinary(&r, message, &sendOffset);     \
-        UA_##TYPE##Request_deleteMembers(&p);                                                             \
-        UA_##TYPE##Response_deleteMembers(&r);                                                            \
-        responseType = requestType.nodeId.identifier.numeric + 3;                                         \
+#define INVOKE_SERVICE(TYPE) do {  \
+        if(server->serviceImplementations->TYPE != UA_NULL){ \
+			UA_##TYPE##Request p;  \
+			UA_##TYPE##Response r; \
+			CHECK_PROCESS(UA_##TYPE##Request_decodeBinary(msg, pos, &p),; );                                  \
+			UA_##TYPE##Response_init(&r);                                                                     \
+			init_response_header(&p.requestHeader, &r.responseHeader);                                        \
+			DBG_VERBOSE(printf("Invoke Service: %s\n", # TYPE));    \
+			server->serviceImplementations->TYPE(server, channel->session, &p, &r);  \
+			DBG_VERBOSE(printf("Finished Service: %s\n", # TYPE));                                            \
+			UA_ByteString_newMembers(message, UA_##TYPE##Response_calcSizeBinary(&r)); \
+			UA_##TYPE##Response_encodeBinary(&r, message, &sendOffset);     \
+			UA_##TYPE##Request_deleteMembers(&p);                                                             \
+			UA_##TYPE##Response_deleteMembers(&r);                                                            \
+			responseType = requestType.nodeId.identifier.numeric + 3; \
+		}else { \
+	        printf("SL_processMessage - unknown request, namespace=%d, request=%d\n", \
+	               requestType.nodeId.namespaceIndex, requestType.nodeId.identifier.numeric); \
+	        UA_RequestHeader  p; \
+	        UA_ResponseHeader r; \
+	        CHECK_PROCESS(UA_RequestHeader_decodeBinary(msg, pos, &p),; ); \
+	        UA_ResponseHeader_init(&r); \
+	        r.requestHandle = p.requestHandle; \
+	        r.serviceResult = UA_STATUSCODE_BADSERVICEUNSUPPORTED; \
+	        UA_ByteString_newMembers(message, UA_ResponseHeader_calcSizeBinary(&r)); \
+	        UA_ResponseHeader_encodeBinary(&r, message, &sendOffset); \
+	        UA_RequestHeader_deleteMembers(&p); \
+	        UA_ResponseHeader_deleteMembers(&r); \
+	        responseType = UA_RESPONSEHEADER_NS0 + 2; \
+		}\
 } while(0)
 
 static void processMessage(UA_Connection *connection, UA_Server *server, const UA_ByteString *msg, UA_UInt32 *pos) {
@@ -163,7 +184,7 @@ static void processMessage(UA_Connection *connection, UA_Server *server, const U
 
     channel->sequenceNumber = sequenceHeader.sequenceNumber;
     channel->requestId = sequenceHeader.requestId;
-    // todo
+    // todogo
     //UA_SecureChannel_checkSequenceNumber(channel,sequenceHeader.sequenceNumber);
     //UA_SecureChannel_checkRequestId(channel,sequenceHeader.requestId);
 
@@ -190,7 +211,7 @@ static void processMessage(UA_Connection *connection, UA_Server *server, const U
         CHECK_PROCESS(UA_GetEndpointsRequest_decodeBinary(msg, pos, &p),; );
         UA_GetEndpointsResponse_init(&r);
         init_response_header(&p.requestHeader, &r.responseHeader);
-        Service_GetEndpoints(server, &p, &r);
+        server->serviceImplementations->GetEndpoints(server, &p, &r);
         UA_ByteString_newMembers(message, UA_GetEndpointsResponse_calcSizeBinary(&r));
         UA_GetEndpointsResponse_encodeBinary(&r, message, &sendOffset);
         UA_GetEndpointsRequest_deleteMembers(&p);
@@ -205,7 +226,8 @@ static void processMessage(UA_Connection *connection, UA_Server *server, const U
         CHECK_PROCESS(UA_CreateSessionRequest_decodeBinary(msg, pos, &p),; );
         UA_CreateSessionResponse_init(&r);
         init_response_header(&p.requestHeader, &r.responseHeader);
-        Service_CreateSession(server, channel,  &p, &r);
+        server->serviceImplementations->CreateSession(server, channel, &p, &r);
+        //Service_CreateSession(server, channel,  &p, &r);
         UA_ByteString_newMembers(message, UA_CreateSessionResponse_calcSizeBinary(&r));
         UA_CreateSessionResponse_encodeBinary(&r, message, &sendOffset);
         UA_CreateSessionRequest_deleteMembers(&p);
@@ -221,7 +243,7 @@ static void processMessage(UA_Connection *connection, UA_Server *server, const U
         UA_ActivateSessionResponse_init(&r);
         init_response_header(&p.requestHeader, &r.responseHeader);
 
-        Service_ActivateSession(server, channel,  &p, &r);
+        server->serviceImplementations->ActivateSession(server, channel,  &p, &r);
         UA_ByteString_newMembers(message, UA_ActivateSessionResponse_calcSizeBinary(&r));
         UA_ActivateSessionResponse_encodeBinary(&r, message, &sendOffset);
         UA_ActivateSessionRequest_deleteMembers(&p);
@@ -236,8 +258,7 @@ static void processMessage(UA_Connection *connection, UA_Server *server, const U
         CHECK_PROCESS(UA_CloseSessionRequest_decodeBinary(msg, pos, &p),; );
         UA_CloseSessionResponse_init(&r);
         init_response_header(&p.requestHeader, &r.responseHeader);
-
-        Service_CloseSession(server, &p, &r);
+        server->serviceImplementations->CloseSession(server, &p, &r);
         UA_ByteString_newMembers(message, UA_CloseSessionResponse_calcSizeBinary(&r));
         UA_CloseSessionResponse_encodeBinary(&r, message, &sendOffset);
         UA_CloseSessionRequest_deleteMembers(&p);
@@ -339,7 +360,8 @@ static void processClose(UA_Connection *connection, UA_Server *server, const UA_
     UA_UInt32_decodeBinary(msg, pos, &secureChannelId);
 
 	//the two last parameter is ignored since no answer is needed
-	Service_CloseSecureChannel(server, secureChannelId);
+    server->serviceImplementations->CloseSecureChannel(server,secureChannelId);
+	//Service_CloseSecureChannel(server, secureChannelId);
 }
 
 UA_Int32 UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection, const UA_ByteString *msg) {

+ 183 - 37
src/server/ua_services.h

@@ -6,6 +6,161 @@
 #include "ua_server.h"
 #include "ua_session.h"
 
+#define DEFINE_SERVICE_TYPEDEF(TYPE)   \
+		typedef void (*Service_##TYPE##_funcPtr)(UA_Server *,UA_Session *,const UA_##TYPE##Request*,UA_##TYPE##Response *) ;
+
+DEFINE_SERVICE_TYPEDEF(FindServers)
+
+typedef void (*Service_GetEndpoints_funcPtr)(UA_Server *, const UA_GetEndpointsRequest*, UA_GetEndpointsResponse *) ;
+
+DEFINE_SERVICE_TYPEDEF(RegisterServer)
+
+typedef void (*Service_OpenSecureChannel_funcPtr)(UA_Server *,const UA_Connection*,UA_OpenSecureChannelRequest*, UA_OpenSecureChannelResponse *) ;
+typedef void (*Service_CloseSecureChannel_funcPtr)(UA_Server *, UA_Int32 );
+
+typedef void (*Service_CreateSession_funcPtr)(UA_Server *, UA_SecureChannel*, const UA_CreateSessionRequest*, UA_CreateSessionResponse *) ;
+typedef void (*Service_ActivateSession_funcPtr)(UA_Server *, UA_SecureChannel*, const UA_ActivateSessionRequest*, UA_ActivateSessionResponse *) ;
+typedef void (*Service_CloseSession_funcPtr)(UA_Server *, const UA_CloseSessionRequest*, UA_CloseSessionResponse *) ;
+
+DEFINE_SERVICE_TYPEDEF(Cancel)
+
+DEFINE_SERVICE_TYPEDEF(AddNodes)
+DEFINE_SERVICE_TYPEDEF(AddReferences)
+DEFINE_SERVICE_TYPEDEF(DeleteNodes)
+DEFINE_SERVICE_TYPEDEF(DeleteReferences)
+DEFINE_SERVICE_TYPEDEF(Browse)
+DEFINE_SERVICE_TYPEDEF(BrowseNext)
+DEFINE_SERVICE_TYPEDEF(TranslateBrowsePathsToNodeIds)
+DEFINE_SERVICE_TYPEDEF(RegisterNodes)
+DEFINE_SERVICE_TYPEDEF(UnregisterNodes)
+
+DEFINE_SERVICE_TYPEDEF(QueryFirst)
+DEFINE_SERVICE_TYPEDEF(QueryNext)
+
+DEFINE_SERVICE_TYPEDEF(Read)
+DEFINE_SERVICE_TYPEDEF(HistoryRead)
+DEFINE_SERVICE_TYPEDEF(Write)
+DEFINE_SERVICE_TYPEDEF(HistoryUpdate)
+
+DEFINE_SERVICE_TYPEDEF(Call)
+
+DEFINE_SERVICE_TYPEDEF(CreateMonitoredItems)
+DEFINE_SERVICE_TYPEDEF(ModifyMonitoredItems)
+DEFINE_SERVICE_TYPEDEF(SetMonitoringMode)
+DEFINE_SERVICE_TYPEDEF(SetTriggering)
+DEFINE_SERVICE_TYPEDEF(DeleteMonitoredItems)
+
+DEFINE_SERVICE_TYPEDEF(CreateSubscription)
+DEFINE_SERVICE_TYPEDEF(ModifySubscription)
+DEFINE_SERVICE_TYPEDEF(SetPublishingMode)
+DEFINE_SERVICE_TYPEDEF(Publish)
+DEFINE_SERVICE_TYPEDEF(Republish)
+DEFINE_SERVICE_TYPEDEF(TransferSubscriptions)
+DEFINE_SERVICE_TYPEDEF(DeleteSubscriptions)
+
+struct ServiceFunctionpointers {
+	Service_FindServers_funcPtr FindServers;
+	Service_GetEndpoints_funcPtr GetEndpoints;
+	Service_RegisterServer_funcPtr RegisterServer;
+
+	Service_OpenSecureChannel_funcPtr OpenSecureChannel;
+	Service_CloseSecureChannel_funcPtr CloseSecureChannel;
+
+	Service_CreateSession_funcPtr CreateSession;
+	Service_ActivateSession_funcPtr ActivateSession;
+	Service_CloseSession_funcPtr CloseSession;
+	Service_Cancel_funcPtr Cancel;
+
+	Service_AddNodes_funcPtr AddNodes;
+	Service_AddReferences_funcPtr AddReferences;
+	Service_DeleteNodes_funcPtr DeleteNodes;
+	Service_DeleteReferences_funcPtr DeleteReferences;
+	Service_Browse_funcPtr Browse;
+	Service_BrowseNext_funcPtr BrowseNext;
+	Service_TranslateBrowsePathsToNodeIds_funcPtr TranslateBrowsePathsToNodeIds;
+	Service_RegisterNodes_funcPtr RegisterNodes;
+	Service_UnregisterNodes_funcPtr UnregisterNodes;
+
+	Service_QueryFirst_funcPtr QueryFirst;
+	Service_QueryNext_funcPtr QueryNext;
+
+	Service_Read_funcPtr Read;
+	Service_HistoryRead_funcPtr HistoryRead;
+	Service_Write_funcPtr Write;
+	Service_HistoryUpdate_funcPtr HistoryUpdate;
+	Service_Call_funcPtr Call;
+
+	Service_CreateMonitoredItems_funcPtr CreateMonitoredItems;
+	Service_ModifyMonitoredItems_funcPtr ModifyMonitoredItems;
+	Service_SetMonitoringMode_funcPtr SetMonitoringMode;
+	Service_SetTriggering_funcPtr SetTriggering;
+	Service_DeleteMonitoredItems_funcPtr DeleteMonitoredItems;
+
+	Service_CreateSubscription_funcPtr CreateSubscription;
+	Service_ModifySubscription_funcPtr ModifySubscription;
+	Service_SetPublishingMode_funcPtr SetPublishingMode;
+	Service_Publish_funcPtr Publish;
+	Service_Republish_funcPtr Republish;
+	Service_TransferSubscriptions_funcPtr TransferSubscription;
+	Service_DeleteSubscriptions_funcPtr DeleteSubscription;
+};
+
+void UA_registerDiscoveryServiceSet(ServiceFunctionpointers *sfp,
+Service_FindServers_funcPtr findServers,
+Service_GetEndpoints_funcPtr getEndpoints,
+Service_RegisterServer_funcPtr registerServer);
+
+void UA_registerSecureChannelServiceSet(ServiceFunctionpointers *sfp,
+		Service_OpenSecureChannel_funcPtr openSecureChannel,
+		Service_CloseSecureChannel_funcPtr closeSecureChannel);
+
+void UA_registerSessionServiceSet(ServiceFunctionpointers *sfp,
+		Service_CreateSession_funcPtr createSession,
+		Service_ActivateSession_funcPtr activateSession,
+		Service_CloseSession_funcPtr closeSession,
+		Service_Cancel_funcPtr cancel);
+
+void UA_registerNodeManagementServiceSet(ServiceFunctionpointers *sfp,
+		Service_AddNodes_funcPtr addNodes,
+		Service_AddReferences_funcPtr addReferences,
+		Service_DeleteNodes_funcPtr deleteNodes,
+		Service_DeleteReferences_funcPtr deleteReferences);
+
+void UA_registerViewServiceSet(ServiceFunctionpointers *sfp,
+		Service_Browse_funcPtr browse,
+		Service_BrowseNext_funcPtr browseNext,
+		Service_TranslateBrowsePathsToNodeIds_funcPtr translateBrowsePathsToNodeIds,
+		Service_RegisterNodes_funcPtr registerNodes,
+		Service_UnregisterNodes_funcPtr unregisterNodes);
+
+void UA_registerQueryServiceSet(ServiceFunctionpointers *sfp,
+		Service_QueryFirst_funcPtr queryFirst,
+		Service_QueryNext_funcPtr queryNext);
+
+void UA_registerAttributeServiceSet(ServiceFunctionpointers *sfp,
+		Service_Read_funcPtr read,
+		Service_HistoryRead_funcPtr historyRead,
+		Service_Write_funcPtr write,
+		Service_HistoryUpdate_funcPtr historyUpdate);
+
+void UA_registerMethodeServiceSet(ServiceFunctionpointers *sfp,
+		Service_Call_funcPtr call);
+
+void UA_registerMonitoredItemServiceSet(ServiceFunctionpointers *sfp,
+		Service_CreateMonitoredItems_funcPtr createMonitoredItems,
+		Service_ModifyMonitoredItems_funcPtr modifyMonitoredItems,
+		Service_SetMonitoringMode_funcPtr setMonitoringMode,
+		Service_SetTriggering_funcPtr setTriggering,
+		Service_DeleteMonitoredItems_funcPtr deleteMonitoredItems);
+
+void UA_registerSubscriptionServiceSet(ServiceFunctionpointers *sfp,
+		Service_CreateSubscription_funcPtr createSubscription,
+		Service_ModifySubscription_funcPtr modifySubscription,
+		Service_SetPublishingMode_funcPtr setPublishingMode,
+		Service_Publish_funcPtr publish,
+		Service_Republish_funcPtr republish,
+		Service_TransferSubscriptions_funcPtr transferSubscriptions,
+		Service_DeleteSubscriptions_funcPtr deleteSubscriptions);
 /**
  * @defgroup services Services
  *
@@ -23,14 +178,13 @@
  * @{
  */
 // Service_FindServers
-
 /**
  * @brief This Service returns the Endpoints supported by a Server and all of
  * the configuration information required to establish a SecureChannel and a
  * Session.
  */
-void Service_GetEndpoints(UA_Server                    *server,
-                          const UA_GetEndpointsRequest *request, UA_GetEndpointsResponse *response);
+// void Service_GetEndpoints(UA_Server                    *server,
+//                          const UA_GetEndpointsRequest *request, UA_GetEndpointsResponse *response);
 // Service_RegisterServer
 /** @} */
 
@@ -45,14 +199,13 @@ void Service_GetEndpoints(UA_Server                    *server,
  */
 
 /** @brief This Service is used to open or renew a SecureChannel that can be
-   used to ensure Confidentiality and Integrity for Message exchange during a
-   Session. */
-void Service_OpenSecureChannel(UA_Server *server, UA_Connection *connection,
-                               const UA_OpenSecureChannelRequest *request,
-                               UA_OpenSecureChannelResponse *response);
-
+ used to ensure Confidentiality and Integrity for Message exchange during a
+ Session. */
+//void Service_OpenSecureChannel(UA_Server *server, UA_Connection *connection,
+//                               const UA_OpenSecureChannelRequest *request,
+//                               UA_OpenSecureChannelResponse *response);
 /** @brief This Service is used to terminate a SecureChannel. */
-void Service_CloseSecureChannel(UA_Server *server, UA_Int32 channelId);
+//void Service_CloseSecureChannel(UA_Server *server, UA_Int32 channelId);
 /** @} */
 
 /**
@@ -71,9 +224,8 @@ void Service_CloseSecureChannel(UA_Server *server, UA_Int32 channelId);
  * logs and in the Server’s address space. The second is the authenticationToken
  * which is used to associate an incoming request with a Session.
  */
-void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel,
-                           const UA_CreateSessionRequest *request, UA_CreateSessionResponse *response);
-
+//void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel,
+//                           const UA_CreateSessionRequest *request, UA_CreateSessionResponse *response);
 /**
  * @brief This Service is used by the Client to submit its SoftwareCertificates
  * to the Server for validation and to specify the identity of the user
@@ -81,13 +233,12 @@ void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel,
  * Client before it issues any other Service request after CreateSession.
  * Failure to do so shall cause the Server to close the Session.
  */
-void Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel,
-                             const UA_ActivateSessionRequest *request, UA_ActivateSessionResponse *response);
-
+//void Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel,
+//                             const UA_ActivateSessionRequest *request, UA_ActivateSessionResponse *response);
 /**
  * @brief This Service is used to terminate a Session.
  */
-void Service_CloseSession(UA_Server *server, const UA_CloseSessionRequest *request, UA_CloseSessionResponse *response);
+//void Service_CloseSession(UA_Server *server, const UA_CloseSessionRequest *request, UA_CloseSessionResponse *response);
 // Service_Cancel
 /** @} */
 
@@ -104,15 +255,13 @@ void Service_CloseSession(UA_Server *server, const UA_CloseSessionRequest *reque
 /**
  * @brief This Service is used to add one or more Nodes into the AddressSpace hierarchy.
  */
-void Service_AddNodes(UA_Server *server, UA_Session *session,
-                      const UA_AddNodesRequest *request, UA_AddNodesResponse *response);
-
+//void Service_AddNodes(UA_Server *server, UA_Session *session,
+//                      const UA_AddNodesRequest *request, UA_AddNodesResponse *response);
 /**
  * @brief This Service is used to add one or more References to one or more Nodes
  */
-void Service_AddReferences(UA_Server *server, UA_Session *session,
-                           const UA_AddReferencesRequest *request, UA_AddReferencesResponse *response);
-
+//void Service_AddReferences(UA_Server *server, UA_Session *session,
+//                           const UA_AddReferencesRequest *request, UA_AddReferencesResponse *response);
 // Service_DeleteNodes
 // Service_DeleteReferences
 /** @} */
@@ -131,22 +280,20 @@ void Service_AddReferences(UA_Server *server, UA_Session *session,
  * The browse can be further limited by the use of a View. This Browse Service
  * also supports a primitive filtering capability.
  */
-void Service_Browse(UA_Server *server, UA_Session *session,
-                    const UA_BrowseRequest *request, UA_BrowseResponse *response);
-
+//void Service_Browse(UA_Server *server, UA_Session *session,
+//                    const UA_BrowseRequest *request, UA_BrowseResponse *response);
 /**
  * @brief This Service is used to translate textual node paths to their respective ids.
  */
-void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session,
-                                           const UA_TranslateBrowsePathsToNodeIdsRequest *request,
-                                           UA_TranslateBrowsePathsToNodeIdsResponse *response);
+//void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session,
+//                                           const UA_TranslateBrowsePathsToNodeIdsRequest *request,
+//                                           UA_TranslateBrowsePathsToNodeIdsResponse *response);
 // Service_BrowseNext
 // Service_TranslateBrowsePathsToNodeIds
 // Service_RegisterNodes
 // Service_UnregisterNodes
 /** @} */
 
-
 /* Part 4: 5.9 Query Service Set */
 /**
  * @name Query Service Set
@@ -182,8 +329,8 @@ void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *sessio
  * values as a composite, to read individual elements or to read ranges of
  * elements of the composite.
  */
-void Service_Read(UA_Server *server, UA_Session *session,
-                  const UA_ReadRequest *request, UA_ReadResponse *response);
+// void Service_Read(UA_Server *server, UA_Session *session,
+//                  const UA_ReadRequest *request, UA_ReadResponse *response);
 // Service_HistoryRead
 /**
  * @brief This Service is used to write one or more Attributes of one or more
@@ -192,8 +339,8 @@ void Service_Read(UA_Server *server, UA_Session *session,
  *  values as a composite, to write individual elements or to write ranges of
  *  elements of the composite.
  */
-void Service_Write(UA_Server *server, UA_Session *session,
-                   const UA_WriteRequest *request, UA_WriteResponse *response);
+// void Service_Write(UA_Server *server, UA_Session *session,
+//                   const UA_WriteRequest *request, UA_WriteResponse *response);
 // Service_HistoryUpdate
 /** @} */
 
@@ -201,7 +348,7 @@ void Service_Write(UA_Server *server, UA_Session *session,
  * @name Method Service Set
  *
  * The Method Service Set defines the means to invoke methods. A method shall be
-   a component of an Object.
+ a component of an Object.
  *
  * @{
  */
@@ -260,6 +407,5 @@ void Service_Write(UA_Server *server, UA_Session *session,
 // Service_DeleteSubscription
 /** @} */
 
-/** @} */ // end of group
-
+/** @} */// end of group
 #endif