1 line
10 KiB
C
Executable File
1 line
10 KiB
C
Executable File
/* Copyright (c) 2017, Computer History Museum
|
|
All rights reserved.
|
|
Redistribution and use in source and binary forms, with or without modification, are permitted (subject to
|
|
the limitations in the disclaimer below) provided that the following conditions are met:
|
|
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
|
disclaimer in the documentation and/or other materials provided with the distribution.
|
|
* Neither the name of Computer History Museum nor the names of its contributors may be used to endorse or promote products
|
|
derived from this software without specific prior written permission.
|
|
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE
|
|
COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
|
DAMAGE. */
|
|
|
|
#ifndef TCP_H
|
|
#define TCP_H
|
|
|
|
/* Copyright (c) 1990-1992 by the University of Illinois Board of Trustees */
|
|
/************************************************************************
|
|
* declarations for dealing with tcp streams
|
|
************************************************************************/
|
|
|
|
enum {
|
|
NUM_ALT_ADDRS = 4
|
|
};
|
|
|
|
struct hostInfo {
|
|
long rtnCode;
|
|
char cname[255];
|
|
SInt8 filler; /* Filler for proper byte alignment */
|
|
unsigned long addr[NUM_ALT_ADDRS];
|
|
};
|
|
typedef struct hostInfo hostInfo;
|
|
|
|
typedef struct HIQ HostInfoQ, *HostInfoQPtr, **HostInfoQHandle;
|
|
struct HIQ
|
|
{
|
|
HostInfoQHandle next;
|
|
struct hostInfo hi;
|
|
short done;
|
|
Boolean inUse;
|
|
};
|
|
|
|
void TcpFastFlush(Boolean destroy);
|
|
|
|
int GetTCPStatus(TransStream stream,TCPiopb *pb);
|
|
OSErr GetHostByAddr(struct hostInfo *hi, long addr);
|
|
int GetHostByName(UPtr name, struct hostInfo **hostInfoPtr);
|
|
OSErr GetMyHostid(uLong *myAddr,uLong *myMask);
|
|
Boolean SplitPort(PStr host,long *port);
|
|
|
|
|
|
// These are PPP error codes, not yet defined in the OT Headers.
|
|
// Remove these once the OT/PPP header is finalized.
|
|
|
|
#define kCCLErrorBaseCode -6000
|
|
#define kCCLErrorAbortMatchRead kCCLErrorBaseCode // internal error used to abort match read
|
|
#define kCCLErrorGeneric (kCCLErrorBaseCode - 2) // CCL error base
|
|
#define kCCLErrorSubroutineOverFlow (kCCLErrorBaseCode - 3) // target label undefined
|
|
#define kCCLErrorLabelUndefined (kCCLErrorBaseCode - 4) // target label undefined
|
|
#define kCCLErrorBadParameter (kCCLErrorBaseCode - 5) // bad parameter error
|
|
#define kCCLErrorDuplicateLabel (kCCLErrorBaseCode - 6) // duplicate label error
|
|
#define kCCLErrorCloseError (kCCLErrorBaseCode - 7) // There is at least one script open
|
|
#define kCCLErrorScriptCancelled (kCCLErrorBaseCode - 8) // Script Canceled
|
|
#define kCCLErrorTooManyLines (kCCLErrorBaseCode - 9) // Script contains too many lines
|
|
#define kCCLErrorScriptTooBig (kCCLErrorBaseCode - 10) // Script contains too many characters
|
|
#define kCCLErrorNotInitialized (kCCLErrorBaseCode - 11) // CCL has not been initialized
|
|
#define kCCLErrorCancelInProgress (kCCLErrorBaseCode - 12) // Cancel in progress.
|
|
#define kCCLErrorPlayInProgress (kCCLErrorBaseCode - 13) // Play command already in progress.
|
|
#define kCCLErrorExitOK (kCCLErrorBaseCode - 14) // Exit with no error.
|
|
#define kCCLErrorLabelOutOfRange (kCCLErrorBaseCode - 15) // Label out of range.
|
|
#define kCCLErrorBadCommand (kCCLErrorBaseCode - 16) // Bad command.
|
|
#define kCCLErrorEndOfScriptErr (kCCLErrorBaseCode - 17) // End of script reached, expecting Exit.
|
|
#define kCCLErrorMatchStrIndxErr (kCCLErrorBaseCode - 18) // Match string index is out of bounds.
|
|
#define kCCLErrorModemErr (kCCLErrorBaseCode - 19) // Modem error, modem not responding.
|
|
#define kCCLErrorNoDialTone (kCCLErrorBaseCode - 20) // No dial tone.
|
|
#define kCCLErrorNoCarrierErr (kCCLErrorBaseCode - 21) // No carrier.
|
|
#define kCCLErrorLineBusyErr (kCCLErrorBaseCode - 22) // Line busy.
|
|
#define kCCLErrorNoAnswerErr (kCCLErrorBaseCode - 23) // No answer.
|
|
#define kCCLErrorNoOriginateLabel (kCCLErrorBaseCode - 24) // No @ORIGINATE
|
|
#define kCCLErrorNoAnswerLabel (kCCLErrorBaseCode - 25) // No @ANSWER
|
|
#define kCCLErrorNoHangUpLabel (kCCLErrorBaseCode - 26) // No @HANGUP
|
|
#define kCCLErrorVarStringRange (kCCLErrorBaseCode - 27) // varString value out-of-range
|
|
#define kCCLErrorBaudRateUnavail (kCCLErrorBaseCode - 28) // h/w can't supply this rate
|
|
#define kCCLErrorBaudRateChanged (kCCLErrorBaseCode - 29) // OT can't supply this rate
|
|
|
|
#define kCCLErrorStart kCCLErrorGeneric // first error in the ccl range
|
|
#define kCCLErrorEnd kCCLErrorBaudRateChanged // last error in the ccl range
|
|
|
|
|
|
|
|
#define NUM_MX 10 // The number of MX's to look for from a particular host
|
|
|
|
// Some error codes describing errors we get when using OT TCP
|
|
enum
|
|
{
|
|
errOTInitFailed = 700, // OT failed to be initialized
|
|
errOTInetSvcs, // OT failed to open up the internet services
|
|
errDNR, // A DNR-related error occured
|
|
errNoMXRecords, // no MX records were found for a particular server
|
|
errCreateStream, // failed to create a new MyTStream struct
|
|
errOpenStream, // failed to establish a connection
|
|
errLostConnection, // lost connection
|
|
errMiscRec, // some error occurred while receiving
|
|
errMiscSend, // some error occurred during send operation
|
|
errPPPConnect, // some error occurred while connecting with PPP
|
|
errPPPPrefNotFound, // could not find the TCP/IP preferences file
|
|
errPPPStateUnknown, // could not determine the state of the current PPP connection.
|
|
errOTMissingLib, // one of the OT libraries is missing.
|
|
errMyLastOTErr
|
|
};
|
|
|
|
// Return codes for SelectedConnectionMode function
|
|
enum
|
|
{
|
|
kPPPSelected,
|
|
kMacSLIPSelected,
|
|
kOtherSelected
|
|
};
|
|
|
|
// PPP conenction state enum.
|
|
enum
|
|
{
|
|
kPPPLoaded = 0 ,
|
|
kPPPNotLoaded,
|
|
kPPPDown,
|
|
kPPPClosing,
|
|
kPPPUp,
|
|
kPPPOpening
|
|
};
|
|
|
|
// Open Transport Internet services provider info
|
|
typedef struct MyOTInetSvcInfo
|
|
{
|
|
InetSvcRef ref; // provider reference
|
|
short status; // set to 0 when complete
|
|
OTResult result; // result code
|
|
void *cookie; // something to munch on while we wait
|
|
} MyOTInetSvcInfo;
|
|
|
|
// Stream info structure, contains info about a connection
|
|
typedef struct MTS MyOTTCPStream, *MyOTTCPStreamPtr, *MyOTTCPStreamHandle;
|
|
struct MTS
|
|
{
|
|
EndpointRef ref; // endpoint reference
|
|
short status; // 0 when complete, inProgress when, well, in progress
|
|
OTEventCode code; // event code
|
|
OTResult result; // result
|
|
void *cookie; // cookie
|
|
|
|
Boolean weAreClosing; // set to true when we are working on closing the stream.
|
|
Boolean otherSideClosed; // set to true when the other side has closed its connection
|
|
Boolean ourSideClosed; // true when we close our side of the connection
|
|
Boolean releaseMe; // set to true after we can release this stream
|
|
|
|
Str255 dummyBuffer; // a dummy buffer to receive any chars after a disconnect
|
|
|
|
MyOTTCPStreamPtr next; // a pointer to the next MyStream, if queued
|
|
MyOTTCPStreamPtr prev; // a pointer to the prev MyStream, if queued
|
|
|
|
long age; // how old this stream is (in ticks).
|
|
};
|
|
|
|
// PPP info structure, contains info about a PPP connection.
|
|
typedef struct MyOTPPPInfoStruct
|
|
{
|
|
Boolean weConnectedPPP; // set to true if we're the ones that connected ppp
|
|
short state; // stores the state of the PPP connection
|
|
EndpointRef ref; // endpoint reference
|
|
short status; // set to 0 when complete
|
|
short event; // stores which event completed.
|
|
OTResult result; // result code
|
|
OTEventCode code; // event code
|
|
} MyOTPPPInfoStruct, *MyOTPPPInfoPtr;
|
|
|
|
// Functions needed to use OT/TCP's PPP. Others are local to tcp.c
|
|
OSErr OTPPPDisconnect(Boolean forceDisconnect, Boolean endConnectionAttempt);
|
|
|
|
// Functions needed to use OT TCP
|
|
void OTInitOpenTransport(void); // initialize OT if present. May be called even if OT is not installed.
|
|
void OTCleanUpAfterOpenTransport(void); // Clean up after OT. May be called even if OT is not installed.
|
|
|
|
// These are OT versions of the TCP functions declared above.
|
|
OSErr OTTCPConnectTrans(TransStream stream, UPtr serverName, long port,Boolean silently,uLong timeout);
|
|
OSErr OTTCPSendTrans(TransStream stream, UPtr text,long size, ...);
|
|
OSErr OTTCPRecvTrans(TransStream stream, UPtr line,long *size);
|
|
OSErr OTTCPDisTrans(TransStream stream);
|
|
OSErr OTTCPDestroyTrans(TransStream stream);
|
|
OSErr OTTCPTransError(TransStream stream);
|
|
void OTTCPSilenceTrans(TransStream stream, Boolean silence);
|
|
UPtr OTTCPWhoAmI(TransStream stream, Uptr who);
|
|
|
|
void KillDeadMyTStreams(Boolean destroy); //kills streams that have received an orderly disconnect
|
|
|
|
// OT/PPP and connection method related routines
|
|
OSErr SelectedConnectionMode(unsigned long *connectionSelection, Boolean forceRead);
|
|
Boolean NeedToUpdateTP(void);
|
|
Boolean AutoCheckOKWithDBRead(Boolean updatePers);
|
|
Boolean CanCheckPPPState(void);
|
|
Boolean CanChangePPPState(void);
|
|
Boolean PPPDown(void);
|
|
Boolean PPPIsMostDefinitelyUpAndRunning(void);
|
|
OSErr OTConnectForLink(void);
|
|
void OTFlushInput(TransStream stream,uLong timeout);
|
|
#define ALMOST(x) (.95 * x)
|
|
Boolean UserIdle(uLong ticks);
|
|
|
|
OSErr DNSHostid(uLong *dnsAddr);
|
|
OSErr OTMyHostid(uLong *myAddr,uLong *myMask);
|
|
|
|
void OTErrorToString(short specificError, Str255 tcpMessage);
|
|
|
|
TransVector GetTCPTrans();
|
|
|
|
// Check and see if we can connect
|
|
OSErr CheckConnectionSettings ( UPtr host, long port, StringPtr errorMessage );
|
|
|
|
|
|
#endif
|