/** * Initialize all ressources needed for tracing. */ OpcUa_StatusCode OPCUA_DLLCALL OpcUa_Trace_Initialize(OpcUa_Void) { OpcUa_StatusCode uStatus = OpcUa_Good; #if OPCUA_USE_SYNCHRONISATION uStatus = OPCUA_P_MUTEX_CREATE(&OpcUa_Trace_s_pLock); OpcUa_ReturnErrorIfBad(uStatus); #endif /* OPCUA_USE_SYNCHRONISATION */ uStatus = OPCUA_P_TRACE_INITIALIZE(); return uStatus; }
/*============================================================================ * Create *===========================================================================*/ OpcUa_StatusCode OpcUa_Thread_Create( OpcUa_Thread* a_pThread, OpcUa_PfnThreadMain* a_pThreadMain, OpcUa_Void* a_pThreadArgument) { OpcUa_StatusCode uStatus = OpcUa_Good; OpcUa_ThreadInternal* pThread = OpcUa_Null; OpcUa_DeclareErrorTraceModule(OpcUa_Module_Thread); OpcUa_ReturnErrorIfArgumentNull(a_pThread); OpcUa_ReturnErrorIfArgumentNull(a_pThreadMain); pThread = (OpcUa_ThreadInternal*)OpcUa_Alloc(sizeof(OpcUa_ThreadInternal)); OpcUa_ReturnErrorIfAllocFailed(pThread); OpcUa_MemSet(pThread, 0, sizeof(OpcUa_ThreadInternal)); pThread->IsRunning = OpcUa_False; pThread->ThreadMain = a_pThreadMain; pThread->ThreadData = a_pThreadArgument; pThread->Mutex = OpcUa_Null; pThread->ShutdownEvent = OpcUa_Null; uStatus = OpcUa_P_Thread_Create(&(pThread->RawThread)); OpcUa_GotoErrorIfBad(uStatus); uStatus = OPCUA_P_SEMAPHORE_CREATE( &(pThread->ShutdownEvent), 1, /* the initial value is 1 (signalled, 1 free resource) */ 1); /* the maximum value is 1 */ OpcUa_GotoErrorIfBad(uStatus); uStatus = OPCUA_P_MUTEX_CREATE(&(pThread->Mutex)); OpcUa_GotoErrorIfBad(uStatus); *a_pThread = pThread; return OpcUa_Good; Error: return uStatus; }
/** @brief Initializes all internal variables of the list. Do not call this function twice. Memory leaks will be created. @return OpcUa_BadInvalidArgument if a_pList is null @return OpcUa_Good on success @param a_pList [in] Location of the list */ OpcUa_StatusCode OpcUa_List_Initialize(OpcUa_List* a_pList) { OpcUa_StatusCode uStatus = OpcUa_Good; OpcUa_DeclareErrorTraceModule(OpcUa_Module_List); OpcUa_ReturnErrorIfArgumentNull(a_pList); a_pList->pMutex = OpcUa_Null; a_pList->currtElement = OpcUa_Null; a_pList->firstElement = OpcUa_Null; a_pList->lastElement = OpcUa_Null; a_pList->uintNbElements = 0; uStatus = OPCUA_P_MUTEX_CREATE(&(a_pList->pMutex)); OpcUa_ReturnErrorIfBad(uStatus); return OpcUa_Good; }
/** * @brief Initializes the given parameter and allocates embedded objects. * If embedded objects cannot be allocated, the given pointer is set to OpcUa_Null. * * @return Bad status on fail; Good status on success; */ OpcUa_StatusCode OpcUa_TcpListener_Connection_Initialize(OpcUa_TcpListener_Connection* a_pConnection) { OpcUa_StatusCode uStatus = OpcUa_Good; OpcUa_DeclareErrorTraceModule(OpcUa_Module_TcpListener); OpcUa_ReturnErrorIfArgumentNull(a_pConnection); OpcUa_MemSet(&(a_pConnection->ConnectTime), 0, sizeof(OpcUa_DateTime)); OpcUa_MemSet(&(a_pConnection->DisconnectTime), 0, sizeof(OpcUa_DateTime)); a_pConnection->Socket = OpcUa_Null; #if OPCUA_P_SOCKETGETPEERINFO_V2 OpcUa_MemSet(a_pConnection->achPeerInfo, 0, OPCUA_P_PEERINFO_MIN_SIZE); #else /* OPCUA_P_SOCKETGETPEERINFO_V2 */ a_pConnection->PeerPort = 0; a_pConnection->PeerIp = 0; #endif /* OPCUA_P_SOCKETGETPEERINFO_V2 */ a_pConnection->pListenerHandle = OpcUa_Null; a_pConnection->pInputStream = OpcUa_Null; a_pConnection->uNoOfRequestsTotal = 0; a_pConnection->bConnected = OpcUa_False; OpcUa_String_Initialize(&a_pConnection->sURL); uStatus = OPCUA_P_MUTEX_CREATE(&(a_pConnection->Mutex)); OpcUa_ReturnErrorIfBad(uStatus); a_pConnection->ReceiveBufferSize = 0; a_pConnection->SendBufferSize = 0; a_pConnection->pSendQueue = OpcUa_Null; a_pConnection->bCloseWhenDone = OpcUa_False; a_pConnection->bNoRcvUntilDone = OpcUa_False; a_pConnection->bRcvDataPending = OpcUa_False; return OpcUa_Good; }
/*============================================================================ * OpcUa_ProxyStub_Initialize *===========================================================================*/ OpcUa_StatusCode OPCUA_DLLCALL OpcUa_ProxyStub_Initialize(OpcUa_Handle a_pPlatformLayerCalltable, OpcUa_ProxyStubConfiguration* a_pProxyStubConfiguration) { OpcUa_Boolean bSkip = OpcUa_False; OpcUa_InitializeStatus(OpcUa_Module_ProxyStub, "Initialize"); OpcUa_ReturnErrorIfArgumentNull(a_pProxyStubConfiguration) OpcUa_ReturnErrorIfArgumentNull(a_pPlatformLayerCalltable); /* set global platform layer handle */ OpcUa_ProxyStub_g_PlatformLayerCalltable = (OpcUa_Port_CallTable *)a_pPlatformLayerCalltable; #if OPCUA_USE_SYNCHRONISATION if(OpcUa_ProxyStub_g_hGlobalsMutex == OpcUa_Null) { uStatus = OPCUA_P_MUTEX_CREATE(&OpcUa_ProxyStub_g_hGlobalsMutex); OpcUa_GotoErrorIfBad(uStatus); } #endif /* OPCUA_USE_SYNCHRONISATION */ #if OPCUA_USE_SYNCHRONISATION OPCUA_P_MUTEX_LOCK(OpcUa_ProxyStub_g_hGlobalsMutex); #endif /* OPCUA_USE_SYNCHRONISATION */ OpcUa_ProxyStub_g_uNoOfInits++; if(OpcUa_ProxyStub_g_uNoOfInits > 1) { bSkip = OpcUa_True; } #if OPCUA_USE_SYNCHRONISATION OPCUA_P_MUTEX_UNLOCK(OpcUa_ProxyStub_g_hGlobalsMutex); #endif /* OPCUA_USE_SYNCHRONISATION */ if(bSkip == OpcUa_False) { /* set global configuration object */ uStatus = OpcUa_ProxyStub_ReInitialize(a_pProxyStubConfiguration); OpcUa_GotoErrorIfBad(uStatus); /* initialize tracer */ #if OPCUA_TRACE_ENABLE uStatus = OpcUa_Trace_Initialize(); OpcUa_GotoErrorIfBad(uStatus); OpcUa_Trace(OPCUA_TRACE_LEVEL_INFO, "OpcUa_ProxyStub_Initialize: Tracer has been initialized!\n"); #endif /* OPCUA_TRACE_ENABLE */ /* initialize networking. */ OpcUa_Trace(OPCUA_TRACE_LEVEL_INFO, "OpcUa_ProxyStub_Initialize: Network Module...\n"); uStatus = OPCUA_P_INITIALIZENETWORK(); OpcUa_GotoErrorIfBad(uStatus); OpcUa_Trace(OPCUA_TRACE_LEVEL_INFO, "OpcUa_ProxyStub_Initialize: Network Module done!\n"); uStatus = OpcUa_EncodeableTypeTable_Create(&OpcUa_ProxyStub_g_EncodeableTypes); OpcUa_GotoErrorIfBad(uStatus); uStatus = OpcUa_EncodeableTypeTable_AddTypes(&OpcUa_ProxyStub_g_EncodeableTypes, OpcUa_KnownEncodeableTypes); OpcUa_GotoErrorIfBad(uStatus); OpcUa_StringTable_Initialize(&OpcUa_ProxyStub_g_NamespaceUris); uStatus = OpcUa_StringTable_AddStringList(&OpcUa_ProxyStub_g_NamespaceUris, OpcUa_ProxyStub_StandardNamespaceUris); OpcUa_GotoErrorIfBad(uStatus); } OpcUa_ReturnStatusCode; OpcUa_BeginErrorHandling; OpcUa_ProxyStub_Clear(); OpcUa_FinishErrorHandling; }
/*============================================================================ * OpcUa_TcpSecureChannel_Create *===========================================================================*/ OpcUa_StatusCode OpcUa_TcpSecureChannel_Create(OpcUa_SecureChannel** a_ppSecureChannel) { OpcUa_TcpSecureChannel* pTcpSecureChannel = OpcUa_Null; OpcUa_InitializeStatus(OpcUa_Module_SecureChannel, "Create"); *a_ppSecureChannel = OpcUa_Null; pTcpSecureChannel = (OpcUa_TcpSecureChannel*)OpcUa_Alloc(sizeof(OpcUa_TcpSecureChannel)); OpcUa_ReturnErrorIfAllocFailed(pTcpSecureChannel); OpcUa_MemSet(pTcpSecureChannel, 0, sizeof(OpcUa_TcpSecureChannel)); *a_ppSecureChannel = (OpcUa_SecureChannel*)OpcUa_Alloc(sizeof(OpcUa_SecureChannel)); OpcUa_GotoErrorIfAllocFailed(*a_ppSecureChannel); OpcUa_MemSet(*a_ppSecureChannel, 0, sizeof(OpcUa_SecureChannel)); (*a_ppSecureChannel)->SecureChannelId = OPCUA_SECURECHANNEL_ID_INVALID; (*a_ppSecureChannel)->NextTokenId = 1; (*a_ppSecureChannel)->uLastSequenceNumberRcvd = 0xFFFFFFFFU; (*a_ppSecureChannel)->uLastSequenceNumberSent = OPCUA_SECURECHANNEL_STARTING_SEQUENCE_NUMBER; (*a_ppSecureChannel)->Handle = pTcpSecureChannel; (*a_ppSecureChannel)->Open = OpcUa_TcpSecureChannel_Open; (*a_ppSecureChannel)->Renew = OpcUa_TcpSecureChannel_Renew; (*a_ppSecureChannel)->Close = OpcUa_TcpSecureChannel_Close; (*a_ppSecureChannel)->GenerateSecurityToken = OpcUa_TcpSecureChannel_GenerateSecurityToken; (*a_ppSecureChannel)->RenewSecurityToken = OpcUa_TcpSecureChannel_RenewSecurityToken; (*a_ppSecureChannel)->GetSecuritySet = OpcUa_TcpSecureChannel_GetSecuritySet; (*a_ppSecureChannel)->GetCurrentSecuritySet = OpcUa_TcpSecureChannel_GetCurrentSecuritySet; (*a_ppSecureChannel)->ReleaseSecuritySet = OpcUa_TcpSecureChannel_ReleaseSecuritySet; (*a_ppSecureChannel)->GetSequenceNumber = OpcUa_TcpSecureChannel_GetSequenceNumber; (*a_ppSecureChannel)->CheckSequenceNumber = OpcUa_TcpSecureChannel_CheckSequenceNumber; (*a_ppSecureChannel)->LockWriteMutex = OpcUa_TcpSecureChannel_LockWriteMutex; (*a_ppSecureChannel)->UnlockWriteMutex = OpcUa_TcpSecureChannel_UnlockWriteMutex; (*a_ppSecureChannel)->IsOpen = OpcUa_SecureChannel_IsOpen; (*a_ppSecureChannel)->DiscoveryOnly = OpcUa_False; (*a_ppSecureChannel)->MessageSecurityMode = OpcUa_MessageSecurityMode_None; uStatus = OPCUA_P_MUTEX_CREATE(&((*a_ppSecureChannel)->hSyncAccess)); OpcUa_GotoErrorIfBad(uStatus); uStatus = OPCUA_P_MUTEX_CREATE(&((*a_ppSecureChannel)->hWriteMutex)); OpcUa_GotoErrorIfBad(uStatus); OpcUa_String_Initialize(&((*a_ppSecureChannel)->SecurityPolicyUri)); OpcUa_String_Initialize(&((*a_ppSecureChannel)->sPeerInfo)); OpcUa_ReturnStatusCode; OpcUa_BeginErrorHandling; if (*a_ppSecureChannel != OpcUa_Null) { if((*a_ppSecureChannel)->hSyncAccess != OpcUa_Null) { OPCUA_P_MUTEX_DELETE(&((*a_ppSecureChannel)->hSyncAccess)); } if((*a_ppSecureChannel)->hWriteMutex != OpcUa_Null) { OPCUA_P_MUTEX_DELETE(&((*a_ppSecureChannel)->hWriteMutex)); } OpcUa_Free(*a_ppSecureChannel); *a_ppSecureChannel = OpcUa_Null; } OpcUa_Free(pTcpSecureChannel); OpcUa_FinishErrorHandling; }