#include <uaserver_config.h>
#include <stdlib.h>
#if defined(_WIN32) || defined(_WIN32_WCE)
# include <winsock2.h>
#else
# include <unistd.h>
# include <netdb.h>
# ifdef VXWORKS
# include <hostLib.h>
# endif
#endif
#include <uaserver_module.h>
#include <uaserver_utilities.h>
#include "custom_provider.h"
#define UASERVER_PORT 48020
#define UASERVER_APPLICATIONNAME "UaSdkC - Lesson07"
#define UASERVER_APPLICATIONURI "UnifiedAutomation:UaSdkC:Lesson07"
#define UASERVER_PRODUCTNAME "UaSdkC - Lesson07"
#define UASERVER_PRODUCTURI "urn:UnifiedAutomation:UaSdkC:Lesson07"
#define UASERVER_MANUFACTURERNAME "Unified Automation GmbH"
OpcUa_ProxyStubConfiguration *a_pProxyStubConfiguration)
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "InitializeOpcUaStack");
printf("UA Server: Initializing Stack...\n");
a_pProxyStubConfiguration->bProxyStub_Trace_Enabled = OpcUa_True;
a_pProxyStubConfiguration->uProxyStub_Trace_Level = OPCUA_TRACE_OUTPUT_LEVEL_ERROR;
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_FinishErrorHandling;
}
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "CleanupOpcUaStack");
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_FinishErrorHandling;
}
int GetFQHostname( char *szHostname, int len )
{
struct hostent *pEnt = 0;
int ret = gethostname( szHostname, len );
if ( ret != 0 ) return ret;
pEnt = gethostbyname( szHostname );
if ( pEnt == 0 ) return -1;
OpcUa_StrlCpyA( szHostname, pEnt->h_name, len );
szHostname[len - 1] = 0;
return 0;
}
{
OpcUa_CharA szHostname[256];
OpcUa_CharA szEndpointURL[300];
OpcUa_CharA szApplicationUri[300];
OpcUa_InitializeStatus(OpcUa_Module_Server, "ServerMain");
OpcUa_MemSet(szEndpointURL, 0, sizeof(szEndpointURL));
OpcUa_MemSet(szApplicationUri, 0, sizeof(szApplicationUri));
GetFQHostname(szHostname, sizeof(szHostname));
OpcUa_SnPrintfA(szEndpointURL, sizeof(szEndpointURL)-1, "opc.tcp://%s:%u", szHostname, UASERVER_PORT);
OpcUa_SnPrintfA(szApplicationUri, sizeof(szApplicationUri)-1, "urn:%s:%s", szHostname, UASERVER_APPLICATIONURI);
OpcUa_GotoErrorIfBad(uStatus);
UaServer_Endpoint_Initialize(&pServerConfig->
pEndpoints[0]);
OpcUa_String_AttachReadOnly(&pEndpoint->
sEndpointUrl, szEndpointURL);
OpcUa_String_AttachReadOnly(&pEndpoint->
PkiConfigName,
"PkiStoreNone");
pEndpoint->
PkiConfig.strPkiType = (
char*)OPCUA_PKI_TYPE_NONE;
printf("UA Server: Building Provider List...\n");
OpcUa_GotoErrorIfBad(uStatus);
OpcUa_MemSet(&customProvider, 0, sizeof(customProvider));
customProvider.
pfInit = CustomProvider_Initialize;
OpcUa_GotoErrorIfBad(uStatus);
printf("UA Server: Loading Provider Modules...\n");
OpcUa_GotoErrorIfBad(uStatus);
OpcUa_GotoErrorIfBad(uStatus);
printf("\n#############################################");
printf("\n# Server started! Press %s to stop!", UABASE_P_SHUTDOWN_SEQUENCE);
printf("\n#############################################\n\n");
printf("Endpoint URL: %s\n", szEndpointURL);
while (OpcUa_IsGood(uStatus))
{
}
OpcUa_CertificateStoreConfiguration_Initialize(&pEndpoint->
PkiConfig);
printf("UA Server: Main stopped successfully.\n");
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
if (pEndpoint != OpcUa_Null)
{
OpcUa_CertificateStoreConfiguration_Initialize(&pEndpoint->
PkiConfig);
}
printf("UA Server: Main stopped due to ERROR! (0x%08X)\nPress Enter to close Window!\n", uStatus);
getchar();
OpcUa_FinishErrorHandling;
}
int main(int argc, char *argv[])
{
int ret = EXIT_SUCCESS;
OpcUa_Handle hProxyStubPlatformLayer = OpcUa_Null;
OpcUa_ProxyStubConfiguration proxyStubConfiguration;
OpcUa_ReferenceParameter(argc);
OpcUa_ReferenceParameter(argv);
uStatus = InitializeOpcUaStack(&hProxyStubPlatformLayer, &proxyStubConfiguration);
if ( OpcUa_IsNotGood(uStatus) )
{
return EXIT_FAILURE;
}
uStatus = ServerMain();
if ( OpcUa_IsNotGood(uStatus) )
{
ret = EXIT_FAILURE;
}
uStatus = CleanupOpcUaStack(&hProxyStubPlatformLayer);
if ( OpcUa_IsNotGood(uStatus) )
{
ret = EXIT_FAILURE;
}
return ret;
}
#ifdef _WIN32_WCE
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nShowCmd)
{
OpcUa_ReferenceParameter(hInstance);
OpcUa_ReferenceParameter(hPrevInstance);
OpcUa_ReferenceParameter(lpCmdLine);
OpcUa_ReferenceParameter(nShowCmd);
return main(0, OpcUa_Null);
}
#endif