Major update:
- DataTreeCore:
- Bug fix: GetMember() error if member not found
- FunctionCore: (affected: SelectableCore, FileCore, WatchdogCore)
- Made destructor virual
- Standardize method parameter naming, e.g. pName, pLog
- Renamed parameters: DebugLevel -> LogLevel, OutputDisplay -> LogOutput
- Reinstated parameter BaseMember
- Removed logging parameters from constructor
- Created method InitLoggging() (shows "Function Created" message)
- Split LoadConfig() method into parts:
- Implemented public LoadConfig() methods
- Implemented LoadConfigData() method, load parameters from DataTree
- WatchdogCore:
- Derive from CSelectableCore instead of CFunctionCore
- Rename parameter: PingTimeout -> PingInterval
- Replace Ping Channel with Handle only
- Add method SetInterval()
- Send command direct to handle with (channel) Input()
- SelectableCore:
- Rename parameters: Auto -> AutoManage, ReopenTimeout -> ReopenDelay
- Implemented own virtual LoadConfigData() method
- DeviceCore:
- Made all logging conditional: if (Log) Log->Message(...)
- SelectCore:
- Renamed parameters: DebugLevel -> LogLevel
This commit is contained in:
@@ -30,14 +30,14 @@
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
CSelectableCore::CSelectableCore( const char * Name, CSelect * Selector, CLogCore * pLog, EDebugLevel pDebugLevel, int pOutputDisplay ) :
|
||||
CFunctionCore( Name, pLog, pDebugLevel, pOutputDisplay )
|
||||
CSelectableCore::CSelectableCore( const char * pName, CSelect * pSelect, CLogCore * pLog ) :
|
||||
CFunctionCore( pName, pLog )
|
||||
{
|
||||
// Handles
|
||||
FirstHandle = NULL;
|
||||
|
||||
// Select
|
||||
Select = Selector;
|
||||
Select = pSelect;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -60,6 +60,86 @@ CSelectableCore::~CSelectableCore()
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool CSelectableCore::LoadConfigData()
|
||||
{
|
||||
TDataMember * TempMember;
|
||||
THandle * Handle;
|
||||
char * Type;
|
||||
char * Name;
|
||||
char Path[100];
|
||||
char * Address;
|
||||
long Port;
|
||||
|
||||
// Call Previous load config
|
||||
CFunctionCore::LoadConfigData();
|
||||
|
||||
// Set debug output
|
||||
FirstHandle = NULL;
|
||||
TempMember = DataTree->GetFirstChild( DataTree->GetMember( BaseMember, "Handles", true ) );
|
||||
while (TempMember)
|
||||
{
|
||||
// Create Handle and channel link
|
||||
Handle = CreateHandle( DataTree->GetStr( TempMember, "Name" ), false );
|
||||
Handle->Channel = GetChannel( DataTree->GetStr( TempMember, "Name" ) );
|
||||
|
||||
Type = (char*)DataTree->GetStr( TempMember, "Type", "TCPclient", true );
|
||||
if (!strcasecmp( Type, "Port" ))
|
||||
{
|
||||
Address = (char*)DataTree->GetStr( TempMember, "Port/Address", NULL, true ); // Get default value
|
||||
if ((Name = (char*)DataTree->GetStr( TempMember, "Port/Name", NULL, true ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetStr( NULL, Path, Address, true ); // Get address list value
|
||||
}
|
||||
SetPortHandle( Handle, Address ); // Assign values
|
||||
}
|
||||
else if (!strcasecmp( Type, "TCPserver" ))
|
||||
{
|
||||
Address = (char*)DataTree->GetStr( TempMember, "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = DataTree->GetInt( TempMember, "Socket/Port", 0, true ); // Get default Port value
|
||||
if ((Name = (char*)DataTree->GetStr( TempMember, "Socket/Name", NULL, true ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetStr( NULL, Path, Address, true ); // Get AddressList Address value
|
||||
sprintf( Path, "Address/%s/Port", Name );
|
||||
Port = DataTree->GetInt( NULL, Path, Port, true ); // Get AddressList Port value
|
||||
}
|
||||
SetSocketHandle( Handle, ctServer, Address, Port, true ); // Assign values
|
||||
}
|
||||
else if (!strcasecmp( Type, "TCPclient" ))
|
||||
{
|
||||
Address = (char*)DataTree->GetStr( TempMember, "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = DataTree->GetInt( TempMember, "Socket/Port", 0, true ); // Get default Port value
|
||||
if ((Name = (char*)DataTree->GetStr( TempMember, "Socket/Name", NULL, true ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetStr( NULL, Path, Address, true ); // Get AddressList Address value
|
||||
sprintf( Path, "Address/%s/Port", Name );
|
||||
Port = DataTree->GetInt( NULL, Path, Port, true ); // Get AddressList Port value
|
||||
}
|
||||
SetSocketHandle( Handle, ctClient, Address, Port, true ); // Assign values
|
||||
}
|
||||
else if (!strcasecmp( Type, "ForkPipe" )) {
|
||||
Address = (char*)DataTree->GetStr( TempMember, "Fork/ExecPath", NULL, true ); // Get default value
|
||||
SetForkPipeHandle( Handle, Address );
|
||||
}
|
||||
|
||||
// Set Auto Mange
|
||||
SetAutoManage( Handle, DataTree->GetBool( TempMember, "AutoManage/Enabled", true, true ),
|
||||
DataTree->GetInt( TempMember, "AutoManage/ReopenDelay", 2000, true ) );
|
||||
|
||||
// Input buffer
|
||||
SetBuffers( Handle, DataTree->GetInt( TempMember, "InputBuffer/Size", 100, true ),
|
||||
DataTree->GetInt( TempMember, "OutputBuffer/Size", 0, true ),
|
||||
DataTree->GetInt( TempMember, "InputBuffer/Timeout", 200, true ),
|
||||
DataTree->GetStr( TempMember, "InputBuffer/Marker", "\n", true ),
|
||||
DataTree->GetInt( TempMember, "InputBuffer/MarkerLen", 1, true ) );
|
||||
|
||||
// Next
|
||||
TempMember = DataTree->GetNextChild( TempMember );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
THandle * CSelectableCore::CreateHandle( const char * HandleName, bool CreateChannel )
|
||||
{
|
||||
THandle ** Handle = NULL;
|
||||
@@ -85,7 +165,7 @@ THandle * CSelectableCore::CreateHandle( const char * HandleName, bool CreateCh
|
||||
(*Handle)->FD = -1;
|
||||
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Created", Name, HandleName );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Created", Name, HandleName );
|
||||
}
|
||||
|
||||
// Create Matching Channel
|
||||
@@ -117,7 +197,7 @@ bool CSelectableCore::RemoveHandle( THandle * Handle )
|
||||
}
|
||||
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Removed", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Removed", Name, Handle->Name );
|
||||
|
||||
// Destroy Child handle
|
||||
DestroyHandle( Handle );
|
||||
@@ -175,7 +255,7 @@ bool CSelectableCore::SetPortHandle( THandle * Handle, const char * FileName )
|
||||
strcpy( Handle->Path, FileName );
|
||||
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Set as Port [%s]", Name, Handle->Name, FileName );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Set as Port [%s]", Name, Handle->Name, FileName );
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -200,7 +280,7 @@ bool CSelectableCore::SetForkPipeHandle( THandle * Handle, const char * ExecPath
|
||||
strcpy( Handle->Path, ExecPath );
|
||||
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Set as ForkPipe [%s]", Name, Handle->Name, ExecPath );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Set as ForkPipe [%s]", Name, Handle->Name, ExecPath );
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -227,7 +307,7 @@ bool CSelectableCore::SetSocketHandle( THandle * Handle, EConnectType Type, con
|
||||
Handle->PortNo = PortNo;
|
||||
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Set as %s [%s:%d]", Name, Handle->Name, ConnectTypeName[Type], Address, PortNo );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Set as %s [%s:%d]", Name, Handle->Name, ConnectTypeName[Type], Address, PortNo );
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -254,7 +334,7 @@ bool CSelectableCore::ClearHandle( THandle * Handle )
|
||||
Handle->Type = ctNone;
|
||||
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Set as None", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Set as None", Name, Handle->Name );
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -272,7 +352,7 @@ bool CSelectableCore::SetCallback( THandle * Handle, EConnectState pState, FHand
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool CSelectableCore::SetAutoManage( THandle * Handle, bool AutoManage, int ReopenTime )
|
||||
bool CSelectableCore::SetAutoManage( THandle * Handle, bool AutoManage, int ReopenDelay )
|
||||
{
|
||||
// Validate
|
||||
if (!Handle) {
|
||||
@@ -280,8 +360,8 @@ bool CSelectableCore::SetAutoManage( THandle * Handle, bool AutoManage, int Reop
|
||||
}
|
||||
|
||||
// Set params
|
||||
Handle->Auto = AutoManage;
|
||||
Handle->ReopenTimeout = ReopenTime;
|
||||
Handle->AutoManage = AutoManage;
|
||||
Handle->ReopenDelay = ReopenDelay;
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -339,7 +419,7 @@ int CSelectableCore::OpenPort( THandle * Handle )
|
||||
if (access( Handle->Path, F_OK ) != 0)
|
||||
{
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Port not found [%s]", Name, Handle->Name, Handle->Path );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Port not found [%s]", Name, Handle->Name, Handle->Path );
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -348,12 +428,12 @@ int CSelectableCore::OpenPort( THandle * Handle )
|
||||
if (Handle->FD == -1)
|
||||
{
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Could not open Port [%s]", Name, Handle->Name, Handle->Path );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Could not open Port [%s]", Name, Handle->Name, Handle->Path );
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Port opened [%s]", Name, Handle->Name, Handle->Path );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Port opened [%s]", Name, Handle->Name, Handle->Path );
|
||||
|
||||
// Add to Select Lists
|
||||
if (Select) {
|
||||
@@ -384,7 +464,7 @@ int CSelectableCore::OpenForkPipe( THandle * Handle )
|
||||
if (!Handle->Path || !*(Handle->Path))
|
||||
{
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Invalid path for Exec", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Invalid path for Exec", Name, Handle->Name );
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -393,7 +473,7 @@ int CSelectableCore::OpenForkPipe( THandle * Handle )
|
||||
if ((pipefd[0] == -1) || (pipefd[1] == -1))
|
||||
{
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Could not open Pipe", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Could not open Pipe", Name, Handle->Name );
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -408,7 +488,7 @@ int CSelectableCore::OpenForkPipe( THandle * Handle )
|
||||
Handle->FD = -1;
|
||||
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Could not Fork process", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Could not Fork process", Name, Handle->Name );
|
||||
return -1;
|
||||
}
|
||||
else if (Handle->ChildPID > 0)
|
||||
@@ -419,7 +499,7 @@ int CSelectableCore::OpenForkPipe( THandle * Handle )
|
||||
Handle->FD = pipefd[1];
|
||||
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Process forked successfully", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Process forked successfully", Name, Handle->Name );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -443,7 +523,7 @@ int CSelectableCore::OpenForkPipe( THandle * Handle )
|
||||
execvp( Args[0], Args );
|
||||
|
||||
// Replace failed, exit immediately
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Exec on forked process failed", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Exec on forked process failed", Name, Handle->Name );
|
||||
exit(127);
|
||||
}
|
||||
|
||||
@@ -490,7 +570,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
|
||||
if ((Handle->FD = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Failed to create Server socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Failed to create Server socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
|
||||
// Set state
|
||||
ChangeState( Handle, csFailed );
|
||||
@@ -502,7 +582,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
|
||||
(setsockopt( Handle->FD, SOL_SOCKET, SO_REUSEADDR, &Reuse_opt, sizeof(Reuse_opt)) == -1))
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Could not set socket options [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Could not set socket options [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
|
||||
// Set state
|
||||
ChangeState( Handle, csFailed );
|
||||
@@ -517,7 +597,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
|
||||
(setsockopt( Handle->FD, SOL_TCP, TCP_KEEPINTVL, &TCPint_opt, sizeof(TCPint_opt)) == -1) ))
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Could not set KeepAlive options [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Could not set KeepAlive options [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
|
||||
// Set state
|
||||
ChangeState( Handle, csFailed );
|
||||
@@ -532,7 +612,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
|
||||
if (bind( Handle->FD, (struct sockaddr *)&address, addr_len ) < 0)
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Failed to bind Server socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, 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 );
|
||||
@@ -545,7 +625,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
|
||||
if (listen( Handle->FD, 5 ) < 0)
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Failed to listen on Server socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, 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 );
|
||||
@@ -555,7 +635,7 @@ int CSelectableCore::OpenServerSocket( THandle * Handle )
|
||||
};
|
||||
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Server binded and listening [%s:%d]", Name, Handle->Name, Handle->Address, Handle->PortNo );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Server binded and listening [%s:%d]", Name, Handle->Name, Handle->Address, Handle->PortNo );
|
||||
|
||||
// Add to Select Lists
|
||||
if (Select) {
|
||||
@@ -592,10 +672,10 @@ int CSelectableCore::OpenRemoteClientSocket( THandle * Handle )
|
||||
{
|
||||
// Log Event
|
||||
if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Server failed to accept blocking connection (%s)", Name, Handle->Name, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Server failed to accept blocking connection (%s)", Name, Handle->Name, strerror(errno) );
|
||||
}
|
||||
else {
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Server failed to accept connection (%s)", Name, Handle->Name, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Server failed to accept connection (%s)", Name, Handle->Name, strerror(errno) );
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@@ -629,7 +709,7 @@ int CSelectableCore::OpenRemoteClientSocket( THandle * Handle )
|
||||
(*RemoteClient)->State = csWaitingtoOpen;
|
||||
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Server accepted Remote Client connection [%s]", Name, Handle->Name, ClientAddress );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Server accepted Remote Client connection [%s]", Name, Handle->Name, ClientAddress );
|
||||
|
||||
// Add to Select Lists
|
||||
if (Select) {
|
||||
@@ -649,7 +729,7 @@ int CSelectableCore::OpenRemoteClientSocket( THandle * Handle )
|
||||
else if (Handle->State == csWaitingtoOpen)
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Remote Client connection open [%s]", Name, Handle->Name, Handle->Address );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Remote Client connection open [%s]", Name, Handle->Name, Handle->Address );
|
||||
|
||||
// Update state
|
||||
ChangeState( Handle, csOpen );
|
||||
@@ -683,7 +763,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
|
||||
if ((Handle->FD = socket( AF_INET, SOCK_STREAM, 0 )) < 0)
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Failed to create Client socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Failed to create Client socket [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
|
||||
// Set Status
|
||||
ChangeState( Handle, csFailed );
|
||||
@@ -702,7 +782,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
|
||||
(setsockopt( Handle->FD, SOL_TCP, TCP_KEEPINTVL, &TCPint_opt, sizeof(TCPint_opt)) == -1) ))
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Could not set KeepAlive options [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, 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 );
|
||||
@@ -720,7 +800,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
|
||||
|
||||
if (!connect( Handle->FD, (struct sockaddr *)&address, addr_len ))
|
||||
{
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Client connected [%s:%d]", Name, Handle->Name, Handle->Address, Handle->PortNo );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Client connected [%s:%d]", Name, Handle->Name, Handle->Address, Handle->PortNo );
|
||||
|
||||
// Add to Select Lists
|
||||
if (Select) {
|
||||
@@ -734,7 +814,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
|
||||
else if ((errno == EAGAIN) || (errno == EWOULDBLOCK) || (errno == EINPROGRESS) || (errno == EALREADY))
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Client waiting to connect [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, 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) {
|
||||
@@ -748,7 +828,7 @@ int CSelectableCore::OpenClientSocket( THandle * Handle )
|
||||
else
|
||||
{
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Client could not connect [%s:%d] (%s)", Name, Handle->Name, Handle->Address, Handle->PortNo, strerror(errno) );
|
||||
if (Log) Log->Message( LogLevel, 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) {
|
||||
@@ -844,29 +924,29 @@ bool CSelectableCore::Close( THandle * Handle, bool CloseChildren )
|
||||
{
|
||||
case ctPort:
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Port %s [%s]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Path );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Port %s [%s]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Path );
|
||||
break;
|
||||
|
||||
case ctForkPipe:
|
||||
// Log Event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Forked Pipe %s", Name, Handle->Name, ((Fail)? "failed" : "closed"));
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Forked Pipe %s", Name, Handle->Name, ((Fail)? "failed" : "closed"));
|
||||
break;
|
||||
|
||||
case ctServer:
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Server %s [%s:%d]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address, Handle->PortNo );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Server %s [%s:%d]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address, Handle->PortNo );
|
||||
break;
|
||||
|
||||
case ctRemoteClient:
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Remote Client connection %s [%s]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Remote Client connection %s [%s]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address );
|
||||
break;
|
||||
|
||||
case ctClient:
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Client connection %s [%s:%d]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address, Handle->PortNo );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Client connection %s [%s:%d]", Name, Handle->Name, ((Fail)? "failed" : "closed"), Handle->Address, Handle->PortNo );
|
||||
break;
|
||||
|
||||
case ctNone:
|
||||
default:
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - %s, invalid Handle type", Name, Handle->Name, ((Fail)? "failed" : "closed") );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - %s, invalid Handle type", Name, Handle->Name, ((Fail)? "failed" : "closed") );
|
||||
break;
|
||||
};
|
||||
|
||||
@@ -894,7 +974,7 @@ bool CSelectableCore::Read( THandle * Handle )
|
||||
}
|
||||
|
||||
// Log Read Event
|
||||
if (Log) Log->Message( DebugLevel, dlHigh, "%s: Handle '%s' - Read Event", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Read Event", Name, Handle->Name );
|
||||
|
||||
// Check for closing/opening event on Socket
|
||||
if (Handle->Type == ctServer)
|
||||
@@ -970,7 +1050,7 @@ bool CSelectableCore::Write( THandle * Handle )
|
||||
}
|
||||
|
||||
// Log Ready for Write Event
|
||||
if (Log) Log->Message( DebugLevel, dlHigh, "%s: Handle '%s' - Write Event", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlHigh, "%s: Handle '%s' - Write Event", Name, Handle->Name );
|
||||
|
||||
if (Handle->State == csWaitingtoOpen)
|
||||
{
|
||||
@@ -994,10 +1074,10 @@ bool CSelectableCore::Write( THandle * Handle )
|
||||
// Write to FD directly from output buffer
|
||||
if ((BytesWritten = Handle->OutBuffer->WriteToFD( Handle->FD )))
|
||||
{
|
||||
if (DebugLevel >= dlHigh) {
|
||||
if (LogLevel >= dlHigh) {
|
||||
// Show event
|
||||
Len = Handle->OutBuffer->Peek( &Data );
|
||||
if (Log) Log->Output( DebugLevel, dlHigh, OutputDisplay, Data, Len, "%s: Handle '%s' - OUT:", Name, Handle->Name );
|
||||
if (Log) Log->Output( LogLevel, dlHigh, LogOutput, Data, Len, "%s: Handle '%s' - OUT:", Name, Handle->Name );
|
||||
}
|
||||
|
||||
// Update Buffer
|
||||
@@ -1042,7 +1122,7 @@ bool CSelectableCore::ProcessBuffer( THandle * Handle, bool Force )
|
||||
{
|
||||
// Show Packet
|
||||
Len = Handle->InBuffer->Peek( &Data );
|
||||
if (Log) Log->Output( DebugLevel, dlHigh, OutputDisplay, Data, Len, "%s: Handle '%s' - IN-T:", Name, Handle->Name );
|
||||
if (Log) Log->Output( LogLevel, dlHigh, LogOutput, Data, Len, "%s: Handle '%s' - IN-T:", Name, Handle->Name );
|
||||
|
||||
// Write buffer to Outputs
|
||||
if (Handle->Type == ctRemoteClient) {
|
||||
@@ -1061,7 +1141,7 @@ bool CSelectableCore::ProcessBuffer( THandle * Handle, bool Force )
|
||||
{
|
||||
// Show Packet
|
||||
Len = Handle->InBuffer->Peek( &Data, 0, Pos+Handle->InMarkerLen );
|
||||
if (Log) Log->Output( DebugLevel, dlHigh, OutputDisplay, Data, Len, "%s: Handle '%s' - IN-M:", Name, Handle->Name );
|
||||
if (Log) Log->Output( LogLevel, dlHigh, LogOutput, Data, Len, "%s: Handle '%s' - IN-M:", Name, Handle->Name );
|
||||
|
||||
// Write buffer to Outputs
|
||||
if (Handle->Type == ctRemoteClient) {
|
||||
@@ -1150,22 +1230,22 @@ int CSelectableCore::Input( const char * ChannelName, const char * Data, int Len
|
||||
// Get File handle
|
||||
if (!(Handle = GetHandle( ChannelName ))) {
|
||||
// Handle not found
|
||||
if (Log) Log->Message( DebugLevel, dlHigh, "%s: Channel '%s' - Input rejected, Handle not found", Name, ChannelName );
|
||||
if (Log) Log->Message( LogLevel, dlHigh, "%s: Channel '%s' - Input rejected, Handle not found", Name, ChannelName );
|
||||
return 0;
|
||||
}
|
||||
else if (Handle->Channel && !Handle->Channel->InputEnabled) {
|
||||
// Handle is not open
|
||||
if (Log) Log->Message( DebugLevel, dlHigh, "%s: Channel '%s' - Input rejected, Channel input disabled", Name, ChannelName );
|
||||
if (Log) Log->Message( LogLevel, dlHigh, "%s: Channel '%s' - Input rejected, Channel input disabled", Name, ChannelName );
|
||||
return 0;
|
||||
}
|
||||
else if (Handle->State != csOpen) {
|
||||
// Handle is not open
|
||||
if (Log) Log->Message( DebugLevel, dlHigh, "%s: Channel '%s' - Input rejected, Handle not Open", Name, ChannelName );
|
||||
if (Log) Log->Message( LogLevel, dlHigh, "%s: Channel '%s' - Input rejected, Handle not Open", Name, ChannelName );
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Log event
|
||||
if (Log) Log->Output( DebugLevel, dlHigh, OutputDisplay, Data, Len, "%s: Channel '%s' - IN:", Name, ChannelName );
|
||||
if (Log) Log->Output( LogLevel, dlHigh, LogOutput, Data, Len, "%s: Channel '%s' - IN:", Name, ChannelName );
|
||||
|
||||
// Check packet length
|
||||
if (Len == -1) {
|
||||
@@ -1198,7 +1278,7 @@ int CSelectableCore::Input( const char * ChannelName, const char * Data, int Len
|
||||
BytesWritten = WriteToFD( ChildHandle->FD, Data, Len, true );
|
||||
|
||||
// Show event
|
||||
if (Log) Log->Output( DebugLevel, dlHigh, OutputDisplay, Data, Len, "%s: Handle '%s' - OUT:", Name, ChildHandle->Name );
|
||||
if (Log) Log->Output( LogLevel, dlHigh, LogOutput, Data, Len, "%s: Handle '%s' - OUT:", Name, ChildHandle->Name );
|
||||
}
|
||||
}
|
||||
// Next
|
||||
@@ -1224,7 +1304,7 @@ int CSelectableCore::Input( const char * ChannelName, const char * Data, int Len
|
||||
else
|
||||
{
|
||||
// Show event
|
||||
if (Log) Log->Output( DebugLevel, dlHigh, OutputDisplay, Data, Len, "%s: Handle '%s' - OUT:", Name, Handle->Name );
|
||||
if (Log) Log->Output( LogLevel, dlHigh, LogOutput, Data, Len, "%s: Handle '%s' - OUT:", Name, Handle->Name );
|
||||
|
||||
// Write directly to handle
|
||||
BytesWritten = WriteToFD( Handle->FD, Data, Len, true );
|
||||
@@ -1244,10 +1324,10 @@ bool CSelectableCore::Process()
|
||||
while (Handle)
|
||||
{
|
||||
// Auto manage handles
|
||||
if (Handle->Auto && ((Handle->State == csNone) || (Handle->State == csFailed) || (Handle->State == csClosed)))
|
||||
if (Handle->AutoManage && ((Handle->State == csNone) || (Handle->State == csFailed) || (Handle->State == csClosed)))
|
||||
{
|
||||
// Check duration since last PortIn
|
||||
if (Timeout( Handle->ReopenStart, Handle->ReopenTimeout ))
|
||||
if (Timeout( Handle->ReopenStart, Handle->ReopenDelay ))
|
||||
{
|
||||
// Complete opening process
|
||||
if (Open( Handle ) == -1)
|
||||
@@ -1412,13 +1492,13 @@ bool CSelectableCore::SerialConfig( THandle * Handle, int Baud, short DataBits,
|
||||
if (tcsetattr( Handle->FD, TCSANOW, &newtio ) != 0)
|
||||
{
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Port not configured", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Port not configured", Name, Handle->Name );
|
||||
return false;
|
||||
}
|
||||
|
||||
// Port configured
|
||||
// Log event
|
||||
if (Log) Log->Message( DebugLevel, dlMedium, "%s: Handle '%s' - Port configured", Name, Handle->Name );
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Port configured", Name, Handle->Name );
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user