Go to the documentation of this file.00001 #ifndef UA_SERVER_INTERNAL_H_
00002 #define UA_SERVER_INTERNAL_H_
00003
00004 #include "ua_util.h"
00005 #include "ua_server.h"
00006 #include "ua_session_manager.h"
00007 #include "ua_securechannel_manager.h"
00008 #include "ua_nodestore.h"
00009
00010 #define PRODUCT_URI "http://open62541.org"
00011 #define ANONYMOUS_POLICY "open62541-anonymous-policy"
00012 #define USERNAME_POLICY "open62541-username-policy"
00013
00016 typedef struct UA_ExternalNamespace {
00017 UA_UInt16 index;
00018 UA_String url;
00019 UA_ExternalNodeStore externalNodeStore;
00020 } UA_ExternalNamespace;
00021
00022
00023 struct TimedWork;
00024
00025 struct DelayedWork;
00026
00027 struct UA_Server {
00028
00029 UA_ServerConfig config;
00030 UA_Logger logger;
00031 UA_UInt32 random_seed;
00032
00033
00034 UA_DateTime startTime;
00035 UA_DateTime buildDate;
00036 UA_ApplicationDescription description;
00037 UA_Int32 endpointDescriptionsSize;
00038 UA_EndpointDescription *endpointDescriptions;
00039
00040
00041 size_t networkLayersSize;
00042 UA_ServerNetworkLayer *networkLayers;
00043
00044
00045 UA_ByteString serverCertificate;
00046 UA_SecureChannelManager secureChannelManager;
00047 UA_SessionManager sessionManager;
00048
00049
00050 UA_NodeStore *nodestore;
00051 size_t namespacesSize;
00052 UA_String *namespaces;
00053 size_t externalNamespacesSize;
00054 UA_ExternalNamespace *externalNamespaces;
00055
00056
00057 LIST_HEAD(TimedWorkList, TimedWork) timedWork;
00058
00059 #ifdef UA_MULTITHREADING
00060 UA_Boolean *running;
00061 UA_UInt16 nThreads;
00062 UA_UInt32 **workerCounters;
00063 struct DelayedWork *delayedWork;
00064
00065
00066 struct cds_wfcq_head dispatchQueue_head;
00067 struct cds_wfcq_tail dispatchQueue_tail;
00068 pthread_cond_t dispatchQueue_condition;
00069 #endif
00070 };
00071
00072 void UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection, UA_ByteString *msg);
00073
00074 UA_AddNodesResult UA_Server_addNodeWithSession(UA_Server *server, UA_Session *session, UA_Node *node,
00075 const UA_ExpandedNodeId parentNodeId,
00076 const UA_NodeId referenceTypeId);
00077
00078 UA_AddNodesResult UA_Server_addNode(UA_Server *server, UA_Node *node, const UA_ExpandedNodeId parentNodeId,
00079 const UA_NodeId referenceTypeId);
00080
00081 UA_StatusCode UA_Server_addReferenceWithSession(UA_Server *server, UA_Session *session, const UA_AddReferencesItem *item);
00082
00083 void UA_Server_deleteTimedWork(UA_Server *server);
00084
00085 #define ADDREFERENCE(NODEID, REFTYPE_NODEID, TARGET_EXPNODEID) do { \
00086 UA_AddReferencesItem item; \
00087 UA_AddReferencesItem_init(&item); \
00088 item.sourceNodeId = NODEID; \
00089 item.referenceTypeId = REFTYPE_NODEID; \
00090 item.isForward = UA_TRUE; \
00091 item.targetNodeId = TARGET_EXPNODEID; \
00092 UA_Server_addReference(server, &item); \
00093 } while(0)
00094
00095 #endif