/*============================================================================ * Get IP Address and Port Number of the local connection *===========================================================================*/ OpcUa_StatusCode OpcUa_P_RawSocket_GetLocalInfo( OpcUa_RawSocket a_RawSocket, OpcUa_UInt32* a_pIP, OpcUa_UInt16* a_pPort) { int apiResult = 0; struct sockaddr_in sockAddrIn; size_t sockAddrInLen = sizeof(struct sockaddr_in); SOCKET winSocket = (SOCKET)OPCUA_P_SOCKET_INVALID; OpcUa_InitializeStatus(OpcUa_Module_Socket, "GetLocalInfo"); if(a_RawSocket == (OpcUa_RawSocket)OPCUA_P_SOCKET_INVALID) { return 0; } winSocket = (SOCKET)a_RawSocket; apiResult = getsockname(winSocket, (struct sockaddr*)&sockAddrIn, (int*)&sockAddrInLen); if(apiResult != 0) { apiResult = OpcUa_P_RawSocket_GetLastError(a_RawSocket); uStatus = OpcUa_BadCommunicationError; goto Error; } if(a_pIP != OpcUa_Null) { *a_pIP = OpcUa_P_RawSocket_NToHL((OpcUa_UInt32)sockAddrIn.sin_addr.s_addr); } if(a_pPort != OpcUa_Null) { *a_pPort = OpcUa_P_RawSocket_NToHS((OpcUa_UInt16)sockAddrIn.sin_port); } OpcUa_ReturnStatusCode; OpcUa_BeginErrorHandling; OpcUa_FinishErrorHandling; }
/*============================================================================ * Network Byte Order Conversion Helper Functions *===========================================================================*/ OpcUa_UInt32 OPCUA_DLLCALL OpcUa_P_Socket_NToHL(OpcUa_UInt32 a_netLong) { return OpcUa_P_RawSocket_NToHL(a_netLong); }