mirror of https://github.com/macssh/macssh.git
Fixed name resolver problems
This commit is contained in:
parent
04141782d5
commit
199179d467
|
@ -15,6 +15,7 @@
|
||||||
#include <GUSIFactory.h>
|
#include <GUSIFactory.h>
|
||||||
#include <GUSIDevice.h>
|
#include <GUSIDevice.h>
|
||||||
#include <GUSIDescriptor.h>
|
#include <GUSIDescriptor.h>
|
||||||
|
#include <GUSIOTNetDB.h>
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
|
@ -148,6 +149,59 @@ done:
|
||||||
return interrupt;
|
return interrupt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The fSvc field of the GUSIOTNetDB instance is no longer valid after
|
||||||
|
* an interface switch in the TCP/IP control panel.
|
||||||
|
* Let's clear it upon kOTProviderWillClose message.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// <Asynchronous notifier function for [[GUSIOTNetDB]]>=
|
||||||
|
inline uint32_t CompleteMask(OTEventCode code)
|
||||||
|
{
|
||||||
|
return 1 << (code & 0x1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
pascal void GUSIOTNetDBNotify(
|
||||||
|
GUSIOTNetDB * netdb, OTEventCode code, OTResult result, void *cookie)
|
||||||
|
{
|
||||||
|
GUSI_MESSAGE(("GUSIOTNetDBNotify %08x %d\n", code, result));
|
||||||
|
GUSIContext * context = netdb->fCreationContext;
|
||||||
|
|
||||||
|
switch (code & 0x7F000000L) {
|
||||||
|
case 0:
|
||||||
|
netdb->fEvent |= code;
|
||||||
|
result = 0;
|
||||||
|
break;
|
||||||
|
case kPRIVATEEVENT:
|
||||||
|
case kCOMPLETEEVENT:
|
||||||
|
if (!(code & 0x00FFFFE0))
|
||||||
|
netdb->fCompletion |= CompleteMask(code);
|
||||||
|
switch (code) {
|
||||||
|
case T_OPENCOMPLETE:
|
||||||
|
netdb->fSvc = static_cast<InetSvcRef>(cookie);
|
||||||
|
break;
|
||||||
|
case T_DNRSTRINGTOADDRCOMPLETE:
|
||||||
|
case T_DNRADDRTONAMECOMPLETE:
|
||||||
|
context = static_cast<GUSIContext **>(cookie)[-1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (code != kOTProviderWillClose)
|
||||||
|
result = 0;
|
||||||
|
else {
|
||||||
|
/* NONO : need to re-create the fSvc */
|
||||||
|
netdb->fSvc = static_cast<InetSvcRef>(NULL);
|
||||||
|
netdb->fCreationContext = static_cast<GUSIContext *>(NULL);
|
||||||
|
/* NONO */
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (result)
|
||||||
|
netdb->fAsyncError = result;
|
||||||
|
context->Wakeup();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we need to track open()/dup()/close()/socket() calls to close files/sockets
|
* we need to track open()/dup()/close()/socket() calls to close files/sockets
|
||||||
|
|
BIN
macssh/ChangeLog
BIN
macssh/ChangeLog
Binary file not shown.
|
@ -22,6 +22,8 @@
|
||||||
extern QHdr gEventsQueue, gEventsFreeQueue;
|
extern QHdr gEventsQueue, gEventsFreeQueue;
|
||||||
extern short gQueueLength;
|
extern short gQueueLength;
|
||||||
|
|
||||||
|
extern void GUSISetupConfig();
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* neteventinit
|
/* neteventinit
|
||||||
* load up the pointers for the event queue
|
* load up the pointers for the event queue
|
||||||
|
@ -47,4 +49,4 @@ void initnet( void)
|
||||||
networkUPPinit(); //initialize UPP's for TCP callbacks
|
networkUPPinit(); //initialize UPP's for TCP callbacks
|
||||||
// Mnetinit();
|
// Mnetinit();
|
||||||
StartUpFTP();
|
StartUpFTP();
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#include <GUSIFactory.h>
|
#include <GUSIFactory.h>
|
||||||
#include <GUSIDevice.h>
|
#include <GUSIDevice.h>
|
||||||
#include <GUSIDescriptor.h>
|
#include <GUSIDescriptor.h>
|
||||||
#include <GUSINetDB.h>
|
#include <GUSIOTNetDB.h>
|
||||||
#include <GUSISIOUX.h>
|
#include <GUSISIOUX.h>
|
||||||
|
|
||||||
#include <console.h>
|
#include <console.h>
|
||||||
|
@ -85,6 +85,10 @@ void ssh2_init()
|
||||||
|
|
||||||
if ( !sGUSISetup ) {
|
if ( !sGUSISetup ) {
|
||||||
GUSIContext::Setup(true);
|
GUSIContext::Setup(true);
|
||||||
|
|
||||||
|
/* this call initializes the resolver with current context */
|
||||||
|
gethostid();
|
||||||
|
|
||||||
GUSISetupConsole();
|
GUSISetupConsole();
|
||||||
sGUSISetup = true;
|
sGUSISetup = true;
|
||||||
}
|
}
|
||||||
|
@ -247,7 +251,7 @@ void GUSIProcess::Yield(GUSIYieldMode wait)
|
||||||
}
|
}
|
||||||
if (fExistingThreads < 2) // Single threaded process skips sleep only once
|
if (fExistingThreads < 2) // Single threaded process skips sleep only once
|
||||||
fDontSleep = false;
|
fDontSleep = false;
|
||||||
if (wait == kGUSIYield && LMGetTicks() - fResumeTicks < 1) {
|
if (wait == kGUSIYield && LMGetTicks() - fResumeTicks < 12) {
|
||||||
fWillSleep = false;
|
fWillSleep = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -304,6 +308,58 @@ done:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The fSvc field of the GUSIOTNetDB instance is no longer valid after
|
||||||
|
* an interface switch in the TCP/IP control panel.
|
||||||
|
* Let's clear it upon kOTProviderWillClose message.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// <Asynchronous notifier function for [[GUSIOTNetDB]]>=
|
||||||
|
inline uint32_t CompleteMask(OTEventCode code)
|
||||||
|
{
|
||||||
|
return 1 << (code & 0x1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
pascal void GUSIOTNetDBNotify(
|
||||||
|
GUSIOTNetDB * netdb, OTEventCode code, OTResult result, void *cookie)
|
||||||
|
{
|
||||||
|
GUSI_MESSAGE(("GUSIOTNetDBNotify %08x %d\n", code, result));
|
||||||
|
GUSIContext * context = netdb->fCreationContext;
|
||||||
|
|
||||||
|
switch (code & 0x7F000000L) {
|
||||||
|
case 0:
|
||||||
|
netdb->fEvent |= code;
|
||||||
|
result = 0;
|
||||||
|
break;
|
||||||
|
case kPRIVATEEVENT:
|
||||||
|
case kCOMPLETEEVENT:
|
||||||
|
if (!(code & 0x00FFFFE0))
|
||||||
|
netdb->fCompletion |= CompleteMask(code);
|
||||||
|
switch (code) {
|
||||||
|
case T_OPENCOMPLETE:
|
||||||
|
netdb->fSvc = static_cast<InetSvcRef>(cookie);
|
||||||
|
break;
|
||||||
|
case T_DNRSTRINGTOADDRCOMPLETE:
|
||||||
|
case T_DNRADDRTONAMECOMPLETE:
|
||||||
|
context = static_cast<GUSIContext **>(cookie)[-1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (code != kOTProviderWillClose)
|
||||||
|
result = 0;
|
||||||
|
else {
|
||||||
|
/* NONO : need to re-create the fSvc */
|
||||||
|
netdb->fSvc = static_cast<InetSvcRef>(NULL);
|
||||||
|
netdb->fCreationContext = static_cast<GUSIContext *>(NULL);
|
||||||
|
/* NONO */
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (result)
|
||||||
|
netdb->fAsyncError = result;
|
||||||
|
context->Wakeup();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we need to track open()/dup()/close()/socket() calls to close files/sockets
|
* we need to track open()/dup()/close()/socket() calls to close files/sockets
|
||||||
|
@ -454,3 +510,4 @@ int close(int s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue