00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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
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
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
00318
00319
00322 #endif
00323
00324 #ifdef __cplusplus
00325 }
00326 #endif
00327
00328 #endif