ANSI C Based OPC UA Client/Server/PubSub SDK  1.9.1.442
uaprovider_demo_call.c
/*****************************************************************************
*
* Copyright (c) 2006-2020 Unified Automation GmbH. All rights reserved.
*
* Software License Agreement ("SLA") Version 2.7
*
* Unless explicitly acquired and licensed from Licensor under another
* license, the contents of this file are subject to the Software License
* Agreement ("SLA") Version 2.7, or subsequent versions as allowed by the
* SLA, and You may not copy or use this file in either source code or
* executable form, except in compliance with the terms and conditions of
* the SLA.
*
* All software distributed under the SLA is provided strictly on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* AND LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
* LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the SLA for specific
* language governing rights and limitations under the SLA.
*
* The complete license agreement can be found here:
* http://unifiedautomation.com/License/SLA/2.7/
*
* Project: OPC Ansi C DemoProvider for namespace
* 'http://www.unifiedautomation.com/DemoServer/'
*
****************************************************************************/
#include <uaserver_config.h>
#include <opcua_platformdefs.h>
#include <opcua_statuscodes.h>
#include <uabase_p_atomic.h>
#include <uaserver_basenode.h>
#include <uaserver_utilities.h>
#include <uaserver_call.h>
#include "uaprovider_demo_hooks.h"
#include "uaprovider_demo_types_1.h"
#include "uaprovider_demo_boilertype_methods.h"
#include "uaprovider_demo_methods_1.h"
#include "uaprovider_demo_methods_1.h"
#include "uaprovider_demo_identifiers_1.h"
/* //-V::525 */
OPCUA_BEGIN_EXTERN_C
#define OPCUA_ARRAY_FROM_VARIANT(type, a_pVariant, a_pNoOfValues, a_ppValues) \
{ \
OpcUa_Int32 iArrayPos; \
OpcUa_##type *pValue; \
OpcUa_##type *pValues; \
\
OpcUa_ReturnErrorIfArgumentNull(a_pVariant); \
OpcUa_ReturnErrorIfArgumentNull(a_pNoOfValues); \
OpcUa_ReturnErrorIfArgumentNull(a_ppValues); \
\
if (!a_pVariant || a_pVariant->ArrayType != OpcUa_VariantArrayType_Array || a_pVariant->Datatype != OpcUaType_ExtensionObject \
|| (a_pVariant->Value.Array.Length && !a_pVariant->Value.Array.Value.ExtensionObjectArray) ) \
{ \
OpcUa_GotoErrorWithStatus(OpcUa_BadInvalidArgument); \
} \
for (iArrayPos=0; iArrayPos<a_pVariant->Value.Array.Length; iArrayPos++) \
{ \
if (a_pVariant->Value.Array.Value.ExtensionObjectArray[iArrayPos].Encoding != OpcUa_ExtensionObjectEncoding_EncodeableObject \
|| !a_pVariant->Value.Array.Value.ExtensionObjectArray[iArrayPos].Body.EncodeableObject.Type \
|| a_pVariant->Value.Array.Value.ExtensionObjectArray[iArrayPos].Body.EncodeableObject.Type->TypeId != OpcUaId_##type) \
{ \
OpcUa_GotoErrorWithStatus(OpcUa_BadInvalidArgument); \
} \
} \
\
*a_pNoOfValues = 0; \
if (a_pVariant->Value.Array.Length > 0) \
{ \
pValues = (OpcUa_##type*) OpcUa_Alloc(a_pVariant->Value.Array.Length * sizeof(OpcUa_##type)); \
OpcUa_GotoErrorIfAllocFailed(pValues); \
OpcUa_MemSet(pValues, 0, a_pVariant->Value.Array.Length * sizeof(OpcUa_##type)); \
for (iArrayPos=0; iArrayPos<a_pVariant->Value.Array.Length; iArrayPos++) \
{ \
pValue = (OpcUa_##type*) a_pVariant->Value.Array.Value.ExtensionObjectArray[iArrayPos].Body.EncodeableObject.Object; \
pValues[iArrayPos] = *pValue; \
} \
*a_ppValues = pValues; \
*a_pNoOfValues = a_pVariant->Value.Array.Length; \
} \
}
#define OPCUA_ARRAY_TO_VARIANT(type, a_pNoOfValues, a_ppValues, a_pVariant) \
{ \
OpcUa_Int32 iArrayPos; \
OpcUa_##type *pValue; \
\
OpcUa_ReturnErrorIfArgumentNull(a_pNoOfValues); \
OpcUa_ReturnErrorIfArgumentNull(a_ppValues); \
OpcUa_ReturnErrorIfArgumentNull(a_pVariant); \
\
OpcUa_Variant_Initialize(a_pVariant); \
\
if (*a_pNoOfValues > 0) \
{ \
OpcUa_GotoErrorIfArgumentNull(*a_ppValues); \
\
a_pVariant->Value.Array.Value.ExtensionObjectArray = (OpcUa_ExtensionObject*) OpcUa_Alloc(*a_pNoOfValues * sizeof (OpcUa_ExtensionObject)); \
OpcUa_GotoErrorIfAllocFailed(a_pVariant->Value.Array.Value.ExtensionObjectArray); \
a_pVariant->Datatype = OpcUaType_ExtensionObject; \
a_pVariant->ArrayType = OpcUa_VariantArrayType_Array; \
OpcUa_MemSet(a_pVariant->Value.Array.Value.ExtensionObjectArray, 0, *a_pNoOfValues * sizeof (OpcUa_ExtensionObject)); \
a_pVariant->Value.Array.Length = *a_pNoOfValues; \
for (iArrayPos=0; iArrayPos<*a_pNoOfValues; iArrayPos++) \
{ \
uStatus = OpcUa_EncodeableObject_CreateExtension(&OpcUa_##type##_EncodeableType, &a_pVariant->Value.Array.Value.ExtensionObjectArray[iArrayPos], (OpcUa_Void**)&pValue); \
if (OpcUa_IsBad(uStatus)) \
{ \
OpcUa_Variant_Clear(a_pVariant); \
OpcUa_GotoError; \
} \
OpcUa_MemCpy(pValue, sizeof (OpcUa_##type), (*a_ppValues)+iArrayPos, sizeof(OpcUa_##type)); \
} \
OpcUa_Free(*a_ppValues); \
*a_pNoOfValues = 0; \
*a_ppValues = OpcUa_Null; \
} \
else \
{ \
a_pVariant->Datatype = OpcUaType_ExtensionObject; \
a_pVariant->ArrayType = OpcUa_VariantArrayType_Array; \
} \
}
OpcUa_StatusCode UaProvider_Demo_Call_BoilerType_Heat(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
/* Declaration of method input arguments */
OpcUa_Double SetPoint;
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_BoilerType_Heat");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments == 1)
{
OpcUa_Variant *pArgument0;
OpcUa_GotoErrorIfArgumentNull(a_pRequest->InputArguments);
pArgument0 = &a_pRequest->InputArguments[0];
/* Create inputArgument results */
a_pResult->InputArgumentResults = (OpcUa_StatusCode*) OpcUa_Alloc(1 * sizeof(OpcUa_StatusCode));
OpcUa_GotoErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 1 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 1;
/* Check DataTypes of InputArguments */
if (pArgument0->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument0->Datatype != OpcUaType_Double)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
OpcUa_GotoErrorIfBad(uStatus);
/* Variables from InputArguments */
SetPoint = pArgument0->Value.Double;
a_pResult->StatusCode = UaProvider_Demo_BoilerType_Heat(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode, SetPoint);
}
else if (a_pRequest->NoOfInputArguments < 1)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_BoilerType_Fill(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
/* Declaration of method input arguments */
OpcUa_Double SetPoint;
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_BoilerType_Fill");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments == 1)
{
OpcUa_Variant *pArgument0;
OpcUa_GotoErrorIfArgumentNull(a_pRequest->InputArguments);
pArgument0 = &a_pRequest->InputArguments[0];
/* Create inputArgument results */
a_pResult->InputArgumentResults = (OpcUa_StatusCode*) OpcUa_Alloc(1 * sizeof(OpcUa_StatusCode));
OpcUa_GotoErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 1 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 1;
/* Check DataTypes of InputArguments */
if (pArgument0->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument0->Datatype != OpcUaType_Double)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
OpcUa_GotoErrorIfBad(uStatus);
/* Variables from InputArguments */
SetPoint = pArgument0->Value.Double;
a_pResult->StatusCode = UaProvider_Demo_BoilerType_Fill(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode, SetPoint);
}
else if (a_pRequest->NoOfInputArguments < 1)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences2_Method1(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences2_Method1");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_CTT_References_Has3ForwardReferences2_Method1(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences2_Method2(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences2_Method2");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_CTT_References_Has3ForwardReferences2_Method2(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences2_Method3(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences2_Method3");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_CTT_References_Has3ForwardReferences2_Method3(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences5_ReferencedNode3(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences5_ReferencedNode3");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_CTT_References_Has3ForwardReferences5_ReferencedNode3(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_CTT_Methods_MethodIO(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
/* Declaration of method input arguments */
OpcUa_UInt32 Summand1;
OpcUa_UInt32 Summand2;
OpcUa_Int32 i;
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_CTT_Methods_MethodIO");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments == 2)
{
/* Declaration of method output arguments */
OpcUa_UInt32 Sum;
OpcUa_Variant *pArgument0;
OpcUa_Variant *pArgument1;
OpcUa_GotoErrorIfArgumentNull(a_pRequest->InputArguments);
pArgument0 = &a_pRequest->InputArguments[0];
pArgument1 = &a_pRequest->InputArguments[1];
/* Create inputArgument results */
a_pResult->InputArgumentResults = (OpcUa_StatusCode*) OpcUa_Alloc(2 * sizeof(OpcUa_StatusCode));
OpcUa_GotoErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 2 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 2;
/* Check DataTypes of InputArguments */
if (pArgument0->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument0->Datatype != OpcUaType_UInt32)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
if (pArgument1->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument1->Datatype != OpcUaType_UInt32)
{
a_pResult->InputArgumentResults[1] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
OpcUa_GotoErrorIfBad(uStatus);
OpcUa_UInt32_Initialize(&Sum);
/* Variables from InputArguments */
Summand1 = pArgument0->Value.UInt32;
Summand2 = pArgument1->Value.UInt32;
a_pResult->StatusCode = UaProvider_Demo_Demo_CTT_Methods_MethodIO(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode, Summand1, Summand2, &Sum);
if (OpcUa_IsNotBad(a_pResult->StatusCode))
{
/* Fill result */
a_pResult->OutputArguments = (OpcUa_Variant *)OpcUa_Alloc(1 * sizeof(OpcUa_Variant));
OpcUa_GotoErrorIfAllocFailed(a_pResult->OutputArguments);
OpcUa_MemSet(a_pResult->OutputArguments, 0, 1 * sizeof(OpcUa_Variant));
a_pResult->NoOfOutputArguments = 1;
a_pResult->OutputArguments[0].Datatype = OpcUaType_UInt32;
a_pResult->OutputArguments[0].Value.UInt32 = Sum;
}
}
else if (a_pRequest->NoOfInputArguments < 2)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
if (a_pResult->OutputArguments)
{
for (i = 0; i < a_pResult->NoOfOutputArguments; i++)
{
OpcUa_Variant_Clear(&a_pResult->OutputArguments[i]);
}
OpcUa_Free(a_pResult->OutputArguments);
a_pResult->NoOfOutputArguments = 0;
a_pResult->OutputArguments = OpcUa_Null;
}
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_CTT_NodeClasses_Method(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_CTT_NodeClasses_Method");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_CTT_NodeClasses_Method(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_DynamicNodes_CreateDynamicNode(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_DynamicNodes_CreateDynamicNode");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_DynamicNodes_CreateDynamicNode(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_DynamicNodes_DeleteDynamicNode(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_DynamicNodes_DeleteDynamicNode");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_DynamicNodes_DeleteDynamicNode(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_History_StartLogging(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_History_StartLogging");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_History_StartLogging(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_History_StopLogging(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_History_StopLogging");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_History_StopLogging(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_Images_Dynamic_SetAnimationSpeed(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
/* Declaration of method input arguments */
OpcUa_UInt32 AnimationSpeed;
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_Images_Dynamic_SetAnimationSpeed");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments == 1)
{
OpcUa_Variant *pArgument0;
OpcUa_GotoErrorIfArgumentNull(a_pRequest->InputArguments);
pArgument0 = &a_pRequest->InputArguments[0];
/* Create inputArgument results */
a_pResult->InputArgumentResults = (OpcUa_StatusCode*) OpcUa_Alloc(1 * sizeof(OpcUa_StatusCode));
OpcUa_GotoErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 1 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 1;
/* Check DataTypes of InputArguments */
if (pArgument0->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument0->Datatype != OpcUaType_UInt32)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
OpcUa_GotoErrorIfBad(uStatus);
/* Variables from InputArguments */
AnimationSpeed = pArgument0->Value.UInt32;
a_pResult->StatusCode = UaProvider_Demo_Demo_Images_Dynamic_SetAnimationSpeed(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode, AnimationSpeed);
}
else if (a_pRequest->NoOfInputArguments < 1)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_Method_DoSomethingAfter10s(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_Method_DoSomethingAfter10s");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_Method_DoSomethingAfter10s(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_Method_EnumTest(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
/* Declaration of method input arguments */
Demo_HeaterStatus HeaterStatus;
Demo_Priority Priority;
OpcUa_Int32 i;
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_Method_EnumTest");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments == 2)
{
/* Declaration of method output arguments */
Demo_HeaterStatus RetHeaterStatus;
Demo_Priority RetPriority;
OpcUa_Variant *pArgument0;
OpcUa_Variant *pArgument1;
OpcUa_GotoErrorIfArgumentNull(a_pRequest->InputArguments);
pArgument0 = &a_pRequest->InputArguments[0];
pArgument1 = &a_pRequest->InputArguments[1];
/* Create inputArgument results */
a_pResult->InputArgumentResults = (OpcUa_StatusCode*) OpcUa_Alloc(2 * sizeof(OpcUa_StatusCode));
OpcUa_GotoErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 2 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 2;
/* Check DataTypes of InputArguments */
if (pArgument0->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument0->Datatype != OpcUaType_Int32)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
if (pArgument1->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument1->Datatype != OpcUaType_Int32)
{
a_pResult->InputArgumentResults[1] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
OpcUa_GotoErrorIfBad(uStatus);
Demo_HeaterStatus_Initialize(&RetHeaterStatus);
Demo_Priority_Initialize(&RetPriority);
/* Variables from InputArguments */
HeaterStatus = pArgument0->Value.Int32;
Priority = pArgument1->Value.Int32;
a_pResult->StatusCode = UaProvider_Demo_Demo_Method_EnumTest(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode, HeaterStatus, Priority, &RetHeaterStatus, &RetPriority);
if (OpcUa_IsNotBad(a_pResult->StatusCode))
{
/* Fill result */
a_pResult->OutputArguments = (OpcUa_Variant *)OpcUa_Alloc(2 * sizeof(OpcUa_Variant));
OpcUa_GotoErrorIfAllocFailed(a_pResult->OutputArguments);
OpcUa_MemSet(a_pResult->OutputArguments, 0, 2 * sizeof(OpcUa_Variant));
a_pResult->NoOfOutputArguments = 2;
a_pResult->OutputArguments[0].Datatype = OpcUaType_Int32;
a_pResult->OutputArguments[0].Value.Int32 = RetHeaterStatus;
a_pResult->OutputArguments[1].Datatype = OpcUaType_Int32;
a_pResult->OutputArguments[1].Value.Int32 = RetPriority;
}
}
else if (a_pRequest->NoOfInputArguments < 2)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
if (a_pResult->OutputArguments)
{
for (i = 0; i < a_pResult->NoOfOutputArguments; i++)
{
OpcUa_Variant_Clear(&a_pResult->OutputArguments[i]);
}
OpcUa_Free(a_pResult->OutputArguments);
a_pResult->NoOfOutputArguments = 0;
a_pResult->OutputArguments = OpcUa_Null;
}
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_CTT_Methods_MethodNoArgs(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_CTT_Methods_MethodNoArgs");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_CTT_Methods_MethodNoArgs(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_Method_Multiply(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
/* Declaration of method input arguments */
OpcUa_Double a;
OpcUa_Double b;
OpcUa_Int32 i;
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_Method_Multiply");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments == 2)
{
/* Declaration of method output arguments */
OpcUa_Double result;
OpcUa_Variant *pArgument0;
OpcUa_Variant *pArgument1;
OpcUa_GotoErrorIfArgumentNull(a_pRequest->InputArguments);
pArgument0 = &a_pRequest->InputArguments[0];
pArgument1 = &a_pRequest->InputArguments[1];
/* Create inputArgument results */
a_pResult->InputArgumentResults = (OpcUa_StatusCode*) OpcUa_Alloc(2 * sizeof(OpcUa_StatusCode));
OpcUa_GotoErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 2 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 2;
/* Check DataTypes of InputArguments */
if (pArgument0->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument0->Datatype != OpcUaType_Double)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
if (pArgument1->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument1->Datatype != OpcUaType_Double)
{
a_pResult->InputArgumentResults[1] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
OpcUa_GotoErrorIfBad(uStatus);
OpcUa_Double_Initialize(&result);
/* Variables from InputArguments */
a = pArgument0->Value.Double;
b = pArgument1->Value.Double;
a_pResult->StatusCode = UaProvider_Demo_Demo_Method_Multiply(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode, a, b, &result);
if (OpcUa_IsNotBad(a_pResult->StatusCode))
{
/* Fill result */
a_pResult->OutputArguments = (OpcUa_Variant *)OpcUa_Alloc(1 * sizeof(OpcUa_Variant));
OpcUa_GotoErrorIfAllocFailed(a_pResult->OutputArguments);
OpcUa_MemSet(a_pResult->OutputArguments, 0, 1 * sizeof(OpcUa_Variant));
a_pResult->NoOfOutputArguments = 1;
a_pResult->OutputArguments[0].Datatype = OpcUaType_Double;
a_pResult->OutputArguments[0].Value.Double = result;
}
}
else if (a_pRequest->NoOfInputArguments < 2)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
if (a_pResult->OutputArguments)
{
for (i = 0; i < a_pResult->NoOfOutputArguments; i++)
{
OpcUa_Variant_Clear(&a_pResult->OutputArguments[i]);
}
OpcUa_Free(a_pResult->OutputArguments);
a_pResult->NoOfOutputArguments = 0;
a_pResult->OutputArguments = OpcUa_Null;
}
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_Method_VectorAdd(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
/* Declaration of method input arguments */
Demo_Vector v1;
Demo_Vector v2;
OpcUa_Int32 i;
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_Method_VectorAdd");
Demo_Vector_Initialize(&v1);
Demo_Vector_Initialize(&v2);
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments == 2)
{
/* Declaration of method output arguments */
Demo_Vector result;
#ifdef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
Demo_Vector *presult;
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
OpcUa_Variant *pArgument0;
OpcUa_Variant *pArgument1;
OpcUa_GotoErrorIfArgumentNull(a_pRequest->InputArguments);
pArgument0 = &a_pRequest->InputArguments[0];
pArgument1 = &a_pRequest->InputArguments[1];
/* Create inputArgument results */
a_pResult->InputArgumentResults = (OpcUa_StatusCode*) OpcUa_Alloc(2 * sizeof(OpcUa_StatusCode));
OpcUa_GotoErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 2 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 2;
/* Check DataTypes of InputArguments */
if (pArgument0->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument0->Datatype != OpcUaType_ExtensionObject
|| !pArgument0->Value.ExtensionObject
#ifdef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
|| pArgument0->Value.ExtensionObject->Encoding != OpcUa_ExtensionObjectEncoding_EncodeableObject
|| !pArgument0->Value.ExtensionObject->Body.EncodeableObject.Type
|| pArgument0->Value.ExtensionObject->Body.EncodeableObject.Type->TypeId != Demo_VectorId)
#else /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
|| pArgument0->Value.ExtensionObject->Encoding != OpcUa_ExtensionObjectEncoding_Binary
|| pArgument0->Value.ExtensionObject->TypeId.NodeId.NamespaceIndex != g_UaProviderDemo_uNamespaceIndex1
|| pArgument0->Value.ExtensionObject->TypeId.NodeId.Identifier.Numeric != Demo_Vector_Encoding_DefaultBinary)
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
if (pArgument1->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument1->Datatype != OpcUaType_ExtensionObject
|| !pArgument1->Value.ExtensionObject
#ifdef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
|| pArgument1->Value.ExtensionObject->Encoding != OpcUa_ExtensionObjectEncoding_EncodeableObject
|| !pArgument1->Value.ExtensionObject->Body.EncodeableObject.Type
|| pArgument1->Value.ExtensionObject->Body.EncodeableObject.Type->TypeId != Demo_VectorId)
#else /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
|| pArgument1->Value.ExtensionObject->Encoding != OpcUa_ExtensionObjectEncoding_Binary
|| pArgument1->Value.ExtensionObject->TypeId.NodeId.NamespaceIndex != g_UaProviderDemo_uNamespaceIndex1
|| pArgument1->Value.ExtensionObject->TypeId.NodeId.Identifier.Numeric != Demo_Vector_Encoding_DefaultBinary)
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
{
a_pResult->InputArgumentResults[1] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
OpcUa_GotoErrorIfBad(uStatus);
Demo_Vector_Initialize(&result);
/* Variables from InputArguments */
#ifdef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
v1 = *((Demo_Vector*)pArgument0->Value.ExtensionObject->Body.EncodeableObject.Object);
#else /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
&Demo_Vector_EncodeableType,
pArgument0->Value.ExtensionObject,
&v1);
OpcUa_GotoErrorIfBad(uStatus);
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
#ifdef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
v2 = *((Demo_Vector*)pArgument1->Value.ExtensionObject->Body.EncodeableObject.Object);
#else /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
&Demo_Vector_EncodeableType,
pArgument1->Value.ExtensionObject,
&v2);
OpcUa_GotoErrorIfBad(uStatus);
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
a_pResult->StatusCode = UaProvider_Demo_Demo_Method_VectorAdd(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode, &v1, &v2, &result);
if (OpcUa_IsNotBad(a_pResult->StatusCode))
{
/* Fill result */
a_pResult->OutputArguments = (OpcUa_Variant *)OpcUa_Alloc(1 * sizeof(OpcUa_Variant));
OpcUa_GotoErrorIfAllocFailed(a_pResult->OutputArguments);
OpcUa_MemSet(a_pResult->OutputArguments, 0, 1 * sizeof(OpcUa_Variant));
a_pResult->NoOfOutputArguments = 1;
a_pResult->OutputArguments[0].Value.ExtensionObject = (OpcUa_ExtensionObject*)OpcUa_Alloc(sizeof(OpcUa_ExtensionObject));
OpcUa_GotoErrorIfAllocFailed(a_pResult->OutputArguments[0].Value.ExtensionObject);
a_pResult->OutputArguments[0].Datatype = OpcUaType_ExtensionObject;
OpcUa_ExtensionObject_Initialize(a_pResult->OutputArguments[0].Value.ExtensionObject);
#ifdef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
uStatus = OpcUa_EncodeableObject_CreateExtension(&Demo_Vector_EncodeableType, a_pResult->OutputArguments[0].Value.ExtensionObject, (OpcUa_Void**)&presult);
OpcUa_GotoErrorIfBad(uStatus);
*presult = result;
Demo_Vector_Initialize(&result);
#else /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
&Demo_Vector_EncodeableType,
g_UaProviderDemo_uNamespaceIndex1,
(OpcUa_Void*)&result,
a_pResult->OutputArguments[0].Value.ExtensionObject);
OpcUa_GotoErrorIfBad(uStatus);
Demo_Vector_Clear(&result);
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
#ifndef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
Demo_Vector_Clear(&v1);
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
#ifndef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
Demo_Vector_Clear(&v2);
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
}
}
else if (a_pRequest->NoOfInputArguments < 2)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
#ifndef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
Demo_Vector_Clear(&v1);
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
#ifndef UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION
Demo_Vector_Clear(&v2);
#endif /* UAPROVIDER_DEMO_STACK_STRUCTURE_SERIALIZATION */
if (a_pResult->OutputArguments)
{
for (i = 0; i < a_pResult->NoOfOutputArguments; i++)
{
OpcUa_Variant_Clear(&a_pResult->OutputArguments[i]);
}
OpcUa_Free(a_pResult->OutputArguments);
a_pResult->NoOfOutputArguments = 0;
a_pResult->OutputArguments = OpcUa_Null;
}
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_SetSimulationSpeed(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
/* Declaration of method input arguments */
OpcUa_UInt32 speed;
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_SetSimulationSpeed");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments == 1)
{
OpcUa_Variant *pArgument0;
OpcUa_GotoErrorIfArgumentNull(a_pRequest->InputArguments);
pArgument0 = &a_pRequest->InputArguments[0];
/* Create inputArgument results */
a_pResult->InputArgumentResults = (OpcUa_StatusCode*) OpcUa_Alloc(1 * sizeof(OpcUa_StatusCode));
OpcUa_GotoErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 1 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 1;
/* Check DataTypes of InputArguments */
if (pArgument0->ArrayType != OpcUa_VariantArrayType_Scalar
|| pArgument0->Datatype != OpcUaType_UInt32)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
uStatus = OpcUa_BadInvalidArgument;
}
OpcUa_GotoErrorIfBad(uStatus);
/* Variables from InputArguments */
speed = pArgument0->Value.UInt32;
a_pResult->StatusCode = UaProvider_Demo_Demo_SetSimulationSpeed(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode, speed);
}
else if (a_pRequest->NoOfInputArguments < 1)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_StartSimulation(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_StartSimulation");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_StartSimulation(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode UaProvider_Demo_Call_Demo_StopSimulation(UaServer_ProviderCallContext* a_pCallContext, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "UaProvider_Demo_Call_Demo_StopSimulation");
/* Check number of InputArguments */
if (a_pRequest->NoOfInputArguments <= 0)
{
/* Create inputArgument results */
a_pResult->NoOfInputArgumentResults = 0;
a_pResult->StatusCode = UaProvider_Demo_Demo_StopSimulation(a_pCallContext, &a_pRequest->ObjectId, &a_pResult->StatusCode);
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
a_pResult->StatusCode = uStatus;
OpcUa_FinishErrorHandling;
}
/* ****************** End Namespace 1 ********************** */
#if UASERVER_SUPPORT_EVENTS
OpcUa_StatusCode UaProvider_Demo_CallAcknowledge(UaServer_Event *a_pEvent, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
if (a_pRequest->NoOfInputArguments == 2)
{
a_pResult->StatusCode = OpcUa_Good;
#if UASERVER_SUPPORT_CONDITION_BRANCHES
OpcUa_Boolean bCnfedState = OpcUa_False;
OpcUa_Boolean bConditionBranch = OpcUa_False;
UaServer_Event* pTrunk = a_pEvent;
#endif
a_pResult->InputArgumentResults = (OpcUa_StatusCode*)OpcUa_Alloc(2 * sizeof(OpcUa_StatusCode));
OpcUa_ReturnErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 2 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 2;
if (a_pRequest->InputArguments[0].Datatype != OpcUaType_ByteString
|| a_pRequest->InputArguments[0].ArrayType != OpcUa_VariantArrayType_Scalar)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
a_pResult->StatusCode = OpcUa_BadTypeMismatch;
}
if (a_pRequest->InputArguments[1].Datatype != OpcUaType_LocalizedText
|| a_pRequest->InputArguments[1].ArrayType != OpcUa_VariantArrayType_Scalar)
{
a_pResult->InputArgumentResults[1] = OpcUa_BadTypeMismatch;
a_pResult->StatusCode = OpcUa_BadTypeMismatch;
}
/* check EventId */
if (OpcUa_IsGood(a_pResult->StatusCode))
{
if (OpcUa_ByteString_Compare(pEventId, &a_pRequest->InputArguments[0].Value.ByteString) != 0)
{
#if UASERVER_SUPPORT_CONDITION_BRANCHES
if (a_pEvent->pConditionBranchList != OpcUa_Null)
{
/* check if this is the acknowledgment of a branch */
UaServer_Event* pConditionBranch = OpcUa_Null;
OpcUa_List_ResetCurrent(a_pEvent->pConditionBranchList);
pConditionBranch = OpcUa_List_GetCurrentElement(a_pEvent->pConditionBranchList);
while (pConditionBranch != OpcUa_Null)
{
pEventId = UaServer_Events_GetEventId(pConditionBranch);
if (OpcUa_ByteString_Compare(pEventId, &a_pRequest->InputArguments[0].Value.ByteString) == 0)
{
bConditionBranch = OpcUa_True;
a_pEvent = pConditionBranch;
break;
}
pConditionBranch = OpcUa_List_GetNextElement(a_pEvent->pConditionBranchList);
}
}
if (!bConditionBranch)
{
a_pResult->StatusCode = OpcUa_BadEventIdUnknown;
}
#else
a_pResult->StatusCode = OpcUa_BadEventIdUnknown;
#endif
}
}
/* check AckedState */
if (OpcUa_IsGood(a_pResult->StatusCode))
{
OpcUa_Variant *pAckedState = (OpcUa_Variant*)UaBase_Vector_Get(&a_pEvent->EventFields, AcknowledgeableConditionTypeField_AckedState_Id);
#if UASERVER_SUPPORT_CONDITION_BRANCHES
OpcUa_Variant* pCnfedState = (OpcUa_Variant*)UaBase_Vector_Get(&a_pEvent->EventFields, AcknowledgeableConditionTypeField_ConfirmedState_Id);
#endif
a_pResult->StatusCode = OpcUa_BadConditionBranchAlreadyAcked;
if (pAckedState != OpcUa_Null
&& pAckedState->Datatype == OpcUaType_Boolean
&& pAckedState->ArrayType == OpcUa_VariantArrayType_Scalar
&& pAckedState->Value.Boolean == OpcUa_False)
{
a_pResult->StatusCode = OpcUa_Good;
}
#if UASERVER_SUPPORT_CONDITION_BRANCHES
if (pCnfedState != OpcUa_Null
&& pCnfedState->Datatype == OpcUaType_Boolean
&& pCnfedState->ArrayType == OpcUa_VariantArrayType_Scalar
&& pCnfedState->Value.Boolean == OpcUa_True)
{
bCnfedState = OpcUa_True;
}
#endif
}
if (OpcUa_IsGood(a_pResult->StatusCode))
{
OpcUa_NodeId *pSourceNode;
OpcUa_Variant_Initialize(&value);
value.Value.LocalizedText = (OpcUa_LocalizedText*)OpcUa_Alloc(sizeof(OpcUa_LocalizedText));
OpcUa_ReturnErrorIfAllocFailed(value.Value.LocalizedText);
value.Datatype = OpcUaType_LocalizedText;
OpcUa_LocalizedText_Initialize(value.Value.LocalizedText);
OpcUa_String_StrnCat(&value.Value.LocalizedText->Text, OpcUa_String_FromCString("Acknowledged"), OPCUA_STRING_LENDONTCARE);
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, AcknowledgeableConditionTypeField_AckedState, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
value.Datatype = OpcUaType_Boolean;
value.Value.Boolean = OpcUa_True;
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, AcknowledgeableConditionTypeField_AckedState_Id, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
value.Datatype = OpcUaType_DateTime;
value.Value.DateTime = OpcUa_DateTime_UtcNow();
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, AcknowledgeableConditionTypeField_AckedState_TransitionTime, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
value.Value.LocalizedText = (OpcUa_LocalizedText*)OpcUa_Alloc(sizeof(OpcUa_LocalizedText));
OpcUa_ReturnErrorIfAllocFailed(value.Value.LocalizedText);
value.Datatype = OpcUaType_LocalizedText;
OpcUa_LocalizedText_Initialize(value.Value.LocalizedText);
a_pResult->StatusCode = OpcUa_LocalizedText_CopyTo(a_pRequest->InputArguments[1].Value.LocalizedText, value.Value.LocalizedText);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, ConditionTypeField_Comment, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
value.Datatype = OpcUaType_DateTime;
value.Value.DateTime = OpcUa_DateTime_UtcNow();
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, ConditionTypeField_Comment_SourceTimestamp, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
#if UASERVER_SUPPORT_CONDITION_BRANCHES
if (bConditionBranch && bCnfedState)
{
/* if the branch is confirmed and acknowledged, Retain changes to FALSE */
value.Datatype = OpcUaType_Boolean;
value.Value.Boolean = OpcUa_False;
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, ConditionTypeField_Retain, &value);
OpcUa_Variant_Clear(&value);
}
#endif
/* get BaseNode of the SourceNode of the event and extract it's UserData */
pSourceNode = ((OpcUa_Variant*)UaBase_Vector_Get(&a_pEvent->EventFields, BaseEventTypeField_SourceNode))->Value.NodeId;
if (pSourceNode != OpcUa_Null)
{
OpcUa_BaseNode *pBaseNode;
UaServer_GetNode(&g_pDemoProvider->AddressSpace, pSourceNode, &pBaseNode);
if (pBaseNode != OpcUa_Null)
{
}
}
#if UASERVER_SUPPORT_CONDITION_BRANCHES
if (bConditionBranch && bCnfedState)
{
/* if the branch is confirmed and acknowledged we can delete the branch */
OpcUa_List_DeleteElement(pTrunk->pConditionBranchList, a_pEvent);
UaServer_Event_Clear(a_pEvent);
OpcUa_Free(a_pEvent);
a_pEvent = OpcUa_Null;
}
#endif
}
}
else if (a_pRequest->NoOfInputArguments < 2)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
return OpcUa_Good;
}
OpcUa_StatusCode UaProvider_Demo_CallConfirm(UaServer_Event *a_pEvent, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
if (a_pRequest->NoOfInputArguments == 2)
{
#if UASERVER_SUPPORT_CONDITION_BRANCHES
OpcUa_Boolean bConditionBranch = OpcUa_False;
OpcUa_Boolean bAckedState = OpcUa_False;
UaServer_Event *pTrunk = a_pEvent;
#endif
a_pResult->StatusCode = OpcUa_Good;
a_pResult->InputArgumentResults = (OpcUa_StatusCode*)OpcUa_Alloc(2 * sizeof(OpcUa_StatusCode));
OpcUa_ReturnErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 2 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 2;
if (a_pRequest->InputArguments[0].Datatype != OpcUaType_ByteString
|| a_pRequest->InputArguments[0].ArrayType != OpcUa_VariantArrayType_Scalar)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
a_pResult->StatusCode = OpcUa_BadTypeMismatch;
}
if (a_pRequest->InputArguments[1].Datatype != OpcUaType_LocalizedText
|| a_pRequest->InputArguments[1].ArrayType != OpcUa_VariantArrayType_Scalar)
{
a_pResult->InputArgumentResults[1] = OpcUa_BadTypeMismatch;
a_pResult->StatusCode = OpcUa_BadTypeMismatch;
}
/* check EventId */
if (OpcUa_IsGood(a_pResult->StatusCode))
{
if (OpcUa_ByteString_Compare(pEventId, &a_pRequest->InputArguments[0].Value.ByteString) != 0)
{
#if UASERVER_SUPPORT_CONDITION_BRANCHES
if (a_pEvent->pConditionBranchList != OpcUa_Null)
{
/* check if this is the confirm of a branch */
UaServer_Event* pConditionBranch = OpcUa_Null;
OpcUa_List_ResetCurrent(a_pEvent->pConditionBranchList);
pConditionBranch = OpcUa_List_GetCurrentElement(a_pEvent->pConditionBranchList);
while (pConditionBranch != OpcUa_Null)
{
pEventId = UaServer_Events_GetEventId(pConditionBranch);
if (OpcUa_ByteString_Compare(pEventId, &a_pRequest->InputArguments[0].Value.ByteString) == 0)
{
bConditionBranch = OpcUa_True;
a_pEvent = pConditionBranch;
break;
}
pConditionBranch = OpcUa_List_GetNextElement(a_pEvent->pConditionBranchList);
}
}
if (!bConditionBranch)
{
a_pResult->StatusCode = OpcUa_BadEventIdUnknown;
}
#else
a_pResult->StatusCode = OpcUa_BadEventIdUnknown;
#endif
}
}
/* check ConfirmedState */
if (OpcUa_IsGood(a_pResult->StatusCode))
{
OpcUa_Variant *pCnfedState = (OpcUa_Variant*)UaBase_Vector_Get(&a_pEvent->EventFields, AcknowledgeableConditionTypeField_ConfirmedState_Id);
#if UASERVER_SUPPORT_CONDITION_BRANCHES
OpcUa_Variant* pAckedState = (OpcUa_Variant*)UaBase_Vector_Get(&a_pEvent->EventFields, AcknowledgeableConditionTypeField_AckedState_Id);
#endif
a_pResult->StatusCode = OpcUa_BadConditionBranchAlreadyConfirmed;
if (pCnfedState != OpcUa_Null
&& pCnfedState->Datatype == OpcUaType_Boolean
&& pCnfedState->ArrayType == OpcUa_VariantArrayType_Scalar
&& pCnfedState->Value.Boolean == OpcUa_False)
{
a_pResult->StatusCode = OpcUa_Good;
}
#if UASERVER_SUPPORT_CONDITION_BRANCHES
if (pAckedState != OpcUa_Null
&& pAckedState->Datatype == OpcUaType_Boolean
&& pAckedState->ArrayType == OpcUa_VariantArrayType_Scalar
&& pAckedState->Value.Boolean == OpcUa_True)
{
bAckedState = OpcUa_True;
}
#endif
}
if (OpcUa_IsGood(a_pResult->StatusCode))
{
OpcUa_NodeId *pSourceNode;
OpcUa_Variant_Initialize(&value);
value.Value.LocalizedText = (OpcUa_LocalizedText*)OpcUa_Alloc(sizeof(OpcUa_LocalizedText));
OpcUa_ReturnErrorIfAllocFailed(value.Value.LocalizedText);
value.Datatype = OpcUaType_LocalizedText;
OpcUa_LocalizedText_Initialize(value.Value.LocalizedText);
OpcUa_String_StrnCat(&value.Value.LocalizedText->Text, OpcUa_String_FromCString("Confirmed"), OPCUA_STRING_LENDONTCARE);
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, AcknowledgeableConditionTypeField_ConfirmedState, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
value.Datatype = OpcUaType_Boolean;
value.Value.Boolean = OpcUa_True;
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, AcknowledgeableConditionTypeField_ConfirmedState_Id, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
value.Datatype = OpcUaType_DateTime;
value.Value.DateTime = OpcUa_DateTime_UtcNow();
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, AcknowledgeableConditionTypeField_ConfirmedState_TransitionTime, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
value.Value.LocalizedText = (OpcUa_LocalizedText*)OpcUa_Alloc(sizeof(OpcUa_LocalizedText));
OpcUa_ReturnErrorIfAllocFailed(value.Value.LocalizedText);
value.Datatype = OpcUaType_LocalizedText;
OpcUa_LocalizedText_Initialize(value.Value.LocalizedText);
a_pResult->StatusCode = OpcUa_LocalizedText_CopyTo(a_pRequest->InputArguments[1].Value.LocalizedText, value.Value.LocalizedText);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, ConditionTypeField_Comment, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
value.Datatype = OpcUaType_DateTime;
value.Value.DateTime = OpcUa_DateTime_UtcNow();
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, ConditionTypeField_Comment_SourceTimestamp, &value);
OpcUa_Variant_Clear(&value);
OpcUa_ReturnErrorIfBad(a_pResult->StatusCode);
#if UASERVER_SUPPORT_CONDITION_BRANCHES
if (bConditionBranch && bAckedState)
{
/* if the branch is confirmed and acknowledged, Retain changes to FALSE */
value.Datatype = OpcUaType_Boolean;
value.Value.Boolean = OpcUa_False;
a_pResult->StatusCode = UaServer_Events_SetEventField(a_pEvent, ConditionTypeField_Retain, &value);
OpcUa_Variant_Clear(&value);
}
#endif
a_pResult->StatusCode = UaServer_Events_FireEvent(a_pEvent);
/* get BaseNode of the SourceNode of the event and extract it's UserData */
pSourceNode = ((OpcUa_Variant*)UaBase_Vector_Get(&a_pEvent->EventFields, BaseEventTypeField_SourceNode))->Value.NodeId;
if (pSourceNode != OpcUa_Null)
{
OpcUa_BaseNode *pBaseNode;
UaServer_GetNode(&g_pDemoProvider->AddressSpace, pSourceNode, &pBaseNode);
if (pBaseNode != OpcUa_Null)
{
}
}
#if UASERVER_SUPPORT_CONDITION_BRANCHES
if (bConditionBranch && bAckedState)
{
/* if the branch is confirmed and acknowledged we can delete the branch */
OpcUa_List_DeleteElement(pTrunk->pConditionBranchList, a_pEvent);
UaServer_Event_Clear(a_pEvent);
OpcUa_Free(a_pEvent);
a_pEvent = OpcUa_Null;
}
#endif
}
}
else if (a_pRequest->NoOfInputArguments < 2)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
return OpcUa_Good;
}
OpcUa_StatusCode UaProvider_Demo_CallAddComment(UaServer_Event *a_pEvent, OpcUa_CallMethodRequest* a_pRequest, OpcUa_CallMethodResult* a_pResult)
{
if (a_pRequest->NoOfInputArguments == 2)
{
a_pResult->StatusCode = OpcUa_Good;
a_pResult->InputArgumentResults = (OpcUa_StatusCode*)OpcUa_Alloc(2 * sizeof(OpcUa_StatusCode));
OpcUa_ReturnErrorIfAllocFailed(a_pResult->InputArgumentResults);
OpcUa_MemSet(a_pResult->InputArgumentResults, 0, 2 * sizeof(OpcUa_StatusCode));
a_pResult->NoOfInputArgumentResults = 2;
if (a_pRequest->InputArguments[0].Datatype != OpcUaType_ByteString
|| a_pRequest->InputArguments[0].ArrayType != OpcUa_VariantArrayType_Scalar)
{
a_pResult->InputArgumentResults[0] = OpcUa_BadTypeMismatch;
a_pResult->StatusCode = OpcUa_BadTypeMismatch;
}
if (a_pRequest->InputArguments[1].Datatype != OpcUaType_LocalizedText
|| a_pRequest->InputArguments[1].ArrayType != OpcUa_VariantArrayType_Scalar)
{
a_pResult->InputArgumentResults[1] = OpcUa_BadTypeMismatch;
a_pResult->StatusCode = OpcUa_BadTypeMismatch;
}
/* check EventId */
if (OpcUa_IsGood(a_pResult->StatusCode))
{
if (OpcUa_ByteString_Compare(pEventId, &a_pRequest->InputArguments[0].Value.ByteString) != 0)
{
a_pResult->StatusCode = OpcUa_BadEventIdUnknown;
}
}
if (OpcUa_IsGood(a_pResult->StatusCode))
{
OpcUa_NodeId *pSourceNode;
OpcUa_Variant_Initialize(&value);
value.Value.LocalizedText = (OpcUa_LocalizedText*)OpcUa_Alloc(sizeof(OpcUa_LocalizedText));
OpcUa_ReturnErrorIfAllocFailed(value.Value.LocalizedText);
value.Datatype = OpcUaType_LocalizedText;
OpcUa_LocalizedText_Initialize(value.Value.LocalizedText);
OpcUa_LocalizedText_CopyTo(a_pRequest->InputArguments[1].Value.LocalizedText, value.Value.LocalizedText);
UaServer_Events_SetEventField(a_pEvent, ConditionTypeField_Comment, &value);
OpcUa_Variant_Clear(&value);
value.Datatype = OpcUaType_DateTime;
value.Value.DateTime = OpcUa_DateTime_UtcNow();
UaServer_Events_SetEventField(a_pEvent, ConditionTypeField_Comment_SourceTimestamp, &value);
OpcUa_Variant_Clear(&value);
a_pResult->StatusCode = UaServer_Events_FireEvent(a_pEvent);
/* get BaseNode of the SourceNode of the event and extract it's UserData */
pSourceNode = ((OpcUa_Variant*)UaBase_Vector_Get(&a_pEvent->EventFields, BaseEventTypeField_SourceNode))->Value.NodeId;
if (pSourceNode != OpcUa_Null)
{
OpcUa_BaseNode *pBaseNode;
UaServer_GetNode(&g_pDemoProvider->AddressSpace, pSourceNode, &pBaseNode);
if (pBaseNode != OpcUa_Null)
{
}
}
}
}
else if (a_pRequest->NoOfInputArguments < 2)
{
a_pResult->StatusCode = OpcUa_BadArgumentsMissing;
}
else
{
a_pResult->StatusCode = OpcUa_BadTooManyArguments;
}
return OpcUa_Good;
}
#endif
IFMETHODIMP(UaProvider_Demo_CallAsync)(UaServer_ProviderCallContext* a_pCallContext)
{
OpcUa_CallRequest *pRequest;
OpcUa_CallResponse *pResponse;
OpcUa_Int32 i;
OpcUa_NodeId *pMethodId = OpcUa_Null;
OpcUa_NodeId *pObjectId = OpcUa_Null;
OpcUa_BaseNode *pMethodNode = OpcUa_Null;
OpcUa_BaseNode *pObjectNode = OpcUa_Null;
OpcUa_ReturnErrorIfArgumentNull(a_pCallContext);
pRequest = a_pCallContext->pRequest;
pResponse = a_pCallContext->pResponse;
/* we will send exactly one callback */
for (i = 0; i < pRequest->NoOfMethodsToCall; i++)
{
if (pRequest->MethodsToCall[i].MethodId.NamespaceIndex == g_UaProviderDemo_uNamespaceIndex1)
{
pMethodId = &pRequest->MethodsToCall[i].MethodId;
pMethodNode = UaServer_GetNodeById(&pRequest->MethodsToCall[i].MethodId);
pObjectId = &pRequest->MethodsToCall[i].ObjectId;
pObjectNode = UaServer_GetNodeById(&pRequest->MethodsToCall[i].ObjectId);
if (pMethodNode == OpcUa_Null || pObjectNode == OpcUa_Null)
{
pResponse->Results[i].StatusCode = OpcUa_BadNodeIdUnknown;
continue;
}
#if UASERVER_SUPPORT_AUTHORIZATION
/* check if current user is allowed to read */
if (OpcUa_Method_GetExecutable(pMethodNode) == OpcUa_False ||
UaServer_UserMgt_IsExecutable(OpcUa_BaseNode_GetINode(pMethodNode), a_pCallContext->pSession->UserIdentityData) == OpcUa_False ||
UaServer_UserMgt_IsExecutable(OpcUa_BaseNode_GetINode(pObjectNode), a_pCallContext->pSession->UserIdentityData) == OpcUa_False)
{
pResponse->Results[i].StatusCode = OpcUa_BadUserAccessDenied;
continue;
}
#else
if (OpcUa_Method_GetExecutable(pMethodNode) == OpcUa_False ||
OpcUa_Method_GetUserExecutable(pMethodNode) == OpcUa_False)
{
pResponse->Results[i].StatusCode = OpcUa_BadUserAccessDenied;
continue;
}
#endif
{
switch (pMethodId->Identifier.Numeric)
{
case Demo_BoilerType_HeatId:
UaProvider_Demo_Call_BoilerType_Heat(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
break;
case Demo_BoilerType_FillId:
UaProvider_Demo_Call_BoilerType_Fill(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
break;
case Demo_Objects_Demo_CTT_References_Has3ForwardReferences2_Method1:
UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences2_Method1(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
break;
case Demo_Objects_Demo_CTT_References_Has3ForwardReferences2_Method2:
UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences2_Method2(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
break;
case Demo_Objects_Demo_CTT_References_Has3ForwardReferences2_Method3:
UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences2_Method3(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
break;
case Demo_Objects_Demo_CTT_References_Has3ForwardReferences5_ReferencedNode3:
UaProvider_Demo_Call_Demo_CTT_References_Has3ForwardReferences5_ReferencedNode3(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
break;
default:
break;
}
}
{
if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_BoilerDemo_Boiler1_Heat) == 0)
{
UaProvider_Demo_Call_BoilerType_Heat(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_BoilerDemo_Boiler1_Fill) == 0)
{
UaProvider_Demo_Call_BoilerType_Fill(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_CTT_Methods_MethodIO) == 0)
{
UaProvider_Demo_Call_Demo_CTT_Methods_MethodIO(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_CTT_NodeClasses_Method) == 0)
{
UaProvider_Demo_Call_Demo_CTT_NodeClasses_Method(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_DynamicNodes_CreateDynamicNode) == 0)
{
UaProvider_Demo_Call_Demo_DynamicNodes_CreateDynamicNode(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_DynamicNodes_DeleteDynamicNode) == 0)
{
UaProvider_Demo_Call_Demo_DynamicNodes_DeleteDynamicNode(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_History_StartLogging) == 0)
{
UaProvider_Demo_Call_Demo_History_StartLogging(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_History_StopLogging) == 0)
{
UaProvider_Demo_Call_Demo_History_StopLogging(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_Images_Dynamic_SetAnimationSpeed) == 0)
{
UaProvider_Demo_Call_Demo_Images_Dynamic_SetAnimationSpeed(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_Method_DoSomethingAfter10s) == 0)
{
UaProvider_Demo_Call_Demo_Method_DoSomethingAfter10s(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_Method_EnumTest) == 0)
{
UaProvider_Demo_Call_Demo_Method_EnumTest(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_CTT_Methods_MethodNoArgs) == 0)
{
UaProvider_Demo_Call_Demo_CTT_Methods_MethodNoArgs(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_Method_Multiply) == 0)
{
UaProvider_Demo_Call_Demo_Method_Multiply(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_Method_VectorAdd) == 0)
{
UaProvider_Demo_Call_Demo_Method_VectorAdd(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_SetSimulationSpeed) == 0)
{
UaProvider_Demo_Call_Demo_SetSimulationSpeed(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_StartSimulation) == 0)
{
UaProvider_Demo_Call_Demo_StartSimulation(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
else if (OpcUa_StrCmpA(OpcUa_String_GetRawString(&pMethodId->Identifier.String), Demo_Objects_Demo_StopSimulation) == 0)
{
UaProvider_Demo_Call_Demo_StopSimulation(a_pCallContext, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
}
}
#if UASERVER_SUPPORT_EVENTS
else if (pRequest->MethodsToCall[i].ObjectId.NamespaceIndex == g_UaProviderDemo_uNamespaceIndex1
&& pRequest->MethodsToCall[i].MethodId.NamespaceIndex == 0
{
switch (pRequest->MethodsToCall[i].MethodId.Identifier.Numeric)
{
case OpcUaId_AcknowledgeableConditionType_Acknowledge:
{
UaServer_Event *pEvent = UaServer_Events_GetConditionByNodeId(g_UaProviderDemo_uNamespaceIndex1,
&pRequest->MethodsToCall[i].ObjectId);
if (pEvent != OpcUa_Null)
{
UaProvider_Demo_CallAcknowledge(pEvent, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
break;
}
case OpcUaId_AcknowledgeableConditionType_Confirm:
{
UaServer_Event *pEvent = UaServer_Events_GetConditionByNodeId(g_UaProviderDemo_uNamespaceIndex1,
&pRequest->MethodsToCall[i].ObjectId);
if (pEvent != OpcUa_Null)
{
UaProvider_Demo_CallConfirm(pEvent, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
break;
}
case OpcUaId_ConditionType_AddComment:
{
UaServer_Event *pEvent = UaServer_Events_GetConditionByNodeId(g_UaProviderDemo_uNamespaceIndex1,
&pRequest->MethodsToCall[i].ObjectId);
if (pEvent != OpcUa_Null)
{
UaProvider_Demo_CallAddComment(pEvent, &pRequest->MethodsToCall[i], &pResponse->Results[i]);
}
break;
}
default:
break;
}
}
#endif
}
/* send callback */
UaServer_CallComplete(a_pCallContext);
return OpcUa_Good;
}
OPCUA_END_EXTERN_C