/home/travis/build/open62541/open62541/include/ua_server.h
Go to the documentation of this file.
00001  /*
00002  * Copyright (C) 2014 the contributors as stated in the AUTHORS file
00003  *
00004  * This file is part of open62541. open62541 is free software: you can
00005  * redistribute it and/or modify it under the terms of the GNU Lesser General
00006  * Public License, version 3 (as published by the Free Software Foundation) with
00007  * a static linking exception as stated in the LICENSE file provided with
00008  * open62541.
00009  *
00010  * open62541 is distributed in the hope that it will be useful, but WITHOUT ANY
00011  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
00012  * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
00013  * details.
00014  */
00015 
00016 #ifndef UA_SERVER_H_
00017 #define UA_SERVER_H_
00018 
00019 #ifdef __cplusplus
00020 extern "C" {
00021 #endif
00022 
00023 #include "ua_types.h"
00024 #include "ua_types_generated.h"
00025 #include "ua_nodeids.h"
00026 #include "ua_connection.h"
00027 #include "ua_log.h"
00028 
00035 typedef struct UA_ServerConfig {
00036     UA_Boolean  Login_enableAnonymous;
00037 
00038     UA_Boolean  Login_enableUsernamePassword;
00039     char**      Login_usernames;
00040     char**      Login_passwords;
00041     UA_UInt32   Login_loginsCount;
00042 
00043     char*       Application_applicationURI;
00044     char*       Application_applicationName;
00045 } UA_ServerConfig;
00046 
00047 extern UA_EXPORT const UA_ServerConfig UA_ServerConfig_standard;
00048 
00049 struct UA_Server;
00050 typedef struct UA_Server UA_Server;
00051 
00052 UA_Server UA_EXPORT * UA_Server_new(UA_ServerConfig config);
00053 void UA_EXPORT UA_Server_setServerCertificate(UA_Server *server, UA_ByteString certificate);
00054 void UA_EXPORT UA_Server_delete(UA_Server *server);
00055 
00057 void UA_EXPORT UA_Server_setLogger(UA_Server *server, UA_Logger logger);
00058 UA_Logger UA_EXPORT * UA_Server_getLogger(UA_Server *server);
00059 
00074 UA_StatusCode UA_EXPORT UA_Server_run(UA_Server *server, UA_UInt16 nThreads, UA_Boolean *running);
00075 
00087 typedef struct {
00088     void *handle;
00089     UA_StatusCode (*read)(void *handle, UA_Boolean sourceTimeStamp, UA_DataValue *value);
00090     void (*release)(void *handle, UA_DataValue *value);
00091     UA_StatusCode (*write)(void *handle, const UA_Variant *data);
00092 } UA_DataSource;
00093 
00095 UA_UInt16 UA_EXPORT UA_Server_addNamespace(UA_Server *server, const char* name);
00096 
00098 UA_StatusCode UA_EXPORT UA_Server_addReference(UA_Server *server, const UA_AddReferencesItem *item);
00099 
00100 UA_StatusCode UA_EXPORT
00101 UA_Server_addVariableNode(UA_Server *server, UA_Variant *value, const UA_QualifiedName browseName, 
00102                           UA_NodeId nodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId);
00103 
00104 UA_StatusCode UA_EXPORT
00105 UA_Server_addObjectNode(UA_Server *server, const UA_QualifiedName browseName,
00106                           UA_NodeId nodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_NodeId typeDefinition);
00107 
00108 UA_StatusCode UA_EXPORT
00109 UA_Server_addDataSourceVariableNode(UA_Server *server, UA_DataSource dataSource,
00110                                     const UA_QualifiedName browseName, UA_NodeId nodeId,
00111                                     const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId);
00112 
00115 typedef struct UA_WorkItem {
00116     enum {
00117         UA_WORKITEMTYPE_NOTHING,
00118         UA_WORKITEMTYPE_CLOSECONNECTION,
00119         UA_WORKITEMTYPE_BINARYMESSAGE,
00120         UA_WORKITEMTYPE_METHODCALL,
00121         UA_WORKITEMTYPE_DELAYEDMETHODCALL,
00122     } type;
00123     union {
00124         UA_Connection *closeConnection;
00125         struct {
00126             UA_Connection *connection;
00127             UA_ByteString message;
00128         } binaryMessage;
00129         struct {
00130             void *data;
00131             void (*method)(UA_Server *server, void *data);
00132         } methodCall;
00133     } work;
00134 } UA_WorkItem;
00135 
00152 UA_StatusCode UA_EXPORT
00153 UA_Server_addTimedWorkItem(UA_Server *server, const UA_WorkItem *work,
00154                            UA_DateTime executionTime, UA_Guid *resultWorkGuid);
00155 
00172 UA_StatusCode UA_EXPORT
00173 UA_Server_addRepeatedWorkItem(UA_Server *server, const UA_WorkItem *work,
00174                               UA_UInt32 interval, UA_Guid *resultWorkGuid);
00175 
00177 /* UA_Boolean UA_EXPORT UA_Server_removeWorkItem(UA_Server *server, UA_Guid workId); */
00178 
00186 typedef struct {
00187     void *nlHandle;
00188 
00194     UA_StatusCode (*start)(void *nlHandle, UA_Logger *logger);
00195     
00208     UA_Int32 (*getWork)(void *nlhandle, UA_WorkItem **workItems, UA_UInt16 timeout);
00209 
00219     UA_Int32 (*stop)(void *nlhandle, UA_WorkItem **workItems);
00220 
00222     void (*free)(void *nlhandle);
00223 
00228     UA_String* discoveryUrl;
00229 } UA_ServerNetworkLayer;
00230 
00234 void UA_EXPORT UA_ServerNetworkLayer_init(UA_ServerNetworkLayer *nl);
00235 
00241 void UA_EXPORT UA_Server_addNetworkLayer(UA_Server *server, UA_ServerNetworkLayer networkLayer);
00242 
00245 #ifndef __cplusplus /* the external nodestore does not work with c++ so far */
00246 
00266 typedef UA_Int32 (*UA_ExternalNodeStore_addNodes)
00267 (void *ensHandle, const UA_RequestHeader *requestHeader, UA_AddNodesItem *nodesToAdd, UA_UInt32 *indices,
00268  UA_UInt32 indicesSize, UA_AddNodesResult* addNodesResults, UA_DiagnosticInfo *diagnosticInfos);
00269 
00270 typedef UA_Int32 (*UA_ExternalNodeStore_addReferences)
00271 (void *ensHandle, const UA_RequestHeader *requestHeader, UA_AddReferencesItem* referencesToAdd,
00272  UA_UInt32 *indices,UA_UInt32 indicesSize, UA_StatusCode *addReferencesResults,
00273  UA_DiagnosticInfo *diagnosticInfos);
00274 
00275 typedef UA_Int32 (*UA_ExternalNodeStore_deleteNodes)
00276 (void *ensHandle, const UA_RequestHeader *requestHeader, UA_DeleteNodesItem *nodesToDelete, UA_UInt32 *indices,
00277  UA_UInt32 indicesSize, UA_StatusCode *deleteNodesResults, UA_DiagnosticInfo *diagnosticInfos);
00278 
00279 typedef UA_Int32 (*UA_ExternalNodeStore_deleteReferences)
00280 (void *ensHandle, const UA_RequestHeader *requestHeader, UA_DeleteReferencesItem *referenceToDelete,
00281  UA_UInt32 *indices, UA_UInt32 indicesSize, UA_StatusCode deleteReferencesresults,
00282  UA_DiagnosticInfo *diagnosticInfos);
00283 
00284 typedef UA_Int32 (*UA_ExternalNodeStore_readNodes)
00285 (void *ensHandle, const UA_RequestHeader *requestHeader, UA_ReadValueId *readValueIds, UA_UInt32 *indices,
00286  UA_UInt32 indicesSize,UA_DataValue *readNodesResults, UA_Boolean timeStampToReturn,
00287  UA_DiagnosticInfo *diagnosticInfos);
00288 
00289 typedef UA_Int32 (*UA_ExternalNodeStore_writeNodes)
00290 (void *ensHandle, const UA_RequestHeader *requestHeader, UA_WriteValue *writeValues, UA_UInt32 *indices,
00291  UA_UInt32 indicesSize, UA_StatusCode *writeNodesResults, UA_DiagnosticInfo *diagnosticInfo);
00292 
00293 typedef UA_Int32 (*UA_ExternalNodeStore_browseNodes)
00294 (void *ensHandle, const UA_RequestHeader *requestHeader, UA_BrowseDescription *browseDescriptions,
00295  UA_UInt32 *indices, UA_UInt32 indicesSize, UA_UInt32 requestedMaxReferencesPerNode,
00296  UA_BrowseResult *browseResults, UA_DiagnosticInfo *diagnosticInfos);
00297 
00298 typedef UA_Int32 (*UA_ExternalNodeStore_translateBrowsePathsToNodeIds)
00299 (void *ensHandle, const UA_RequestHeader *requestHeader, UA_BrowsePath *browsePath,
00300  UA_UInt32 *indices, UA_UInt32 indicesSize, UA_BrowsePathResult *browsePathResults, UA_DiagnosticInfo *diagnosticInfos);
00301 
00302 typedef UA_Int32 (*UA_ExternalNodeStore_delete)(void *ensHandle);
00303 
00304 typedef struct UA_ExternalNodeStore {
00305     void *ensHandle;
00306     UA_ExternalNodeStore_addNodes addNodes;
00307     UA_ExternalNodeStore_deleteNodes deleteNodes;
00308     UA_ExternalNodeStore_writeNodes writeNodes;
00309     UA_ExternalNodeStore_readNodes readNodes;
00310     UA_ExternalNodeStore_browseNodes browseNodes;
00311     UA_ExternalNodeStore_translateBrowsePathsToNodeIds translateBrowsePathsToNodeIds;
00312     UA_ExternalNodeStore_addReferences addReferences;
00313     UA_ExternalNodeStore_deleteReferences deleteReferences;
00314     UA_ExternalNodeStore_delete destroy;
00315 } UA_ExternalNodeStore;
00316 
00317 /* UA_StatusCode UA_EXPORT */
00318 /* UA_Server_addExternalNamespace(UA_Server *server, UA_UInt16 namespaceIndex, const UA_String *url, UA_ExternalNodeStore *nodeStore); */
00319 
00322 #endif /* external nodestore */
00323 
00324 #ifdef __cplusplus
00325 } // extern "C"
00326 #endif
00327 
00328 #endif /* UA_SERVER_H_ */