Major Update:

- Updated all Logged messages, standardised DebugLevel:
  - dlNone   - Show startup and stop
  - dlLow    - Show creation/destruction of Function Blocks and Local IO
  - dlMedium - Show connection events, eg. open/close
  - dlHigh   - Show data flow events
-LogCore:
  - LogMessage and ShowOutput uses va_list
    only run printf if DebugLevel correct
  - Remove global LogStr[] variable
- SelectableCore:
  - Implemented Auto-management of handles
    auto open on startup/fail/close
  - Changed simple Open/Close/Read/Write methods to inline
  - Do not set Select Write trigger for server socket
  - Memory leak, setting address twice on RemoteClient
  - Bug fix, only send handle out data if DebugLevel = dlHigh
  - Bug fix, do not Read/ProcessBuffer if no InputBuffer
This commit is contained in:
Charl Wentzel
2016-05-27 13:32:54 +02:00
parent c01c8f5e9b
commit b4073a166a
7 changed files with 127 additions and 183 deletions

View File

@@ -33,7 +33,6 @@
//extern char ProcessName[];
extern EDebugLevel DebugLevel;
extern char LogStr[]; // Access to global temporary log messages string
//---------------------------------------------------------------------------
CSelectableCore::CSelectableCore( const char * Name, CSelect * Selector ) :
@@ -66,7 +65,7 @@ CSelectableCore::~CSelectableCore()
}
//---------------------------------------------------------------------------
THandle * CSelectableCore::CreateHandle( const char * HandleName, bool CreateIO )
THandle * CSelectableCore::CreateHandle( const char * HandleName, bool CreateLocalIO, bool AutoManage )
{
THandle ** Handle = NULL;
@@ -92,15 +91,17 @@ THandle * CSelectableCore::CreateHandle( const char * HandleName, bool CreateIO
(*Handle)->FD = -1;
// Log event
sprintf( LogStr, "Handle '%s' - Created", HandleName );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Created", Name, HandleName );
}
// Create Matching IO point
if (CreateIO) {
if (CreateLocalIO) {
(*Handle)->LocalIO = AddLocalIO( HandleName );
}
// Set other params
(*Handle)->Auto = AutoManage;
return *Handle;
}
//---------------------------------------------------------------------------
@@ -125,8 +126,7 @@ bool CSelectableCore::RemoveHandle( THandle * Handle )
}
// Log event
sprintf( LogStr, "Handle '%s' - Removed", Handle->Name );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Removed", Name, Handle->Name );
// Destroy Child handle
DestroyHandle( Handle );
@@ -184,9 +184,7 @@ bool CSelectableCore::SetPortHandle( THandle * Handle, const char * FileName )
strcpy( Handle->FileName, FileName );
// Log event
sprintf( LogStr, "Handle '%s' - Set as Port [%s]", Handle->Name, FileName );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Set as Port [%s]", Name, Handle->Name, FileName );
return true;
}
//---------------------------------------------------------------------------
@@ -213,9 +211,7 @@ bool CSelectableCore::SetSocketHandle( THandle * Handle, EConnectType Type, con
Handle->PortNo = PortNo;
// Log event
sprintf( LogStr, "Handle '%s' - Set as %s [%s:%d]", Handle->Name, ConnectTypeName[Type], Address, PortNo );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Set as %s [%s:%d]", Name, Handle->Name, ConnectTypeName[Type], Address, PortNo );
return true;
}
//---------------------------------------------------------------------------
@@ -242,9 +238,7 @@ bool CSelectableCore::ClearHandle( THandle * Handle )
Handle->Type = ctNone;
// Log event
sprintf( LogStr, "Handle '%s' - Set as None", Handle->Name );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Set as None", Name, Handle->Name );
return true;
}
//---------------------------------------------------------------------------
@@ -302,8 +296,7 @@ int CSelectableCore::OpenPort( THandle * Handle )
if (access( Handle->FileName, F_OK ) != 0)
{
// Log event
sprintf( LogStr, "Handle '%s' - Port not found [%s]", Handle->Name, Handle->FileName );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Port not found [%s]", Name, Handle->Name, Handle->FileName );
return -1;
}
@@ -312,14 +305,12 @@ int CSelectableCore::OpenPort( THandle * Handle )
if (Handle->FD == -1)
{
// Log event
sprintf( LogStr, "Handle '%s' - Could not open Port [%s]", Handle->Name, Handle->FileName );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Could not open Port [%s]", Name, Handle->Name, Handle->FileName );
return -1;
}
// Log Event
sprintf( LogStr, "Handle '%s' - Port opened [%s]", Handle->Name, Handle->FileName );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Port opened [%s]", Name, Handle->Name, Handle->FileName );
// Add to Select Lists
if (Select) {
@@ -364,8 +355,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
if ((Handle->FD = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
// Log Event
sprintf( LogStr, "Handle '%s' - Failed to create Server socket [%s:%d] (%s)", Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Failed to create Server socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
// Set state
Handle->State = csFailed;
@@ -377,8 +367,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
(setsockopt( Handle->FD, SOL_SOCKET, SO_REUSEADDR, &Reuse_opt, sizeof(Reuse_opt)) == -1))
{
// Log Event
sprintf( LogStr, "Handle '%s' - Could not set socket options [%s:%d] (%s)", Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Could not set socket options [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
// Set state
Handle->State = csFailed;
@@ -393,8 +382,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
(setsockopt( Handle->FD, SOL_TCP, TCP_KEEPINTVL, &TCPint_opt, sizeof(TCPint_opt)) == -1) ))
{
// Log Event
sprintf( LogStr, "Handle '%s' - Could not set KeepAlive options [%s:%d] (%s)", Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Could not set KeepAlive options [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
// Set state
Handle->State = csFailed;
@@ -409,8 +397,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
if (bind( Handle->FD, (struct sockaddr *)&address, addr_len ) < 0)
{
// Log Event
sprintf( LogStr, "Handle '%s' - Failed to bind Server socket [%s:%d] (%s)", Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Failed to bind Server socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
// Set state
close( Handle->FD );
@@ -423,8 +410,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
if (listen( Handle->FD, 5 ) < 0)
{
// Log Event
sprintf( LogStr, "Handle '%s' - Failed to listen on Server socket [%s:%d] (%s)", Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Failed to listen on Server socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
// Set state
close( Handle->FD );
@@ -434,12 +420,11 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
};
// Log Event
sprintf( LogStr, "Handle '%s' - Server binded and listening [%s:%d]", Handle->Name, Handle->Address, Handle->PortNo );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Server binded and listening [%s:%d]", Name, Handle->Name, Handle->Address, Handle->PortNo );
// Add to Select Lists
if (Select) {
Select->Add( Handle->FD, true, true, this );
Select->Add( Handle->FD, true, false, this );
}
// Set state
@@ -470,13 +455,11 @@ int CSelectableCore::OpenRemoteClientSocket( THandle * Handle )
addr_len = sizeof( address );
if ((ClientFD = accept( Handle->FD, (struct sockaddr *)&address, &addr_len)) == -1)
{
if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
sprintf( LogStr, "Handle '%s' - Server failed to accept blocking connection (%s)", Handle->Name, strerror(errno) );
else
sprintf( LogStr, "Handle '%s' - Server failed to accept connection (%s)", Handle->Name, strerror(errno) );
// Log Event
LogMessage( Name, dlMedium, LogStr );
if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
LogMessage( dlMedium, "%s: Handle '%s' - Server failed to accept blocking connection (%s)", Name, Handle->Name, strerror(errno) );
else
LogMessage( dlMedium, "%s: Handle '%s' - Server failed to accept connection (%s)", Name, Handle->Name, strerror(errno) );
return -1;
}
@@ -495,7 +478,7 @@ int CSelectableCore::OpenRemoteClientSocket( THandle * Handle )
// Create Remote Client Handle
sprintf( ClientName, "%s-%d", Handle->Name, ClientFD );
*RemoteClient = CreateHandle( ClientName );
*RemoteClient = CreateHandle( ClientName, false, false );
SetSocketHandle( *RemoteClient, ctRemoteClient, ClientAddress, 0, Handle->KeepAlive );
// Copy Parent Buffer setup
@@ -508,12 +491,8 @@ int CSelectableCore::OpenRemoteClientSocket( THandle * Handle )
(*RemoteClient)->Parent = Handle;
(*RemoteClient)->State = csWaitingtoOpen;
(*RemoteClient)->Address = (char*)malloc( strlen(ClientAddress)+1 );
strcpy( (*RemoteClient)->Address, ClientAddress );
// Log Event
sprintf( LogStr, "Handle '%s' - Server accepted Remote Client connection [%s]", Handle->Name, ClientAddress );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Server accepted Remote Client connection [%s]", Name, Handle->Name, ClientAddress );
// Add to Select Lists
if (Select) {
@@ -533,8 +512,7 @@ int CSelectableCore::OpenRemoteClientSocket( THandle * Handle )
else if (Handle->State == csWaitingtoOpen)
{
// Log Event
sprintf( LogStr, "Handle '%s' - Remote Client connection open [%s]", Handle->Name, Handle->Address );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Remote Client connection open [%s]", Name, Handle->Name, Handle->Address );
// Update state
Handle->State = csOpen;
@@ -568,8 +546,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
if ((Handle->FD = socket( AF_INET, SOCK_STREAM, 0 )) < 0)
{
// Log Event
sprintf( LogStr, "Handle '%s' - Failed to create Client socket [%s:%d] (%s)", Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Failed to create Client socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
// Set Status
Handle->State = csFailed;
@@ -588,8 +565,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
(setsockopt( Handle->FD, SOL_TCP, TCP_KEEPINTVL, &TCPint_opt, sizeof(TCPint_opt)) == -1) ))
{
// Log Event
sprintf( LogStr, "Handle %s - Could not set KeepAlive options [%s:%d] (%s)", Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle %s - Could not set KeepAlive options [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
// Set State
close( Handle->FD );
@@ -607,8 +583,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
if (!connect( Handle->FD, (struct sockaddr *)&address, addr_len ))
{
sprintf( LogStr, "Handle %s - Client connected [%s:%d]", Handle->Name, Handle->Address, Handle->PortNo );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle %s - Client connected [%s:%d]", Name, Handle->Name, Handle->Address, Handle->PortNo );
// Add to Select Lists
if (Select) {
@@ -622,8 +597,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
else if ((errno == EAGAIN) || (errno == EWOULDBLOCK) || (errno == EINPROGRESS) || (errno == EALREADY))
{
// Log Event
sprintf( LogStr, "Handle '%s' - Client waiting to connect [%s:%d] (%s)", Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Client waiting to connect [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
// Add to Select Lists
if (Select) {
@@ -637,8 +611,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
else
{
// Log Event
sprintf( LogStr, "Handle '%s' - Client could not connect [%s:%d] (%s)", Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Client could not connect [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
// Remove from Select List
if (Select) {
@@ -654,14 +627,13 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
}
//---------------------------------------------------------------------------
int CSelectableCore::Open( const char * HandleName )
int CSelectableCore::Open( THandle * Handle )
{
int FD = -1;
THandle * Handle = NULL;
int FD = -1;
// Validate
if (!HandleName || !(Handle = GetHandle( HandleName ))) {
return false;
if (!Handle) {
return -1;
}
// Open correctly
@@ -724,27 +696,26 @@ bool CSelectableCore::Close( THandle * Handle, bool CloseChildren )
{
case ctPort:
// Log Event
sprintf( LogStr, "Handle '%s' - Port %s [%s]", Handle->Name, ((Fail)? "failed" : "closed"), Handle->FileName );
LogMessage( dlMedium, "%s: Handle '%s' - Port %s [%s]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->FileName );
break;
case ctServer:
sprintf( LogStr, "Handle '%s' - Server %s [%s:%d]", Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address, Handle->PortNo );
LogMessage( dlMedium, "%s: Handle '%s' - Server %s [%s:%d]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address, Handle->PortNo );
break;
case ctRemoteClient:
sprintf( LogStr, "Handle '%s' - Remote Client connection %s [%s]", Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address );
LogMessage( dlMedium, "%s: Handle '%s' - Remote Client connection %s [%s]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address );
break;
case ctClient:
sprintf( LogStr, "Handle '%s' - Client connection %s [%s:%d]", Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address, Handle->PortNo );
LogMessage( dlMedium, "%s: Handle '%s' - Client connection %s [%s:%d]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address, Handle->PortNo );
break;
case ctNone:
default:
sprintf( LogStr, "Handle '%s' - %s, invalid Handle type", Handle->Name, ((Fail)? "failed" : "closed") );
LogMessage( dlMedium, "%s: Handle '%s' - %s, invalid Handle type", Name, Handle->Name, ((Fail)? "failed" : "closed") );
break;
};
LogMessage( Name, dlMedium, LogStr );
// Remove from Select List
if (!Fail && Select) {
@@ -770,10 +741,7 @@ bool CSelectableCore::Read( THandle * Handle )
}
// Log Read Event
if (DebugLevel >= dlMedium) {
sprintf( LogStr, "Handle '%s' - Read Event", Handle->Name );
LogMessage( Name, dlMedium, LogStr );
}
LogMessage( dlHigh, "%s: Handle '%s' - Read Event", Name, Handle->Name );
// Check for closing/opening event on Socket
if (Handle->Type == ctServer)
@@ -824,7 +792,7 @@ bool CSelectableCore::Read( THandle * Handle )
}
// Read File directly into buffer
if (!(BytesRead = Handle->InBuffer->ReadFromFD( Handle->FD ))) {
if (!Handle->InBuffer || !(BytesRead = Handle->InBuffer->ReadFromFD( Handle->FD ))) {
return false;
}
@@ -850,10 +818,7 @@ bool CSelectableCore::Write( THandle * Handle )
}
// Log Read Event
if (DebugLevel >= dlMedium) {
sprintf( LogStr, "Handle '%s' - Write Event", Handle->Name );
LogMessage( Name, dlMedium, LogStr );
}
LogMessage( dlHigh, "%s: Handle '%s' - Write Event", Name, Handle->Name );
if (Handle->State == csWaitingtoOpen)
{
@@ -879,9 +844,8 @@ bool CSelectableCore::Write( THandle * Handle )
{
if (DebugLevel >= dlHigh) {
// Show event
Len = Handle->InBuffer->Peek( &Data );
sprintf( LogStr, "%s: Handle '%s' - OUT:", Name, Handle->Name );
ShowOutput( LogStr, dlHigh, OUT_NORMAL, Data, Len );
Len = Handle->OutBuffer->Peek( &Data );
ShowOutput( dlHigh, OUT_NORMAL, Data, Len, "%s: Handle '%s' - OUT:", Name, Handle->Name );
}
// Update Buffer
@@ -920,7 +884,7 @@ bool CSelectableCore::ProcessBuffer( THandle * Handle, bool Force )
char HeadStr[50];
// Check if buffered data
if (!Handle || !Handle->InBuffer->Len()) {
if (!Handle || !Handle->InBuffer || !Handle->InBuffer->Len()) {
return false;
}
@@ -928,11 +892,8 @@ bool CSelectableCore::ProcessBuffer( THandle * Handle, bool Force )
if (Force)
{
// Show Packet
if (DebugLevel >= dlHigh) {
Len = Handle->InBuffer->Peek( &Data );
sprintf( HeadStr, "%s: Handle '%s' - IN-F:", Name, Handle->Name );
ShowOutput( HeadStr, dlHigh, OUT_NORMAL, Data, Len );
}
Len = Handle->InBuffer->Peek( &Data );
ShowOutput( dlHigh, OUT_NORMAL, Data, Len, "%s: Handle '%s' - IN-F:", Name, Handle->Name );
// Write buffer to Outputs
if (Handle->Type == ctRemoteClient) {
@@ -961,11 +922,9 @@ bool CSelectableCore::ProcessBuffer( THandle * Handle, bool Force )
// Search for end of packet marker
while (Handle->InBuffer->FindStr( Handle->InMarker, Handle->InMarkerLen, Pos ))
{
if (DebugLevel >= dlHigh) {
// Show Packet
Len = Handle->InBuffer->Peek( &Data, 0, Pos+1 );
ShowOutput( HeadStr, dlHigh, OUT_NORMAL, Data, Len );
}
// Show Packet
Len = Handle->InBuffer->Peek( &Data, 0, Pos+1 );
ShowOutput( dlHigh, OUT_NORMAL, Data, Len, "%s: Handle '%s' - IN-M:", Name, Handle->Name );
// Write buffer to Outputs
if (Handle->Type == ctRemoteClient) {
@@ -1035,6 +994,7 @@ int CSelectableCore::WriteToFD( int FD, const char * Data, int Len )
{
// Read from file descriptor
BytesWritten = write( FD, Data, DataRemain );
//write( FD, "\n", 1 );
if (BytesWritten <= 0)
break;
@@ -1065,15 +1025,12 @@ int CSelectableCore::Input( const char * IOName, const char * Data, int Len )
if (!(Handle = GetHandle( IOName )))
{
// Log event
sprintf( LogStr, "%s: Local IO '%s' - Input rejected, Input not found", Name, IOName );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlHigh, "%s: Local IO '%s' - Input rejected, Input not found", Name, IOName );
return 0;
}
// Log event
sprintf( LogStr, "%s: LocalIO '%s' - IN:", Name, IOName );
ShowOutput( LogStr, dlMedium, OUT_NORMAL, Data, Len );
ShowOutput( dlHigh, OUT_NORMAL, Data, Len, "%s: LocalIO '%s' - IN:", Name, IOName );
if (Handle->Type == ctServer)
{
@@ -1097,11 +1054,8 @@ int CSelectableCore::Input( const char * IOName, const char * Data, int Len )
}
else
{
if (DebugLevel >= dlHigh) {
// Show event
sprintf( LogStr, "%s: Handle '%s' - OUT:", Name, Handle->Name );
ShowOutput( LogStr, dlHigh, OUT_NORMAL, Data, Len );
}
// Show event
ShowOutput( dlHigh, OUT_NORMAL, Data, Len, "%s: Handle '%s' - OUT:", Name, ChildHandle->Name );
// Write directly to handle
BytesWritten = WriteToFD( ChildHandle->FD, Data, Len );
@@ -1129,11 +1083,8 @@ int CSelectableCore::Input( const char * IOName, const char * Data, int Len )
}
else
{
if (DebugLevel >= dlHigh) {
// Show event
sprintf( LogStr, "%s: Handle '%s' - OUT:", Name, Handle->Name );
ShowOutput( LogStr, dlHigh, OUT_NORMAL, Data, Len );
}
// Show event
ShowOutput( dlHigh, OUT_NORMAL, Data, Len, "%s: Handle '%s' - OUT:", Name, Handle->Name );
// Write directly to handle
BytesWritten = WriteToFD( Handle->FD, Data, Len );
@@ -1149,10 +1100,18 @@ bool CSelectableCore::Process()
THandle * Handle = NULL;
long Duration = 0;
// Check all Input buffers
// Check all handles
Handle = FirstHandle;
while (Handle)
{
// Auto manage handles
if (Handle->Auto && ((Handle->State == csNone) || (Handle->State == csFailed) || (Handle->State == csClosed)))
{
// Reopen handle
Open( Handle );
}
// Check Input buffers
if (Handle->InBuffer && (Handle->InBuffer->Len() > 0))
{
// Check duration since last PortIn
@@ -1307,15 +1266,13 @@ bool CSelectableCore::SerialConfig( THandle * Handle, int Baud, short DataBits,
if (tcsetattr( Handle->FD, TCSANOW, &newtio ) != 0)
{
// Log event
sprintf( LogStr, "Handle '%s' - Port not configured", Handle->Name );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Port not configured", Name, Handle->Name );
return false;
}
// Port configured
// Log event
sprintf( LogStr, "Handle '%s' - Port configured", Handle->Name );
LogMessage( Name, dlMedium, LogStr );
LogMessage( dlMedium, "%s: Handle '%s' - Port configured", Name, Handle->Name );
return true;
}
//---------------------------------------------------------------------------