Important Update:
- Complete Async resolve:
- Remove Resolving param from THandle
- Rename state csResolving -> csPreparing
- Added handle state csPrepared, to indicated resolve complete
- Open handle if state = csPrepared
- Remove Resolve delay (not required since async resolve)
- remove from JSON config as well
This commit is contained in:
@@ -184,7 +184,7 @@ bool CSelectableBare::HandleState( THandle * Handle, EConnectState State )
|
||||
|
||||
// Update Channel
|
||||
if (Handle->Channel) {
|
||||
if ((Handle->State == csOpenRequest) || (Handle->State == csWaitingtoOpen))
|
||||
if ((Handle->State == csPreparing) || (Handle->State == csPrepared) || (Handle->State == csWaitingtoOpen))
|
||||
ChannelState = CH_wait;
|
||||
else if ((Handle->State == csOpen) || (Handle->State == csDataWaiting))
|
||||
ChannelState = CH_ready;
|
||||
@@ -331,7 +331,7 @@ bool CSelectableBare::ProcessInputBuffer( THandle * Handle, bool Force )
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int CSelectableBare::Open( THandle * Handle, bool DelayResolve )
|
||||
int CSelectableBare::Open( THandle * Handle )
|
||||
{
|
||||
THandle * NewHandle = NULL;
|
||||
|
||||
@@ -513,7 +513,7 @@ bool CSelectableBare::Write( THandle * Handle )
|
||||
else if (Timeout( Handle->LastAction, Handle->ReopenDelay ))
|
||||
{
|
||||
// Attempt to re-open port
|
||||
Open( Handle, true );
|
||||
Open( Handle );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -731,11 +731,11 @@ int CSelectableBare::OutputHandle( THandle * Handle, const char * Data, int Len
|
||||
else if (Timeout( Handle->LastAction, Handle->ReopenDelay ))
|
||||
{
|
||||
// Complete opening process
|
||||
Open( Handle, true );
|
||||
Open( Handle );
|
||||
|
||||
// Check if Handle is open
|
||||
if (Handle->State == csOpenRequest) {
|
||||
if (Log) Log->Message( LogLevel, dlHigh, "%s/%s: Handle '%s' - Input rejected, Request to resolve (auto-managed) Handle",
|
||||
if ((Handle->State == csPreparing) || (Handle->State == csPrepared)) {
|
||||
if (Log) Log->Message( LogLevel, dlHigh, "%s/%s: Handle '%s' - Input rejected, Preparing (auto-managed) Handle",
|
||||
ProcessName, Name, Handle->Name );
|
||||
return 0;
|
||||
}
|
||||
@@ -812,27 +812,21 @@ bool CSelectableBare::Process()
|
||||
while (Handle)
|
||||
{
|
||||
// Auto manage handles
|
||||
if ((Handle->State == csOpenRequest))
|
||||
{
|
||||
// Resolve then open socket
|
||||
if (Timeout( Handle->LastAction, Handle->ResolveDelay )) {
|
||||
Open( Handle, false );
|
||||
}
|
||||
if (Handle->State == csPrepared) {
|
||||
// Proceed to open
|
||||
Open( Handle );
|
||||
}
|
||||
else if (((Handle->State != csOpen) && Handle->AutoManage && Handle->Persistent) )
|
||||
{
|
||||
else if ((Handle->State != csOpen) && Handle->AutoManage && Handle->Persistent) {
|
||||
// Try to re-open port after delay
|
||||
if (Timeout( Handle->LastAction, Handle->ReopenDelay )) {
|
||||
Open( Handle, false );
|
||||
Open( Handle );
|
||||
}
|
||||
}
|
||||
|
||||
// Check Input buffers
|
||||
if (Handle->InBuffer && (Handle->InBuffer->Len() > 0))
|
||||
{
|
||||
if (Handle->InBuffer && (Handle->InBuffer->Len() > 0)) {
|
||||
// Check duration since last PortIn
|
||||
if (Timeout( Handle->InStart, Handle->InTimeout ))
|
||||
{
|
||||
if (Timeout( Handle->InStart, Handle->InTimeout )) {
|
||||
// Process Input
|
||||
ProcessInputBuffer( Handle, true );
|
||||
|
||||
@@ -842,14 +836,12 @@ bool CSelectableBare::Process()
|
||||
}
|
||||
|
||||
// Check for auto close (but not on servers)
|
||||
if ((Handle->State == csOpen) && (Handle->Type != ctTCPserver) && (Handle->Type != ctUNIXserver) && Handle->AutoManage && !Handle->Persistent)
|
||||
{
|
||||
if ((Handle->State == csOpen) && Handle->AutoManage && !Handle->Persistent) {
|
||||
// Close port after timeout
|
||||
if (Timeout( Handle->LastAction, Handle->CloseTimeout )) {
|
||||
Close( Handle, true );
|
||||
}
|
||||
}
|
||||
|
||||
Handle = Handle->Next;
|
||||
}
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user