LaunchAPPLServer: use separate OT endpoints for connection

This commit is contained in:
Wolfgang Thaller 2019-01-11 00:46:36 +01:00
parent f1f9cf9099
commit 1fc19efaeb
2 changed files with 56 additions and 34 deletions

View File

@ -21,8 +21,8 @@ OpenTptStream::OpenTptStream()
OSStatus err; OSStatus err;
//endpoint = OTOpenEndpoint(OTCreateConfiguration(kTCPName), 0, nullptr, &err); listenerEndpoint = OTOpenEndpoint(OTCreateConfiguration(kTCPName), 0, nullptr, &err);
endpoint = OTOpenEndpoint(OTCreateConfiguration(kTCPName), 0, nullptr, &err); endpoint = nullptr;
InetAddress addr, retAddr; InetAddress addr, retAddr;
OTInitInetAddress(&addr, 1984, 0); OTInitInetAddress(&addr, 1984, 0);
@ -36,10 +36,10 @@ OpenTptStream::OpenTptStream()
ret.addr.buf = (UInt8*) &retAddr; ret.addr.buf = (UInt8*) &retAddr;
endpoint->Bind(&req, &ret); listenerEndpoint->Bind(&req, &ret);
listenerEndpoint->SetSynchronous();
endpoint->SetSynchronous();
endpoint->SetNonBlocking();
tryListening(); tryListening();
} }
@ -56,7 +56,8 @@ void OpenTptStream::tryListening()
OSStatus err; OSStatus err;
err = endpoint->Listen(&call); listenerEndpoint->SetNonBlocking();
err = listenerEndpoint->Listen(&call);
#ifdef DEBUG_CONSOLE #ifdef DEBUG_CONSOLE
printf("Listen: err = %d.\n", (int)err); printf("Listen: err = %d.\n", (int)err);
#endif #endif
@ -64,9 +65,15 @@ void OpenTptStream::tryListening()
if(err < 0) if(err < 0)
return; // hopefully, kOTNoData return; // hopefully, kOTNoData
endpoint->SetBlocking(); if(!endpoint)
{
endpoint = OTOpenEndpoint(OTCreateConfiguration(kTCPName), 0, nullptr, &err);
endpoint->SetSynchronous();
}
err = endpoint->Accept(endpoint, &call); listenerEndpoint->SetBlocking();
err = listenerEndpoint->Accept(endpoint, &call);
#ifdef DEBUG_CONSOLE #ifdef DEBUG_CONSOLE
printf("Accept: err = %d.\n", (int)err); printf("Accept: err = %d.\n", (int)err);
#endif #endif
@ -79,12 +86,17 @@ void OpenTptStream::tryListening()
OpenTptStream::~OpenTptStream() OpenTptStream::~OpenTptStream()
{ {
endpoint->SetSynchronous(); if(endpoint)
{
endpoint->SetNonBlocking(); endpoint->SetNonBlocking();
if(connected) if(connected)
endpoint->SndDisconnect(&call); endpoint->SndDisconnect(&call);
endpoint->Unbind(); endpoint->Unbind();
OTCloseProvider(endpoint); OTCloseProvider(endpoint);
}
listenerEndpoint->SetNonBlocking();
listenerEndpoint->Unbind();
OTCloseProvider(listenerEndpoint);
CloseOpenTransport(); CloseOpenTransport();
} }
@ -112,6 +124,8 @@ void OpenTptStream::tryReading()
void OpenTptStream::idle() void OpenTptStream::idle()
{ {
OSStatus err; OSStatus err;
if(connected)
{
switch(endpoint->Look()) switch(endpoint->Look())
{ {
case T_DISCONNECT: case T_DISCONNECT:
@ -126,11 +140,18 @@ void OpenTptStream::idle()
connected = false; connected = false;
tryListening(); tryListening();
break; break;
case T_LISTEN:
tryListening();
break;
case T_DATA: case T_DATA:
tryReading(); tryReading();
break; break;
} }
} }
else
{
switch(listenerEndpoint->Look())
{
case T_LISTEN:
tryListening();
break;
}
}
}

View File

@ -11,6 +11,7 @@ class OpenTptStream : public Stream
bool connected = false; bool connected = false;
TEndpoint *listenerEndpoint;
TEndpoint *endpoint; TEndpoint *endpoint;
TCall call; TCall call;