#include <platform/memory.h>
#include <uaserver/addressspace/addressspace.h>
#include <uaserver/addressspace/management.h>
#include <uaserver/provider/provider.h>
#include <trace/trace.h>
#include <timer/timer.h>
#include <uabase/accesslevel.h>
#include <uabase/valuerank.h>
#include <uabase/qualifiedname.h>
#include <uabase/identifiers.h>
#include <uabase/structure/nodeclass.h>
#include <uaserver/addressspace/variable.h>
#include <uaserver/addressspace/object.h>
#include <uaserver/valuestore/memorystore.h>
#include <uaserver/valuestore/valuestore.h>
#if UA_AUTHENTICATION_BACKEND == UA_AUTHENTICATION_BACKEND_INTERNAL
#include <uaserver/session/authentication/internal/internal_authentication.h>
#endif
#include "provider_minimal.h"
static uint32_t g_timer_id;
#ifdef HAVE_TRACE
static unsigned int g_session_cnt = 0;
static unsigned int g_session_max = 0;
static unsigned int g_securechannel_cnt = 0;
static unsigned int g_securechannel_max = 0;
#endif
static int provider_minimal_sample_data(uint64_t elapsed, void *data)
{
static uint32_t var1 = 1000;
static uint32_t var2 = 5000;
UA_UNUSED(elapsed);
UA_UNUSED(data);
var1++;
var2 += 2;
return 0;
}
static void provider_minimal_cleanup(void)
{
return;
}
static int provider_minimal_create_nodes(uint16_t nsidx)
{
int ret;
if (ret != 0) return ret;
if (ret != 0) return ret;
if (ret != 0) return ret;
if (ret != 0) return ret;
return 0;
}
static int provider_minimal_users(void)
{
int ret = 0;
#if UA_AUTHORIZATION_BACKEND == UA_AUTHORIZATION_BACKEND_INODE
if (ret != 0) return ret;
if (ret != 0) return ret;
if (ret != 0) return ret;
if (ret != 0) return ret;
if (ret != 0) return ret;
#endif
#if UA_AUTHENTICATION_BACKEND == UA_AUTHENTICATION_BACKEND_INTERNAL
if (ret != 0) return ret;
if (ret != 0) return ret;
if (ret != 0) return ret;
if (ret != 0) return ret;
#endif
return ret;
}
static void provider_minimal_session_hook(
enum uasession_event_type
type, uint32_t channel_id,
struct uasession_session *session)
{
#ifdef HAVE_TRACE
switch (type) {
case UASESSION_EVENT_OPENSECURECHANNEL:
g_securechannel_cnt++;
if (g_securechannel_cnt > g_securechannel_max) g_securechannel_max = g_securechannel_cnt;
break;
case UASESSION_EVENT_RENEWSECURECHANNEL:
if (session)
else
break;
case UASESSION_EVENT_CLOSESECURECHANNEL:
g_securechannel_cnt--;
if (session)
else
break;
case UASESSION_EVENT_CONNECTIONLOST:
if (session)
else
break;
case UASESSION_EVENT_CREATESESSION:
g_session_cnt++;
if (g_session_cnt > g_session_max) g_session_max = g_session_cnt;
break;
case UASESSION_EVENT_ACTIVATESESSION:
break;
case UASESSION_EVENT_CLOSESESSION:
g_session_cnt--;
break;
}
#else
UA_UNUSED(type);
UA_UNUSED(channel_id);
UA_UNUSED(session);
#endif
}
{
uint16_t uaprovider_minimal_nsidx;
int ret;
config.max_variables = 3;
config.max_references = 5;
config.max_strings = 3;
config.nsidx = UA_NSIDX_INVALID;
"http://www.unifiedautomation.com/MinimalServer/",
&config,
if (ret < 0) return ret;
uaprovider_minimal_nsidx = (uint16_t) ret;
if (ret < 0) return ret;
if (ret != 0) return ret;
ret = provider_minimal_create_nodes(uaprovider_minimal_nsidx);
if (ret < 0) return ret;
ret = provider_minimal_users();
if (ret < 0) return ret;
}
ctx->
cleanup = provider_minimal_cleanup;
&g_timer_id,
100,
provider_minimal_sample_data,
NULL,
if (ret != 0) {
}
return ret;
}