Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

404 lines
12 KiB

/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
arap.h
Abstract:
This module is the include file for the arap structures.
Author:
Garth Conboy Initial Coding
Nikhil Kamkolkar Rewritten for microsoft coding style
Revision History:
--*/
// Valid dial-in user list.
typedef struct ul {
struct ul far *next; // Next user info.
char far *userName; // The user name.
char password[8]; // The password; padded with
// nulls.
//
//
Boolean callBack; // Should this user be called
// back before connection
// establishment?
//
char far *callBackModemString;
//
// If call back is true, this is
// string passed to the modem to
// do the call; includes phone
// number, one would hope.
//
ULONG maxConnectTime;
//
// -1 for infinite. How many
// seconds can this user be
// connected for; if zero, the
// default valud is used.
//
} *RemoteAccessUserList;
//
// The configuration info for a remote access port; we simply move this
// pointer from portInfo to portDescriptors; we do not make a copy!
//
typedef struct rac {
PCHAR serverName; // Used in the StartInfoFromServer
// packet.
//
Boolean guestLoginsOkay;
//
// Do we allow no-password
// logins on this port?
//
ULONG defaultMaxConnectTime;
//
// -1 for infinite. If the per-
// user value for this timer is
// zero, we'll use this value; if
// this value is zero, we'll use
// -1.
//
//
long baudRate; // Baud rate of the port in KBPS
// (e.g. 1200, 9600, etc.). This
// value can be dynamically changed
// BEFORE a call to the
// "incomingCall" routine is
// made.
//
RemoteAccessUserList userList;
// User/password/callback info.
} *RemoteAccessConfigurationInfo,
REMOTEACCESS_CONFIGURATIONINFO, *PREMOTEACCESS_CONFIGURATIONINFO ;
// The various states a remote access port can be in.
typedef enum {
ArapNotInitialized, // Don't have our node yet
ArapWaiting, // Waiting for connection
ArapLinkArbitrationAcceptor, // Just got a call
ArapLinkArbitrationResult, // Got request; sending result
ArapServerVersion, // Sending server version
ArapAuthorizationChallenge, // Sending "auth challenge"
ArapAuthorizationRepsonse, // Sending "auth response"
//
ArapAuthRespWaitingForAck, // Waiting for ack from
// ArapAuthorizationResponse
//
//
ArapWaitingForCallback, // Waiting for callback to
// complete
//
ArapLinkArbitrationOriginator,
// Just got callback
ArapStartingUp, // Sending "startInfoFromServer"
ArapZoneList, // Sending "zoneListInfo"
ArapActive // Fully connected
} RemoteAccessState;
//
// Master info block for controling remote access operation on a port. This
// guy is pointed to by the portDescriptors.
//
typedef struct {
RemoteAccessConfigurationInfo configuration;
// From portInfo.
//
RemoteAccessState state; // The state of activity on the
// remote acess port.
//
unsigned char nextOutgoingSequenceNumber;
// Next sequence number to send.
unsigned char nextIncomingSequenceNumber;
//
// Expected next incoming sequence
// number.
//
#if IncludeVirtualClient
unsigned char virtualClientSequenceNumber;
char clientRandomEightBytes[8];
#endif
ULONG retransmitSeconds;
//
// Calculated from "baudRate" when
// handling an incoming call. How
// frequently should we send the
// below buffer while waiting for
// an ack.
//
BufferDescriptor retransmitChain;
//
// Data of current pending internal
// message. This is Empty when
// we've gotten as ack and there
// is no packet to resend.
//
int retransmitLength; // Length of buffer chain.
ULONG lastRetransmitTime;
//
// The last time that we sent the
// above buffer.
//
ULONG maxConnectTime;
//
// Maximum length of connection
// allowed (seconds), for the
// "current" user. -1 for
// infinite.
//
ULONG connectTime;
//
// How long have we been connected
// so far for the "current"
// active session?
//
ULONG lastContactTime;
//
// The last time we heard anything
// from the client.
//
short unsigned lastThisNet;
//
// The previous value for "this
// net" that we sent in a tickle
// packet.
//
struct activeNode *proxyNode;
//
// The node, on the default port,
// that is the proxy node for this
// user.
//
int proxyPort; // The default port, no doubt.
//
char randomEightBytes[8]; // Two long random numbers used for
// two way DES authorization.
//
RemoteAccessUserList currentUser;
//
// When processing authentication,
// what user?
//
//
short result; // When building SRP packets, what
// result code?
//
//
PZONE_LIST zoneList; // Zone list that we're currenting
// sending for startup.
//
//
PZONE_LIST currentZone; // Where we are on the above list
// list for multi-packet sends.
//
} *RemoteAccessInfo, REMOTEACCESS_INFO, *PREMOTEACCESS_INFO;
#define ArapInfiniteConnectTime ((ULONG)-1)
//
// For processing the sending of the zone list to the client. How much
// space do we allocate for getting the zone list? How many zones will
// we send in a single ZoneListInfo packet (these will fit without overflow
// with maximum sized zones).
//
#define ArapZoneListBufferSize 2048
#define ArapZonesPerPacket 16
//
// We tickle every 20 seconds, and teardown after 60. If we're waiting for
// a callback, we'll be a little more patient. We use a tickle timer at the
// fastest rate (>= 4800 baud); one timer handles all ports; each according
// to its baud rate.
//
#define RemoteAccessTickleSeconds 20
#define RemoteAccessTeardownSeconds 60
#define RemoteAccessCallBackSeconds 90
#define ArapRetransmitTimerSeconds 2
//
// First we use the server name is RemoteAccessConfigurationInfo, if it's
// missing, we use the following:
//
#if defined (NETBLAZER)
#define DefaultRemoteAccessServerName "NetBlazer ARA Server"
#define RemoteAccessServerNameTail " (Telebit NetBlazer)"
#else
#define DefaultRemoteAccessServerName "Pacer ARAP Server"
#endif
#define ArapLargestPacketSize 604
// Modem Link Tool packet offsets for the Simple Reliable Protocol.
#define ModemLinkToolLengthOffset 0
#define ModemLinkToolDataOffset 2
#define ArapFlagsOffset 2
#define ArapSequenceNumberOffset 3
#define ArapLapHeaderOffset 3
#define ArapCommandOffset 4
#define ArapCommandDataOffset 6
#define ArapDdpHeaderOffset (ArapLapHeaderOffset + LAP_HEADERLENGTH)
#define ArapDataHeaderLength ArapDdpHeaderOffset
#define ArapInternalMessageHeaderLength ArapCommandOffset
//
// Offsets within in Modem Link Tool packet used to define the Link
// Arbitration Packet.
//
#define LinkArbPacketTypeOffset 0
#define LinkArbResultOffset 2
#define LinkArbVersionOffset 4
#define LinkArbIdLengthOffset 8
#define LinkArbIdStringOffset 9
#define LinkArbIdString "Remote Access"
#define LinkArbPacketDataSize (LinkArbIdStringOffset + \
sizeof(LinkArbIdString) - 1)
// Link arbitration packet types.
#define LinkArbConnectionRequest 1
#define LinkArbConnectionResult 2
// Version numbers, for link arbitration and Arap.
#define LinkArbVersion 0x01008000
#define ArapVersion 0x01008000
// Shortest Arap packet is an SRP ack: flags, seqnum, command = ack.
#define ShortestArapPacketLength 4
// Arap internal message command numbers.
#define ArapAckCommand 0
#define ArapServerVersionCommand 1
#define ArapRemoteVersionCommand 2
#define ArapAuthChallengeCommand 3
#define ArapAuthRequestCommand 4
#define ArapAuthResponseCommand 5
#define ArapServerStartInfoCommand 6
#define ArapRemoteStartInfoCommand 7
#define ArapZoneListCommand 8
#define ArapTickleCommand 9
#define ArapTimeLeftCommand 10
#define ArapTimerCancelledCommand 11
// Arap header flags values.
#define ArapFixupFlag 0x80
#define ArapPacketDataFlag 0x40
#define ArapTokenizedFlag 0x20
#define ArapLastGroupFlag 0x10
#define ArapRangeFlag 0x08
#define ArapWantSequencedFlag 0x04
#define ArapWantPacketSequencedFlag 0x02
#define ArapReservedFlag 0x01
#define ArapInternalMessageFlagValue ArapLastGroupFlag
#define ArapLinkArbFlagValue 0
// Internal message packet offsets (offset after command field).
#define ArapTickleTheNetOffset 0
#define ArapTickleTimeLeftOffset 2
#define ArapTickleDataSize 6
#define ArapSvrVersionLowVersionOffset 0
#define ArapSvrVersionHighVersionOffset 4
#define ArapSvrVersionDataSize 8
#define ArapRmtVersionVersionOffset 0
#define ArapRmtVersionResultOffset 4
#define ArapRmtVersionDataSize 6
#define ArapAuthChallengeAuthTypeOffset 0
#define ArapAuthChallengeRandomOffset 4
#define ArapAuthChallengeDataSize 12
#define ArapAuthRequestResultOffset 0
#define ArapAuthRequestRandomOffset 2
#define ArapAuthRequestRandResultOffset 10
#define ArapAuthRequestGuestOffset 18
#define ArapAuthRequestUserNameOffset 20
#define ArapAuthRequestUserNameSize 34
#define ArapAuthRequestDataSize 54
#define ArapAuthResponseResultOffset 0
#define ArapAuthResponseRandResultOffset 2
#define ArapAuthResponseDataSize 10
#define ArapSvrStartSendBufSizeOffset 0
#define ArapSvrStartRcvBufSizeOffset 4
#define ArapSvrStartRealNetOffset 8
#define ArapSvrStartRealNodeOffset 10
#define ArapSvrStartMaxTimeOffset 12
#define ArapSvrStartAsNetOffset 16
#define ArapSvrStartAsNodeOffset 18
#define ArapSvrStartSvrZoneOffset 20
#define ArapSrvStartSvrZoneSize 34
#define ArapSvrStartSvrNameOffset 54
#define ArapSvrStartSvrNameSize 34
#define ArapSvrStartDataSize 88
#define ArapRmtStartSendBufSizeOffset 0
#define ArapRmtStartRcvBufSizeOffset 4
#define ArapRmtStartRealNetOffset 8
#define ArapRmtStartRealNodeOffset 10
#define ArapRmtStartDataSize 12
#define ArapZoneListLastFlagOffset 0
#define ArapZoneListZoneListOffset 1
#define ArapTimeLeftTimeLeftOffset 0
#define ArapTimeLeftDataSize 4
#define ArapTimerCncledTimeLeftOffset 0
#define ArapTimerCancelledDataSize 4
// Error codes.
#define LinkArbErrNoError 0
#define LinkArbErrNotAvailable (-5902)
#define LinkArbErrBadVersion (-5906)
#define LinkArbErrConnectionRefused (-5915)
#define ERR_VLD8_NOERROR 0
#define ERR_VLD8_CALLBACK (-5819)
#define ERR_VLD8_BADVERSION (-5820)
#define ERR_VLD8_BADUSER (-5821)
#define ERR_VLD8_BADPASSWORD (-5822)
#define ERR_VLD8_BADLINK (-5823)
#define ERR_VLD8_NOCALLBACKALLOWED (-5824)
#define ERR_VLD8_ALLCBSERVERSBUSY (-5825)
#define ERR_VLD8_GUESTNOTALLOWED (-5826)
#define ERR_VLD8_SERVERISIMPOSTER (-5827)
#define ERR_VLD8_LOGINNOTENABLED (-5828)
// Define authentication type supported.
#define ArapAuthTypeTwoWayDes 1
// Virtual client debug code/data declarations.
#if ArapIncluded and IncludeVirtualClient
extern void far VirtualClientPacketIn(int port, char far *packet);
#endif