| 1 | 
      /* | 
    
    
      | 2 | 
       	File:		MacTCP.h | 
    
    
      | 3 | 
        | 
    
    
      | 4 | 
       	Contains:	TCP Manager Interfaces. | 
    
    
      | 5 | 
        | 
    
    
      | 6 | 
       	Version:	Technology:	MacTCP 2.0.6 | 
    
    
      | 7 | 
       				Package:	Universal Interfaces 2.1ß1 in “MPW Prerelease” on ETO #17 | 
    
    
      | 8 | 
        | 
    
    
      | 9 | 
       	Copyright:	© 1984-1995 by Apple Computer, Inc. | 
    
    
      | 10 | 
       				All rights reserved. | 
    
    
      | 11 | 
        | 
    
    
      | 12 | 
       	Bugs?:		If you find a problem with this file, use the Apple Bug Reporter | 
    
    
      | 13 | 
       				stack.  Include the file and version information (from above) | 
    
    
      | 14 | 
       				in the problem description and send to: | 
    
    
      | 15 | 
       					Internet:	apple.bugs@applelink.apple.com | 
    
    
      | 16 | 
       					AppleLink:	APPLE.BUGS | 
    
    
      | 17 | 
        | 
    
    
      | 18 | 
      */ | 
    
    
      | 19 | 
       | 
    
    
      | 20 | 
      #ifndef __MACTCP__ | 
    
    
      | 21 | 
      #define __MACTCP__ | 
    
    
      | 22 | 
       | 
    
    
      | 23 | 
       | 
    
    
      | 24 | 
      #ifndef __TYPES__ | 
    
    
      | 25 | 
      #include <Types.h> | 
    
    
      | 26 | 
      #endif | 
    
    
      | 27 | 
       | 
    
    
      | 28 | 
      #if 0 | 
    
    
      | 29 | 
      #ifndef __APPLETALK__ | 
    
    
      | 30 | 
      #include <AppleTalk.h> | 
    
    
      | 31 | 
      #endif | 
    
    
      | 32 | 
      #endif | 
    
    
      | 33 | 
       | 
    
    
      | 34 | 
      enum { | 
    
    
      | 35 | 
      	kPascalStackBased = 0, | 
    
    
      | 36 | 
      	kCStackBased = 0, | 
    
    
      | 37 | 
      	kThinkCStackBased = 0 | 
    
    
      | 38 | 
      }; | 
    
    
      | 39 | 
      #define SIZE_CODE(size) (0) | 
    
    
      | 40 | 
      #define RESULT_SIZE(sizeCode) (0) | 
    
    
      | 41 | 
      #define STACK_ROUTINE_PARAMETER(whichParam, sizeCode) (0) | 
    
    
      | 42 | 
       | 
    
    
      | 43 | 
      #ifdef __cplusplus | 
    
    
      | 44 | 
      extern "C" { | 
    
    
      | 45 | 
      #endif | 
    
    
      | 46 | 
       | 
    
    
      | 47 | 
      #if PRAGMA_ALIGN_SUPPORTED | 
    
    
      | 48 | 
      #pragma options align=mac68k | 
    
    
      | 49 | 
      #endif | 
    
    
      | 50 | 
       | 
    
    
      | 51 | 
      #if PRAGMA_IMPORT_SUPPORTED | 
    
    
      | 52 | 
      #pragma import on | 
    
    
      | 53 | 
      #endif | 
    
    
      | 54 | 
       | 
    
    
      | 55 | 
      /* | 
    
    
      | 56 | 
      Developer Notes: | 
    
    
      | 57 | 
      		0. This MacTCP header replaces what used to be defined in the following header files | 
    
    
      | 58 | 
      			MacTCPCommonTypes.h | 
    
    
      | 59 | 
      			GetMyIPAddr.h | 
    
    
      | 60 | 
      			MiscIPPB.h | 
    
    
      | 61 | 
      			TCPPB.h | 
    
    
      | 62 | 
      			UDPPB.h  | 
    
    
      | 63 | 
      			 | 
    
    
      | 64 | 
      			When the various control calls are made to the ip driver, you must set up a  | 
    
    
      | 65 | 
      			NewRoutineDescriptor for every non-nil completion routine and/or notifyProc parameter.   | 
    
    
      | 66 | 
      			Otherwise, the 68K driver code, will not correctly call your routine. | 
    
    
      | 67 | 
      		1. For ipctlGetAddr Control calls, use NewGetIPIOCompletionProc | 
    
    
      | 68 | 
      			to set up a GetIPIOCompletionUPP universal procptr to pass as | 
    
    
      | 69 | 
      			the ioCompletion parameter. | 
    
    
      | 70 | 
      		2. For the ipctlEchoICMP and ipctlLAPStats Control calls, use  | 
    
    
      | 71 | 
      			NewIPIOCompletion to set up a IPIOCompletionUPP universal procptr | 
    
    
      | 72 | 
      			to pass in the ioCompletion field of the parameter block. | 
    
    
      | 73 | 
      		3. For TCPCreatePB Control calls, use NewTCPNotifyProc to set up a | 
    
    
      | 74 | 
      			TCPNotifyUPP universal procptr to pass in the notifyProc field | 
    
    
      | 75 | 
      			of the parameter block | 
    
    
      | 76 | 
      		4. For all of the TCP Control calls using the TCPiopb parameter block, | 
    
    
      | 77 | 
      			use NewTCPIOCompletionProc to set up a TCPIOCompletionUPP | 
    
    
      | 78 | 
      			universal procptr to pass in the ioCompletion field of the paramter | 
    
    
      | 79 | 
      			block. | 
    
    
      | 80 | 
      		5. For UDBCreatePB Control calls, use NewUDPNotifyProc to set up a | 
    
    
      | 81 | 
      			UDPNotifyUPP universal procptr to pass in the notifyProc field | 
    
    
      | 82 | 
      			of the parameter block | 
    
    
      | 83 | 
      		6. For all of the UDP Control calls using the UDPiopb parameter block, | 
    
    
      | 84 | 
      			use NewUDPIOCompletionProc to set up a UDPIOCompletionUPP | 
    
    
      | 85 | 
      			universal procptr to pass in the ioCompletion field of the paramter | 
    
    
      | 86 | 
      			block. | 
    
    
      | 87 | 
      		7. For all calls implementing a notifyProc or ioCompletion routine | 
    
    
      | 88 | 
      			which was set up using a NewTCPRoutineProc call, do not call | 
    
    
      | 89 | 
      			DisposeRoutineSDescriptor on the universal procptr until | 
    
    
      | 90 | 
      			after the completion or notify proc has completed. | 
    
    
      | 91 | 
      */ | 
    
    
      | 92 | 
      /* MacTCP return Codes in the range -23000 through -23049 */ | 
    
    
      | 93 | 
       | 
    
    
      | 94 | 
      enum { | 
    
    
      | 95 | 
      	inProgress					= 1,							/* I/O in progress */ | 
    
    
      | 96 | 
      	ipBadLapErr					= -23000,						/* bad network configuration */ | 
    
    
      | 97 | 
      	ipBadCnfgErr				= -23001,						/* bad IP configuration error */ | 
    
    
      | 98 | 
      	ipNoCnfgErr					= -23002,						/* missing IP or LAP configuration error */ | 
    
    
      | 99 | 
      	ipLoadErr					= -23003,						/* error in MacTCP load */ | 
    
    
      | 100 | 
      	ipBadAddr					= -23004,						/* error in getting address */ | 
    
    
      | 101 | 
      	connectionClosing			= -23005,						/* connection is closing */ | 
    
    
      | 102 | 
      	invalidLength				= -23006, | 
    
    
      | 103 | 
      	connectionExists			= -23007,						/* request conflicts with existing connection */ | 
    
    
      | 104 | 
      	connectionDoesntExist		= -23008,						/* connection does not exist */ | 
    
    
      | 105 | 
      	insufficientResources		= -23009,						/* insufficient resources to perform request */ | 
    
    
      | 106 | 
      	invalidStreamPtr			= -23010, | 
    
    
      | 107 | 
      	streamAlreadyOpen			= -23011, | 
    
    
      | 108 | 
      	connectionTerminated		= -23012, | 
    
    
      | 109 | 
      	invalidBufPtr				= -23013, | 
    
    
      | 110 | 
      	invalidRDS					= -23014, | 
    
    
      | 111 | 
      	invalidWDS					= -23014, | 
    
    
      | 112 | 
      	openFailed					= -23015, | 
    
    
      | 113 | 
      	commandTimeout				= -23016, | 
    
    
      | 114 | 
      	duplicateSocket				= -23017 | 
    
    
      | 115 | 
      }; | 
    
    
      | 116 | 
       | 
    
    
      | 117 | 
      /* Error codes from internal IP functions */ | 
    
    
      | 118 | 
      enum { | 
    
    
      | 119 | 
      	ipDontFragErr				= -23032,						/* Packet too large to send w/o fragmenting */ | 
    
    
      | 120 | 
      	ipDestDeadErr				= -23033,						/* destination not responding */ | 
    
    
      | 121 | 
      	icmpEchoTimeoutErr			= -23035,						/* ICMP echo timed-out */ | 
    
    
      | 122 | 
      	ipNoFragMemErr				= -23036,						/* no memory to send fragmented pkt */ | 
    
    
      | 123 | 
      	ipRouteErr					= -23037,						/* can't route packet off-net */ | 
    
    
      | 124 | 
      	nameSyntaxErr				= -23041, | 
    
    
      | 125 | 
      	cacheFault					= -23042, | 
    
    
      | 126 | 
      	noResultProc				= -23043, | 
    
    
      | 127 | 
      	noNameServer				= -23044, | 
    
    
      | 128 | 
      	authNameErr					= -23045, | 
    
    
      | 129 | 
      	noAnsErr					= -23046, | 
    
    
      | 130 | 
      	dnrErr						= -23047, | 
    
    
      | 131 | 
      	outOfMemory					= -23048 | 
    
    
      | 132 | 
      }; | 
    
    
      | 133 | 
       | 
    
    
      | 134 | 
      enum { | 
    
    
      | 135 | 
      	BYTES_16WORD				= 2,							/* bytes per = 16, bit ip word */ | 
    
    
      | 136 | 
      	BYTES_32WORD				= 4,							/* bytes per = 32, bit ip word */ | 
    
    
      | 137 | 
      	BYTES_64WORD				= 8								/* bytes per = 64, bit ip word */ | 
    
    
      | 138 | 
      }; | 
    
    
      | 139 | 
       | 
    
    
      | 140 | 
      /* 8-bit quantity */ | 
    
    
      | 141 | 
      typedef unsigned char UInt8; | 
    
    
      | 142 | 
      typedef signed char SInt8; | 
    
    
      | 143 | 
      typedef UInt8 b_8; | 
    
    
      | 144 | 
       | 
    
    
      | 145 | 
      /* 16-bit quantity */ | 
    
    
      | 146 | 
      typedef unsigned short UInt16; | 
    
    
      | 147 | 
      typedef signed short SInt16; | 
    
    
      | 148 | 
      typedef UInt16 b_16; | 
    
    
      | 149 | 
       | 
    
    
      | 150 | 
      /* 32-bit quantity */ | 
    
    
      | 151 | 
      typedef unsigned long UInt32; | 
    
    
      | 152 | 
      typedef signed long SInt32; | 
    
    
      | 153 | 
      typedef UInt32 b_32; | 
    
    
      | 154 | 
       | 
    
    
      | 155 | 
      /* IP address is 32-bits */ | 
    
    
      | 156 | 
      typedef b_32 ip_addr; | 
    
    
      | 157 | 
       | 
    
    
      | 158 | 
      struct ip_addrbytes { | 
    
    
      | 159 | 
      	union { | 
    
    
      | 160 | 
      		b_32							addr; | 
    
    
      | 161 | 
      		UInt8							byte[4]; | 
    
    
      | 162 | 
      	}								a; | 
    
    
      | 163 | 
      }; | 
    
    
      | 164 | 
      typedef struct ip_addrbytes ip_addrbytes; | 
    
    
      | 165 | 
       | 
    
    
      | 166 | 
      struct wdsEntry { | 
    
    
      | 167 | 
      	unsigned short					length;						/* length of buffer */ | 
    
    
      | 168 | 
      	Ptr								ptr;						/* pointer to buffer */ | 
    
    
      | 169 | 
      }; | 
    
    
      | 170 | 
      typedef struct wdsEntry wdsEntry; | 
    
    
      | 171 | 
       | 
    
    
      | 172 | 
      struct rdsEntry { | 
    
    
      | 173 | 
      	unsigned short					length;						/* length of buffer */ | 
    
    
      | 174 | 
      	Ptr								ptr;						/* pointer to buffer */ | 
    
    
      | 175 | 
      }; | 
    
    
      | 176 | 
      typedef struct rdsEntry rdsEntry; | 
    
    
      | 177 | 
       | 
    
    
      | 178 | 
      typedef unsigned long BufferPtr; | 
    
    
      | 179 | 
       | 
    
    
      | 180 | 
      typedef unsigned long StreamPtr; | 
    
    
      | 181 | 
       | 
    
    
      | 182 | 
       | 
    
    
      | 183 | 
      enum { | 
    
    
      | 184 | 
      	netUnreach					= 0, | 
    
    
      | 185 | 
      	hostUnreach					= 1, | 
    
    
      | 186 | 
      	protocolUnreach				= 2, | 
    
    
      | 187 | 
      	portUnreach					= 3, | 
    
    
      | 188 | 
      	fragReqd					= 4, | 
    
    
      | 189 | 
      	sourceRouteFailed			= 5, | 
    
    
      | 190 | 
      	timeExceeded				= 6, | 
    
    
      | 191 | 
      	parmProblem					= 7, | 
    
    
      | 192 | 
      	missingOption				= 8, | 
    
    
      | 193 | 
      	lastICMPMsgType				= 32767 | 
    
    
      | 194 | 
      }; | 
    
    
      | 195 | 
       | 
    
    
      | 196 | 
      typedef unsigned short ICMPMsgType; | 
    
    
      | 197 | 
       | 
    
    
      | 198 | 
      typedef b_16 ip_port; | 
    
    
      | 199 | 
       | 
    
    
      | 200 | 
      struct ICMPReport { | 
    
    
      | 201 | 
      	StreamPtr						streamPtr; | 
    
    
      | 202 | 
      	ip_addr							localHost; | 
    
    
      | 203 | 
      	ip_port							localPort; | 
    
    
      | 204 | 
      	ip_addr							remoteHost; | 
    
    
      | 205 | 
      	ip_port							remotePort; | 
    
    
      | 206 | 
      	short							reportType; | 
    
    
      | 207 | 
      	unsigned short					optionalAddlInfo; | 
    
    
      | 208 | 
      	unsigned long					optionalAddlInfoPtr; | 
    
    
      | 209 | 
      }; | 
    
    
      | 210 | 
      typedef struct ICMPReport ICMPReport; | 
    
    
      | 211 | 
       | 
    
    
      | 212 | 
      /* csCode to get our IP address */ | 
    
    
      | 213 | 
       | 
    
    
      | 214 | 
      enum { | 
    
    
      | 215 | 
      	ipctlGetAddr				= 15 | 
    
    
      | 216 | 
      }; | 
    
    
      | 217 | 
       | 
    
    
      | 218 | 
      typedef void (*GetIPIOCompletionProcPtr)(struct GetAddrParamBlock *iopb); | 
    
    
      | 219 | 
       | 
    
    
      | 220 | 
      #if GENERATINGCFM | 
    
    
      | 221 | 
      typedef UniversalProcPtr GetIPIOCompletionUPP; | 
    
    
      | 222 | 
      #else | 
    
    
      | 223 | 
      typedef GetIPIOCompletionProcPtr GetIPIOCompletionUPP; | 
    
    
      | 224 | 
      #endif | 
    
    
      | 225 | 
       | 
    
    
      | 226 | 
      #define GetIPParamBlockHeader 	\ | 
    
    
      | 227 | 
      	struct QElem*	qLink; 		\ | 
    
    
      | 228 | 
      	short	qType; 				\ | 
    
    
      | 229 | 
      	short	ioTrap; 				\ | 
    
    
      | 230 | 
      	Ptr	ioCmdAddr; 				\ | 
    
    
      | 231 | 
      	GetIPIOCompletionUPP	ioCompletion;  \ | 
    
    
      | 232 | 
      	OSErr	ioResult; 			\ | 
    
    
      | 233 | 
      	StringPtr	ioNamePtr; 		\ | 
    
    
      | 234 | 
      	short	ioVRefNum;				\ | 
    
    
      | 235 | 
      	short	ioCRefNum;				\ | 
    
    
      | 236 | 
      	short	csCode | 
    
    
      | 237 | 
      struct GetAddrParamBlock { | 
    
    
      | 238 | 
      	struct QElem					*qLink; | 
    
    
      | 239 | 
      	short							qType; | 
    
    
      | 240 | 
      	short							ioTrap; | 
    
    
      | 241 | 
      	Ptr								ioCmdAddr; | 
    
    
      | 242 | 
      	GetIPIOCompletionUPP			ioCompletion; | 
    
    
      | 243 | 
      	OSErr							ioResult; | 
    
    
      | 244 | 
      	StringPtr						ioNamePtr; | 
    
    
      | 245 | 
      	short							ioVRefNum; | 
    
    
      | 246 | 
      	short							ioCRefNum; | 
    
    
      | 247 | 
      	short							csCode;						/* standard I/O header */ | 
    
    
      | 248 | 
      	ip_addr							ourAddress;					/* our IP address */ | 
    
    
      | 249 | 
      	long							ourNetMask;					/* our IP net mask */ | 
    
    
      | 250 | 
      }; | 
    
    
      | 251 | 
      typedef struct GetAddrParamBlock GetAddrParamBlock; | 
    
    
      | 252 | 
       | 
    
    
      | 253 | 
      /* control codes */ | 
    
    
      | 254 | 
       | 
    
    
      | 255 | 
      enum { | 
    
    
      | 256 | 
      	ipctlEchoICMP				= 17,							/* send icmp echo */ | 
    
    
      | 257 | 
      	ipctlLAPStats				= 19							/* get lap stats */ | 
    
    
      | 258 | 
      }; | 
    
    
      | 259 | 
       | 
    
    
      | 260 | 
      typedef void (*IPIOCompletionProcPtr)(struct ICMPParamBlock *iopb); | 
    
    
      | 261 | 
       | 
    
    
      | 262 | 
      #if GENERATINGCFM | 
    
    
      | 263 | 
      typedef UniversalProcPtr IPIOCompletionUPP; | 
    
    
      | 264 | 
      #else | 
    
    
      | 265 | 
      typedef IPIOCompletionProcPtr IPIOCompletionUPP; | 
    
    
      | 266 | 
      #endif | 
    
    
      | 267 | 
       | 
    
    
      | 268 | 
      #define IPParamBlockHeader 		\ | 
    
    
      | 269 | 
      	struct QElem*	qLink; 		\ | 
    
    
      | 270 | 
      	short	qType; 				\ | 
    
    
      | 271 | 
      	short	ioTrap; 				\ | 
    
    
      | 272 | 
      	Ptr	ioCmdAddr; 				\ | 
    
    
      | 273 | 
      	IPIOCompletionUPP	ioCompletion;  \ | 
    
    
      | 274 | 
      	OSErr	ioResult; 			\ | 
    
    
      | 275 | 
      	StringPtr	ioNamePtr; 		\ | 
    
    
      | 276 | 
      	short	ioVRefNum;				\ | 
    
    
      | 277 | 
      	short	ioCRefNum;				\ | 
    
    
      | 278 | 
      	short	csCode | 
    
    
      | 279 | 
      struct ICMPParamBlock { | 
    
    
      | 280 | 
      	struct QElem					*qLink; | 
    
    
      | 281 | 
      	short							qType; | 
    
    
      | 282 | 
      	short							ioTrap; | 
    
    
      | 283 | 
      	Ptr								ioCmdAddr; | 
    
    
      | 284 | 
      	IPIOCompletionUPP				ioCompletion; | 
    
    
      | 285 | 
      	OSErr							ioResult; | 
    
    
      | 286 | 
      	StringPtr						ioNamePtr; | 
    
    
      | 287 | 
      	short							ioVRefNum; | 
    
    
      | 288 | 
      	short							ioCRefNum; | 
    
    
      | 289 | 
      	short							csCode;						/* standard I/O header */ | 
    
    
      | 290 | 
      	short							params[11]; | 
    
    
      | 291 | 
      	struct { | 
    
    
      | 292 | 
      		unsigned long					echoRequestOut;			/* time in ticks of when the echo request went out */ | 
    
    
      | 293 | 
      		unsigned long					echoReplyIn;			/* time in ticks of when the reply was received */ | 
    
    
      | 294 | 
      		struct rdsEntry					echoedData;				/* data received in responce */ | 
    
    
      | 295 | 
      		Ptr								options; | 
    
    
      | 296 | 
      		unsigned long					userDataPtr; | 
    
    
      | 297 | 
      	}								icmpEchoInfo; | 
    
    
      | 298 | 
      }; | 
    
    
      | 299 | 
      typedef pascal void (*ICMPEchoNotifyProcPtr)(struct ICMPParamBlock *iopb); | 
    
    
      | 300 | 
       | 
    
    
      | 301 | 
      #if GENERATINGCFM | 
    
    
      | 302 | 
      typedef UniversalProcPtr ICMPEchoNotifyUPP; | 
    
    
      | 303 | 
      #else | 
    
    
      | 304 | 
      typedef ICMPEchoNotifyProcPtr ICMPEchoNotifyUPP; | 
    
    
      | 305 | 
      #endif | 
    
    
      | 306 | 
       | 
    
    
      | 307 | 
      struct IPParamBlock { | 
    
    
      | 308 | 
      	struct QElem					*qLink; | 
    
    
      | 309 | 
      	short							qType; | 
    
    
      | 310 | 
      	short							ioTrap; | 
    
    
      | 311 | 
      	Ptr								ioCmdAddr; | 
    
    
      | 312 | 
      	IPIOCompletionUPP				ioCompletion; | 
    
    
      | 313 | 
      	OSErr							ioResult; | 
    
    
      | 314 | 
      	StringPtr						ioNamePtr; | 
    
    
      | 315 | 
      	short							ioVRefNum; | 
    
    
      | 316 | 
      	short							ioCRefNum; | 
    
    
      | 317 | 
      	short							csCode;						/* standard I/O header */ | 
    
    
      | 318 | 
      	union { | 
    
    
      | 319 | 
      		struct { | 
    
    
      | 320 | 
      			ip_addr							dest;				/* echo to IP address */ | 
    
    
      | 321 | 
      			wdsEntry						data; | 
    
    
      | 322 | 
      			short							timeout; | 
    
    
      | 323 | 
      			Ptr								options; | 
    
    
      | 324 | 
      			unsigned short					optLength; | 
    
    
      | 325 | 
      			ICMPEchoNotifyUPP				icmpCompletion; | 
    
    
      | 326 | 
      			unsigned long					userDataPtr; | 
    
    
      | 327 | 
      		}								IPEchoPB; | 
    
    
      | 328 | 
      		struct { | 
    
    
      | 329 | 
      			struct LAPStats					*lapStatsPtr; | 
    
    
      | 330 | 
      		}								LAPStatsPB; | 
    
    
      | 331 | 
      	}								csParam; | 
    
    
      | 332 | 
      }; | 
    
    
      | 333 | 
      union LAPStatsAddrXlation { | 
    
    
      | 334 | 
      	struct arp_entry				*arp_table; | 
    
    
      | 335 | 
      	struct nbp_entry				*nbp_table; | 
    
    
      | 336 | 
      }; | 
    
    
      | 337 | 
      struct LAPStats { | 
    
    
      | 338 | 
      	short							ifType; | 
    
    
      | 339 | 
      	char							*ifString; | 
    
    
      | 340 | 
      	short							ifMaxMTU; | 
    
    
      | 341 | 
      	long							ifSpeed; | 
    
    
      | 342 | 
      	short							ifPhyAddrLength; | 
    
    
      | 343 | 
      	char							*ifPhysicalAddress; | 
    
    
      | 344 | 
      	union LAPStatsAddrXlation		AddrXlation; | 
    
    
      | 345 | 
      	short							slotNumber; | 
    
    
      | 346 | 
      }; | 
    
    
      | 347 | 
      typedef struct LAPStats LAPStats; | 
    
    
      | 348 | 
       | 
    
    
      | 349 | 
      #ifdef __APPLETALK__ | 
    
    
      | 350 | 
      struct nbp_entry { | 
    
    
      | 351 | 
      	ip_addr							ip_address;					/* IP address */ | 
    
    
      | 352 | 
      	AddrBlock						at_address;					/* matching AppleTalk address */ | 
    
    
      | 353 | 
      	Boolean							gateway;					/* TRUE if entry for a gateway */ | 
    
    
      | 354 | 
      	Boolean							valid;						/* TRUE if LAP address is valid */ | 
    
    
      | 355 | 
      	Boolean							probing;					/* TRUE if NBP lookup pending */ | 
    
    
      | 356 | 
      	SInt8							afiller;					/* Filler for proper byte alignment	 */ | 
    
    
      | 357 | 
      	long							age;						/* ticks since cache entry verified */ | 
    
    
      | 358 | 
      	long							access;						/* ticks since last access */ | 
    
    
      | 359 | 
      	SInt8							filler[116];				/* for internal use only !!! */ | 
    
    
      | 360 | 
      }; | 
    
    
      | 361 | 
      #endif | 
    
    
      | 362 | 
      struct Enet_addr { | 
    
    
      | 363 | 
      	b_16							en_hi; | 
    
    
      | 364 | 
      	b_32							en_lo; | 
    
    
      | 365 | 
      }; | 
    
    
      | 366 | 
      typedef struct Enet_addr Enet_addr; | 
    
    
      | 367 | 
       | 
    
    
      | 368 | 
      struct arp_entry { | 
    
    
      | 369 | 
      	short							age;						/* cache aging field */ | 
    
    
      | 370 | 
      	b_16							protocol;					/* Protocol type */ | 
    
    
      | 371 | 
      	ip_addr							ip_address;					/* IP address */ | 
    
    
      | 372 | 
      	Enet_addr						en_address;					/* matching Ethernet address */ | 
    
    
      | 373 | 
      }; | 
    
    
      | 374 | 
      typedef struct arp_entry arp_entry; | 
    
    
      | 375 | 
       | 
    
    
      | 376 | 
      /* number of ARP table entries */ | 
    
    
      | 377 | 
       | 
    
    
      | 378 | 
      enum { | 
    
    
      | 379 | 
      	ARP_TABLE_SIZE				= 20 | 
    
    
      | 380 | 
      }; | 
    
    
      | 381 | 
       | 
    
    
      | 382 | 
      enum { | 
    
    
      | 383 | 
      	NBP_TABLE_SIZE				= 20,							/* number of NBP table entries */ | 
    
    
      | 384 | 
      	NBP_MAX_NAME_SIZE			= 16 + 10 + 2 | 
    
    
      | 385 | 
      }; | 
    
    
      | 386 | 
       | 
    
    
      | 387 | 
      /* Command codes */ | 
    
    
      | 388 | 
      enum { | 
    
    
      | 389 | 
      	TCPCreate					= 30, | 
    
    
      | 390 | 
      	TCPPassiveOpen				= 31, | 
    
    
      | 391 | 
      	TCPActiveOpen				= 32, | 
    
    
      | 392 | 
      	TCPSend						= 34, | 
    
    
      | 393 | 
      	TCPNoCopyRcv				= 35, | 
    
    
      | 394 | 
      	TCPRcvBfrReturn				= 36, | 
    
    
      | 395 | 
      	TCPRcv						= 37, | 
    
    
      | 396 | 
      	TCPClose					= 38, | 
    
    
      | 397 | 
      	TCPAbort					= 39, | 
    
    
      | 398 | 
      	TCPStatus					= 40, | 
    
    
      | 399 | 
      	TCPExtendedStat				= 41, | 
    
    
      | 400 | 
      	TCPRelease					= 42, | 
    
    
      | 401 | 
      	TCPGlobalInfo				= 43, | 
    
    
      | 402 | 
      	TCPCtlMax					= 49 | 
    
    
      | 403 | 
      }; | 
    
    
      | 404 | 
       | 
    
    
      | 405 | 
      enum { | 
    
    
      | 406 | 
      	TCPClosing					= 1, | 
    
    
      | 407 | 
      	TCPULPTimeout				= 2, | 
    
    
      | 408 | 
      	TCPTerminate				= 3, | 
    
    
      | 409 | 
      	TCPDataArrival				= 4, | 
    
    
      | 410 | 
      	TCPUrgent					= 5, | 
    
    
      | 411 | 
      	TCPICMPReceived				= 6, | 
    
    
      | 412 | 
      	lastEvent					= 32767 | 
    
    
      | 413 | 
      }; | 
    
    
      | 414 | 
       | 
    
    
      | 415 | 
      typedef unsigned short TCPEventCode; | 
    
    
      | 416 | 
       | 
    
    
      | 417 | 
       | 
    
    
      | 418 | 
      enum { | 
    
    
      | 419 | 
      	TCPRemoteAbort				= 2, | 
    
    
      | 420 | 
      	TCPNetworkFailure			= 3, | 
    
    
      | 421 | 
      	TCPSecPrecMismatch			= 4, | 
    
    
      | 422 | 
      	TCPULPTimeoutTerminate		= 5, | 
    
    
      | 423 | 
      	TCPULPAbort					= 6, | 
    
    
      | 424 | 
      	TCPULPClose					= 7, | 
    
    
      | 425 | 
      	TCPServiceError				= 8, | 
    
    
      | 426 | 
      	lastReason					= 32767 | 
    
    
      | 427 | 
      }; | 
    
    
      | 428 | 
       | 
    
    
      | 429 | 
      typedef unsigned short TCPTerminationReason; | 
    
    
      | 430 | 
       | 
    
    
      | 431 | 
      typedef pascal void (*TCPNotifyProcPtr)(StreamPtr tcpStream, unsigned short eventCode, Ptr userDataPtr, unsigned short terminReason, struct ICMPReport *icmpMsg); | 
    
    
      | 432 | 
       | 
    
    
      | 433 | 
      #if GENERATINGCFM | 
    
    
      | 434 | 
      typedef UniversalProcPtr TCPNotifyUPP; | 
    
    
      | 435 | 
      #else | 
    
    
      | 436 | 
      typedef TCPNotifyProcPtr TCPNotifyUPP; | 
    
    
      | 437 | 
      #endif | 
    
    
      | 438 | 
       | 
    
    
      | 439 | 
      typedef unsigned short tcp_port; | 
    
    
      | 440 | 
       | 
    
    
      | 441 | 
      /* ValidityFlags */ | 
    
    
      | 442 | 
       | 
    
    
      | 443 | 
      enum { | 
    
    
      | 444 | 
      	timeoutValue				= 0x80, | 
    
    
      | 445 | 
      	timeoutAction				= 0x40, | 
    
    
      | 446 | 
      	typeOfService				= 0x20, | 
    
    
      | 447 | 
      	precedence					= 0x10 | 
    
    
      | 448 | 
      }; | 
    
    
      | 449 | 
       | 
    
    
      | 450 | 
      /* TOSFlags */ | 
    
    
      | 451 | 
      enum { | 
    
    
      | 452 | 
      	lowDelay					= 0x01, | 
    
    
      | 453 | 
      	throughPut					= 0x02, | 
    
    
      | 454 | 
      	reliability					= 0x04 | 
    
    
      | 455 | 
      }; | 
    
    
      | 456 | 
       | 
    
    
      | 457 | 
      struct TCPCreatePB { | 
    
    
      | 458 | 
      	Ptr								rcvBuff; | 
    
    
      | 459 | 
      	unsigned long					rcvBuffLen; | 
    
    
      | 460 | 
      	TCPNotifyUPP					notifyProc; | 
    
    
      | 461 | 
      	Ptr								userDataPtr; | 
    
    
      | 462 | 
      }; | 
    
    
      | 463 | 
      typedef struct TCPCreatePB TCPCreatePB; | 
    
    
      | 464 | 
       | 
    
    
      | 465 | 
      struct TCPOpenPB { | 
    
    
      | 466 | 
      	SInt8							ulpTimeoutValue; | 
    
    
      | 467 | 
      	SInt8							ulpTimeoutAction; | 
    
    
      | 468 | 
      	SInt8							validityFlags; | 
    
    
      | 469 | 
      	SInt8							commandTimeoutValue; | 
    
    
      | 470 | 
      	ip_addr							remoteHost; | 
    
    
      | 471 | 
      	tcp_port						remotePort; | 
    
    
      | 472 | 
      	ip_addr							localHost; | 
    
    
      | 473 | 
      	tcp_port						localPort; | 
    
    
      | 474 | 
      	SInt8							tosFlags; | 
    
    
      | 475 | 
      	SInt8							precedence; | 
    
    
      | 476 | 
      	Boolean							dontFrag; | 
    
    
      | 477 | 
      	SInt8							timeToLive; | 
    
    
      | 478 | 
      	SInt8							security; | 
    
    
      | 479 | 
      	SInt8							optionCnt; | 
    
    
      | 480 | 
      	SInt8							options[40]; | 
    
    
      | 481 | 
      	Ptr								userDataPtr; | 
    
    
      | 482 | 
      }; | 
    
    
      | 483 | 
      typedef struct TCPOpenPB TCPOpenPB; | 
    
    
      | 484 | 
       | 
    
    
      | 485 | 
      struct TCPSendPB { | 
    
    
      | 486 | 
      	SInt8							ulpTimeoutValue; | 
    
    
      | 487 | 
      	SInt8							ulpTimeoutAction; | 
    
    
      | 488 | 
      	SInt8							validityFlags; | 
    
    
      | 489 | 
      	Boolean							pushFlag; | 
    
    
      | 490 | 
      	Boolean							urgentFlag; | 
    
    
      | 491 | 
      	SInt8							filler;						/* Filler for proper byte alignment	 */ | 
    
    
      | 492 | 
      	Ptr								wdsPtr; | 
    
    
      | 493 | 
      	unsigned long					sendFree; | 
    
    
      | 494 | 
      	unsigned short					sendLength; | 
    
    
      | 495 | 
      	Ptr								userDataPtr; | 
    
    
      | 496 | 
      }; | 
    
    
      | 497 | 
      typedef struct TCPSendPB TCPSendPB; | 
    
    
      | 498 | 
       | 
    
    
      | 499 | 
      /* for receive and return rcv buff calls */ | 
    
    
      | 500 | 
      /*   Note: the filler in the following structure is in a different location than */ | 
    
    
      | 501 | 
      /*         that specified in the Programmer's Guide.  */ | 
    
    
      | 502 | 
      struct TCPReceivePB { | 
    
    
      | 503 | 
      	SInt8							commandTimeoutValue; | 
    
    
      | 504 | 
      	Boolean							markFlag; | 
    
    
      | 505 | 
      	Boolean							urgentFlag; | 
    
    
      | 506 | 
      	SInt8							filler;						/* Filler for proper byte alignment  */ | 
    
    
      | 507 | 
      	Ptr								rcvBuff; | 
    
    
      | 508 | 
      	unsigned short					rcvBuffLen; | 
    
    
      | 509 | 
      	Ptr								rdsPtr; | 
    
    
      | 510 | 
      	unsigned short					rdsLength; | 
    
    
      | 511 | 
      	unsigned short					secondTimeStamp; | 
    
    
      | 512 | 
      	Ptr								userDataPtr; | 
    
    
      | 513 | 
      }; | 
    
    
      | 514 | 
      typedef struct TCPReceivePB TCPReceivePB; | 
    
    
      | 515 | 
       | 
    
    
      | 516 | 
      struct TCPClosePB { | 
    
    
      | 517 | 
      	SInt8							ulpTimeoutValue; | 
    
    
      | 518 | 
      	SInt8							ulpTimeoutAction; | 
    
    
      | 519 | 
      	SInt8							validityFlags; | 
    
    
      | 520 | 
      	SInt8							filler;						/* Filler for proper byte alignment	 */ | 
    
    
      | 521 | 
      	Ptr								userDataPtr; | 
    
    
      | 522 | 
      }; | 
    
    
      | 523 | 
      typedef struct TCPClosePB TCPClosePB; | 
    
    
      | 524 | 
       | 
    
    
      | 525 | 
      struct HistoBucket { | 
    
    
      | 526 | 
      	unsigned short					value; | 
    
    
      | 527 | 
      	unsigned long					counter; | 
    
    
      | 528 | 
      }; | 
    
    
      | 529 | 
      typedef struct HistoBucket HistoBucket; | 
    
    
      | 530 | 
       | 
    
    
      | 531 | 
       | 
    
    
      | 532 | 
      enum { | 
    
    
      | 533 | 
      	NumOfHistoBuckets			= 7 | 
    
    
      | 534 | 
      }; | 
    
    
      | 535 | 
       | 
    
    
      | 536 | 
      enum { | 
    
    
      | 537 | 
      	ConnectionStateClosed = 0, | 
    
    
      | 538 | 
      	ConnectionStateListening = 2, | 
    
    
      | 539 | 
      	ConnectionStateSYNReceived = 4, | 
    
    
      | 540 | 
      	ConnectionStateSYNSent = 6, | 
    
    
      | 541 | 
      	ConnectionStateEstablished = 8, | 
    
    
      | 542 | 
      	ConnectionStateFINWait1 = 10, | 
    
    
      | 543 | 
      	ConnectionStateFINWait2 = 12, | 
    
    
      | 544 | 
      	ConnectionStateCloseWait = 14, | 
    
    
      | 545 | 
      	ConnectionStateClosing = 16, | 
    
    
      | 546 | 
      	ConnectionStateLastAck = 18, | 
    
    
      | 547 | 
      	ConnectionStateTimeWait = 20 | 
    
    
      | 548 | 
      }; | 
    
    
      | 549 | 
       | 
    
    
      | 550 | 
      struct TCPConnectionStats { | 
    
    
      | 551 | 
      	unsigned long					dataPktsRcvd; | 
    
    
      | 552 | 
      	unsigned long					dataPktsSent; | 
    
    
      | 553 | 
      	unsigned long					dataPktsResent; | 
    
    
      | 554 | 
      	unsigned long					bytesRcvd; | 
    
    
      | 555 | 
      	unsigned long					bytesRcvdDup; | 
    
    
      | 556 | 
      	unsigned long					bytesRcvdPastWindow; | 
    
    
      | 557 | 
      	unsigned long					bytesSent; | 
    
    
      | 558 | 
      	unsigned long					bytesResent; | 
    
    
      | 559 | 
      	unsigned short					numHistoBuckets; | 
    
    
      | 560 | 
      	struct HistoBucket				sentSizeHisto[NumOfHistoBuckets]; | 
    
    
      | 561 | 
      	unsigned short					lastRTT; | 
    
    
      | 562 | 
      	unsigned short					tmrSRTT; | 
    
    
      | 563 | 
      	unsigned short					rttVariance; | 
    
    
      | 564 | 
      	unsigned short					tmrRTO; | 
    
    
      | 565 | 
      	SInt8							sendTries; | 
    
    
      | 566 | 
      	SInt8							sourchQuenchRcvd; | 
    
    
      | 567 | 
      }; | 
    
    
      | 568 | 
      typedef struct TCPConnectionStats TCPConnectionStats; | 
    
    
      | 569 | 
       | 
    
    
      | 570 | 
      struct TCPStatusPB { | 
    
    
      | 571 | 
      	SInt8							ulpTimeoutValue; | 
    
    
      | 572 | 
      	SInt8							ulpTimeoutAction; | 
    
    
      | 573 | 
      	long							unused; | 
    
    
      | 574 | 
      	ip_addr							remoteHost; | 
    
    
      | 575 | 
      	tcp_port						remotePort; | 
    
    
      | 576 | 
      	ip_addr							localHost; | 
    
    
      | 577 | 
      	tcp_port						localPort; | 
    
    
      | 578 | 
      	SInt8							tosFlags; | 
    
    
      | 579 | 
      	SInt8							precedence; | 
    
    
      | 580 | 
      	SInt8							connectionState; | 
    
    
      | 581 | 
      	SInt8							filler;						/* Filler for proper byte alignment	 */ | 
    
    
      | 582 | 
      	unsigned short					sendWindow; | 
    
    
      | 583 | 
      	unsigned short					rcvWindow; | 
    
    
      | 584 | 
      	unsigned short					amtUnackedData; | 
    
    
      | 585 | 
      	unsigned short					amtUnreadData; | 
    
    
      | 586 | 
      	Ptr								securityLevelPtr; | 
    
    
      | 587 | 
      	unsigned long					sendUnacked; | 
    
    
      | 588 | 
      	unsigned long					sendNext; | 
    
    
      | 589 | 
      	unsigned long					congestionWindow; | 
    
    
      | 590 | 
      	unsigned long					rcvNext; | 
    
    
      | 591 | 
      	unsigned long					srtt; | 
    
    
      | 592 | 
      	unsigned long					lastRTT; | 
    
    
      | 593 | 
      	unsigned long					sendMaxSegSize; | 
    
    
      | 594 | 
      	struct TCPConnectionStats		*connStatPtr; | 
    
    
      | 595 | 
      	Ptr								userDataPtr; | 
    
    
      | 596 | 
      }; | 
    
    
      | 597 | 
      typedef struct TCPStatusPB TCPStatusPB; | 
    
    
      | 598 | 
       | 
    
    
      | 599 | 
      struct TCPAbortPB { | 
    
    
      | 600 | 
      	Ptr								userDataPtr; | 
    
    
      | 601 | 
      }; | 
    
    
      | 602 | 
      typedef struct TCPAbortPB TCPAbortPB; | 
    
    
      | 603 | 
       | 
    
    
      | 604 | 
      struct TCPParam { | 
    
    
      | 605 | 
      	unsigned long					tcpRtoA; | 
    
    
      | 606 | 
      	unsigned long					tcpRtoMin; | 
    
    
      | 607 | 
      	unsigned long					tcpRtoMax; | 
    
    
      | 608 | 
      	unsigned long					tcpMaxSegSize; | 
    
    
      | 609 | 
      	unsigned long					tcpMaxConn; | 
    
    
      | 610 | 
      	unsigned long					tcpMaxWindow; | 
    
    
      | 611 | 
      }; | 
    
    
      | 612 | 
      typedef struct TCPParam TCPParam; | 
    
    
      | 613 | 
       | 
    
    
      | 614 | 
      struct TCPStats { | 
    
    
      | 615 | 
      	unsigned long					tcpConnAttempts; | 
    
    
      | 616 | 
      	unsigned long					tcpConnOpened; | 
    
    
      | 617 | 
      	unsigned long					tcpConnAccepted; | 
    
    
      | 618 | 
      	unsigned long					tcpConnClosed; | 
    
    
      | 619 | 
      	unsigned long					tcpConnAborted; | 
    
    
      | 620 | 
      	unsigned long					tcpOctetsIn; | 
    
    
      | 621 | 
      	unsigned long					tcpOctetsOut; | 
    
    
      | 622 | 
      	unsigned long					tcpOctetsInDup; | 
    
    
      | 623 | 
      	unsigned long					tcpOctetsRetrans; | 
    
    
      | 624 | 
      	unsigned long					tcpInputPkts; | 
    
    
      | 625 | 
      	unsigned long					tcpOutputPkts; | 
    
    
      | 626 | 
      	unsigned long					tcpDupPkts; | 
    
    
      | 627 | 
      	unsigned long					tcpRetransPkts; | 
    
    
      | 628 | 
      }; | 
    
    
      | 629 | 
      typedef struct TCPStats TCPStats; | 
    
    
      | 630 | 
       | 
    
    
      | 631 | 
      typedef StreamPtr *StreamPPtr; | 
    
    
      | 632 | 
       | 
    
    
      | 633 | 
      struct TCPGlobalInfoPB { | 
    
    
      | 634 | 
      	struct TCPParam					*tcpParamPtr; | 
    
    
      | 635 | 
      	struct TCPStats					*tcpStatsPtr; | 
    
    
      | 636 | 
      	StreamPPtr						tcpCDBTable[1]; | 
    
    
      | 637 | 
      	Ptr								userDataPtr; | 
    
    
      | 638 | 
      	unsigned short					maxTCPConnections; | 
    
    
      | 639 | 
      }; | 
    
    
      | 640 | 
      typedef struct TCPGlobalInfoPB TCPGlobalInfoPB; | 
    
    
      | 641 | 
       | 
    
    
      | 642 | 
      typedef void (*TCPIOCompletionProcPtr)(struct TCPiopb *iopb); | 
    
    
      | 643 | 
       | 
    
    
      | 644 | 
      #if GENERATINGCFM | 
    
    
      | 645 | 
      typedef UniversalProcPtr TCPIOCompletionUPP; | 
    
    
      | 646 | 
      #else | 
    
    
      | 647 | 
      typedef TCPIOCompletionProcPtr TCPIOCompletionUPP; | 
    
    
      | 648 | 
      #endif | 
    
    
      | 649 | 
       | 
    
    
      | 650 | 
      struct TCPiopb { | 
    
    
      | 651 | 
      	SInt8							fill12[12]; | 
    
    
      | 652 | 
      	TCPIOCompletionUPP				ioCompletion; | 
    
    
      | 653 | 
      	short							ioResult; | 
    
    
      | 654 | 
      	Ptr								ioNamePtr; | 
    
    
      | 655 | 
      	short							ioVRefNum; | 
    
    
      | 656 | 
      	short							ioCRefNum; | 
    
    
      | 657 | 
      	short							csCode; | 
    
    
      | 658 | 
      	StreamPtr						tcpStream; | 
    
    
      | 659 | 
      	union { | 
    
    
      | 660 | 
      		struct TCPCreatePB				create; | 
    
    
      | 661 | 
      		struct TCPOpenPB				open; | 
    
    
      | 662 | 
      		struct TCPSendPB				send; | 
    
    
      | 663 | 
      		struct TCPReceivePB				receive; | 
    
    
      | 664 | 
      		struct TCPClosePB				close; | 
    
    
      | 665 | 
      		struct TCPAbortPB				abort; | 
    
    
      | 666 | 
      		struct TCPStatusPB				status; | 
    
    
      | 667 | 
      		struct TCPGlobalInfoPB			globalInfo; | 
    
    
      | 668 | 
      	}								csParam; | 
    
    
      | 669 | 
      }; | 
    
    
      | 670 | 
      typedef struct TCPiopb TCPiopb; | 
    
    
      | 671 | 
       | 
    
    
      | 672 | 
       | 
    
    
      | 673 | 
      enum { | 
    
    
      | 674 | 
      	UDPCreate					= 20, | 
    
    
      | 675 | 
      	UDPRead						= 21, | 
    
    
      | 676 | 
      	UDPBfrReturn				= 22, | 
    
    
      | 677 | 
      	UDPWrite					= 23, | 
    
    
      | 678 | 
      	UDPRelease					= 24, | 
    
    
      | 679 | 
      	UDPMaxMTUSize				= 25, | 
    
    
      | 680 | 
      	UDPStatus					= 26, | 
    
    
      | 681 | 
      	UDPMultiCreate				= 27, | 
    
    
      | 682 | 
      	UDPMultiSend				= 28, | 
    
    
      | 683 | 
      	UDPMultiRead				= 29, | 
    
    
      | 684 | 
      	UDPCtlMax					= 29 | 
    
    
      | 685 | 
      }; | 
    
    
      | 686 | 
       | 
    
    
      | 687 | 
      enum { | 
    
    
      | 688 | 
      	UDPDataArrival				= 1, | 
    
    
      | 689 | 
      	UDPICMPReceived				= 2, | 
    
    
      | 690 | 
      	lastUDPEvent				= 32767 | 
    
    
      | 691 | 
      }; | 
    
    
      | 692 | 
       | 
    
    
      | 693 | 
      typedef unsigned short UDPEventCode; | 
    
    
      | 694 | 
       | 
    
    
      | 695 | 
      typedef pascal void (*UDPNotifyProcPtr)(StreamPtr udpStream, unsigned short eventCode, Ptr userDataPtr, struct ICMPReport *icmpMsg); | 
    
    
      | 696 | 
       | 
    
    
      | 697 | 
      #if GENERATINGCFM | 
    
    
      | 698 | 
      typedef UniversalProcPtr UDPNotifyUPP; | 
    
    
      | 699 | 
      #else | 
    
    
      | 700 | 
      typedef UDPNotifyProcPtr UDPNotifyUPP; | 
    
    
      | 701 | 
      #endif | 
    
    
      | 702 | 
       | 
    
    
      | 703 | 
      typedef unsigned short udp_port; | 
    
    
      | 704 | 
       | 
    
    
      | 705 | 
      /* for create and release calls */ | 
    
    
      | 706 | 
      struct UDPCreatePB { | 
    
    
      | 707 | 
      	Ptr								rcvBuff; | 
    
    
      | 708 | 
      	unsigned long					rcvBuffLen; | 
    
    
      | 709 | 
      	UDPNotifyUPP					notifyProc; | 
    
    
      | 710 | 
      	unsigned short					localPort; | 
    
    
      | 711 | 
      	Ptr								userDataPtr; | 
    
    
      | 712 | 
      	udp_port						endingPort; | 
    
    
      | 713 | 
      }; | 
    
    
      | 714 | 
      typedef struct UDPCreatePB UDPCreatePB; | 
    
    
      | 715 | 
       | 
    
    
      | 716 | 
      struct UDPSendPB { | 
    
    
      | 717 | 
      	unsigned short					reserved; | 
    
    
      | 718 | 
      	ip_addr							remoteHost; | 
    
    
      | 719 | 
      	udp_port						remotePort; | 
    
    
      | 720 | 
      	Ptr								wdsPtr; | 
    
    
      | 721 | 
      	Boolean							checkSum; | 
    
    
      | 722 | 
      	SInt8							filler;						/* Filler for proper byte alignment	 */ | 
    
    
      | 723 | 
      	unsigned short					sendLength; | 
    
    
      | 724 | 
      	Ptr								userDataPtr; | 
    
    
      | 725 | 
      	udp_port						localPort; | 
    
    
      | 726 | 
      }; | 
    
    
      | 727 | 
      typedef struct UDPSendPB UDPSendPB; | 
    
    
      | 728 | 
       | 
    
    
      | 729 | 
      /* for receive and buffer return calls */ | 
    
    
      | 730 | 
      struct UDPReceivePB { | 
    
    
      | 731 | 
      	unsigned short					timeOut; | 
    
    
      | 732 | 
      	ip_addr							remoteHost; | 
    
    
      | 733 | 
      	udp_port						remotePort; | 
    
    
      | 734 | 
      	Ptr								rcvBuff; | 
    
    
      | 735 | 
      	unsigned short					rcvBuffLen; | 
    
    
      | 736 | 
      	unsigned short					secondTimeStamp; | 
    
    
      | 737 | 
      	Ptr								userDataPtr; | 
    
    
      | 738 | 
      	ip_addr							destHost;					/* only for use with multi rcv */ | 
    
    
      | 739 | 
      	udp_port						destPort;					/* only for use with multi rcv */ | 
    
    
      | 740 | 
      }; | 
    
    
      | 741 | 
      typedef struct UDPReceivePB UDPReceivePB; | 
    
    
      | 742 | 
       | 
    
    
      | 743 | 
      struct UDPMTUPB { | 
    
    
      | 744 | 
      	unsigned short					mtuSize; | 
    
    
      | 745 | 
      	ip_addr							remoteHost; | 
    
    
      | 746 | 
      	Ptr								userDataPtr; | 
    
    
      | 747 | 
      }; | 
    
    
      | 748 | 
      typedef struct UDPMTUPB UDPMTUPB; | 
    
    
      | 749 | 
       | 
    
    
      | 750 | 
      typedef void (*UDPIOCompletionProcPtr)(struct UDPiopb *iopb); | 
    
    
      | 751 | 
       | 
    
    
      | 752 | 
      #if GENERATINGCFM | 
    
    
      | 753 | 
      typedef UniversalProcPtr UDPIOCompletionUPP; | 
    
    
      | 754 | 
      #else | 
    
    
      | 755 | 
      typedef UDPIOCompletionProcPtr UDPIOCompletionUPP; | 
    
    
      | 756 | 
      #endif | 
    
    
      | 757 | 
       | 
    
    
      | 758 | 
      struct UDPiopb { | 
    
    
      | 759 | 
      	SInt8							fill12[12]; | 
    
    
      | 760 | 
      	UDPIOCompletionUPP				ioCompletion; | 
    
    
      | 761 | 
      	short							ioResult; | 
    
    
      | 762 | 
      	Ptr								ioNamePtr; | 
    
    
      | 763 | 
      	short							ioVRefNum; | 
    
    
      | 764 | 
      	short							ioCRefNum; | 
    
    
      | 765 | 
      	short							csCode; | 
    
    
      | 766 | 
      	StreamPtr						udpStream; | 
    
    
      | 767 | 
      	union { | 
    
    
      | 768 | 
      		struct UDPCreatePB				create; | 
    
    
      | 769 | 
      		struct UDPSendPB				send; | 
    
    
      | 770 | 
      		struct UDPReceivePB				receive; | 
    
    
      | 771 | 
      		struct UDPMTUPB					mtu; | 
    
    
      | 772 | 
      	}								csParam; | 
    
    
      | 773 | 
      }; | 
    
    
      | 774 | 
      typedef struct UDPiopb UDPiopb; | 
    
    
      | 775 | 
       | 
    
    
      | 776 | 
      enum { | 
    
    
      | 777 | 
      	uppGetIPIOCompletionProcInfo = kCStackBased | 
    
    
      | 778 | 
      		 | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct GetAddrParamBlock*))), | 
    
    
      | 779 | 
      	uppIPIOCompletionProcInfo = kCStackBased | 
    
    
      | 780 | 
      		 | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct ICMPParamBlock*))), | 
    
    
      | 781 | 
      	uppICMPEchoNotifyProcInfo = kPascalStackBased | 
    
    
      | 782 | 
      		 | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct ICMPParamBlock*))), | 
    
    
      | 783 | 
      	uppTCPNotifyProcInfo = kPascalStackBased | 
    
    
      | 784 | 
      		 | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(StreamPtr))) | 
    
    
      | 785 | 
      		 | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(unsigned short))) | 
    
    
      | 786 | 
      		 | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Ptr))) | 
    
    
      | 787 | 
      		 | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(unsigned short))) | 
    
    
      | 788 | 
      		 | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(struct ICMPReport*))), | 
    
    
      | 789 | 
      	uppTCPIOCompletionProcInfo = kCStackBased | 
    
    
      | 790 | 
      		 | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct TCPiopb*))), | 
    
    
      | 791 | 
      	uppUDPNotifyProcInfo = kPascalStackBased | 
    
    
      | 792 | 
      		 | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(StreamPtr))) | 
    
    
      | 793 | 
      		 | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(unsigned short))) | 
    
    
      | 794 | 
      		 | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Ptr))) | 
    
    
      | 795 | 
      		 | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(struct ICMPReport*))), | 
    
    
      | 796 | 
      	uppUDPIOCompletionProcInfo = kCStackBased | 
    
    
      | 797 | 
      		 | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct UDPiopb*))) | 
    
    
      | 798 | 
      }; | 
    
    
      | 799 | 
       | 
    
    
      | 800 | 
      #if GENERATINGCFM | 
    
    
      | 801 | 
      #define NewGetIPIOCompletionProc(userRoutine)		\ | 
    
    
      | 802 | 
      		(GetIPIOCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppGetIPIOCompletionProcInfo, GetCurrentArchitecture()) | 
    
    
      | 803 | 
      #define NewIPIOCompletionProc(userRoutine)		\ | 
    
    
      | 804 | 
      		(IPIOCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppIPIOCompletionProcInfo, GetCurrentArchitecture()) | 
    
    
      | 805 | 
      #define NewICMPEchoNotifyProc(userRoutine)		\ | 
    
    
      | 806 | 
      		(ICMPEchoNotifyUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppICMPEchoNotifyProcInfo, GetCurrentArchitecture()) | 
    
    
      | 807 | 
      #define NewTCPNotifyProc(userRoutine)		\ | 
    
    
      | 808 | 
      		(TCPNotifyUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTCPNotifyProcInfo, GetCurrentArchitecture()) | 
    
    
      | 809 | 
      #define NewTCPIOCompletionProc(userRoutine)		\ | 
    
    
      | 810 | 
      		(TCPIOCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTCPIOCompletionProcInfo, GetCurrentArchitecture()) | 
    
    
      | 811 | 
      #define NewUDPNotifyProc(userRoutine)		\ | 
    
    
      | 812 | 
      		(UDPNotifyUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUDPNotifyProcInfo, GetCurrentArchitecture()) | 
    
    
      | 813 | 
      #define NewUDPIOCompletionProc(userRoutine)		\ | 
    
    
      | 814 | 
      		(UDPIOCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUDPIOCompletionProcInfo, GetCurrentArchitecture()) | 
    
    
      | 815 | 
      #else | 
    
    
      | 816 | 
      #define NewGetIPIOCompletionProc(userRoutine)		\ | 
    
    
      | 817 | 
      		((GetIPIOCompletionUPP) (userRoutine)) | 
    
    
      | 818 | 
      #define NewIPIOCompletionProc(userRoutine)		\ | 
    
    
      | 819 | 
      		((IPIOCompletionUPP) (userRoutine)) | 
    
    
      | 820 | 
      #define NewICMPEchoNotifyProc(userRoutine)		\ | 
    
    
      | 821 | 
      		((ICMPEchoNotifyUPP) (userRoutine)) | 
    
    
      | 822 | 
      #define NewTCPNotifyProc(userRoutine)		\ | 
    
    
      | 823 | 
      		((TCPNotifyUPP) (userRoutine)) | 
    
    
      | 824 | 
      #define NewTCPIOCompletionProc(userRoutine)		\ | 
    
    
      | 825 | 
      		((TCPIOCompletionUPP) (userRoutine)) | 
    
    
      | 826 | 
      #define NewUDPNotifyProc(userRoutine)		\ | 
    
    
      | 827 | 
      		((UDPNotifyUPP) (userRoutine)) | 
    
    
      | 828 | 
      #define NewUDPIOCompletionProc(userRoutine)		\ | 
    
    
      | 829 | 
      		((UDPIOCompletionUPP) (userRoutine)) | 
    
    
      | 830 | 
      #endif | 
    
    
      | 831 | 
       | 
    
    
      | 832 | 
      #if GENERATINGCFM | 
    
    
      | 833 | 
      #define CallGetIPIOCompletionProc(userRoutine, iopb)		\ | 
    
    
      | 834 | 
      		CallUniversalProc((UniversalProcPtr)(userRoutine), uppGetIPIOCompletionProcInfo, (iopb)) | 
    
    
      | 835 | 
      #define CallIPIOCompletionProc(userRoutine, iopb)		\ | 
    
    
      | 836 | 
      		CallUniversalProc((UniversalProcPtr)(userRoutine), uppIPIOCompletionProcInfo, (iopb)) | 
    
    
      | 837 | 
      #define CallICMPEchoNotifyProc(userRoutine, iopb)		\ | 
    
    
      | 838 | 
      		CallUniversalProc((UniversalProcPtr)(userRoutine), uppICMPEchoNotifyProcInfo, (iopb)) | 
    
    
      | 839 | 
      #define CallTCPNotifyProc(userRoutine, tcpStream, eventCode, userDataPtr, terminReason, icmpMsg)		\ | 
    
    
      | 840 | 
      		CallUniversalProc((UniversalProcPtr)(userRoutine), uppTCPNotifyProcInfo, (tcpStream), (eventCode), (userDataPtr), (terminReason), (icmpMsg)) | 
    
    
      | 841 | 
      #define CallTCPIOCompletionProc(userRoutine, iopb)		\ | 
    
    
      | 842 | 
      		CallUniversalProc((UniversalProcPtr)(userRoutine), uppTCPIOCompletionProcInfo, (iopb)) | 
    
    
      | 843 | 
      #define CallUDPNotifyProc(userRoutine, udpStream, eventCode, userDataPtr, icmpMsg)		\ | 
    
    
      | 844 | 
      		CallUniversalProc((UniversalProcPtr)(userRoutine), uppUDPNotifyProcInfo, (udpStream), (eventCode), (userDataPtr), (icmpMsg)) | 
    
    
      | 845 | 
      #define CallUDPIOCompletionProc(userRoutine, iopb)		\ | 
    
    
      | 846 | 
      		CallUniversalProc((UniversalProcPtr)(userRoutine), uppUDPIOCompletionProcInfo, (iopb)) | 
    
    
      | 847 | 
      #else | 
    
    
      | 848 | 
      #define CallGetIPIOCompletionProc(userRoutine, iopb)		\ | 
    
    
      | 849 | 
      		(*(userRoutine))((iopb)) | 
    
    
      | 850 | 
      #define CallIPIOCompletionProc(userRoutine, iopb)		\ | 
    
    
      | 851 | 
      		(*(userRoutine))((iopb)) | 
    
    
      | 852 | 
      #define CallICMPEchoNotifyProc(userRoutine, iopb)		\ | 
    
    
      | 853 | 
      		(*(userRoutine))((iopb)) | 
    
    
      | 854 | 
      #define CallTCPNotifyProc(userRoutine, tcpStream, eventCode, userDataPtr, terminReason, icmpMsg)		\ | 
    
    
      | 855 | 
      		(*(userRoutine))((tcpStream), (eventCode), (userDataPtr), (terminReason), (icmpMsg)) | 
    
    
      | 856 | 
      #define CallTCPIOCompletionProc(userRoutine, iopb)		\ | 
    
    
      | 857 | 
      		(*(userRoutine))((iopb)) | 
    
    
      | 858 | 
      #define CallUDPNotifyProc(userRoutine, udpStream, eventCode, userDataPtr, icmpMsg)		\ | 
    
    
      | 859 | 
      		(*(userRoutine))((udpStream), (eventCode), (userDataPtr), (icmpMsg)) | 
    
    
      | 860 | 
      #define CallUDPIOCompletionProc(userRoutine, iopb)		\ | 
    
    
      | 861 | 
      		(*(userRoutine))((iopb)) | 
    
    
      | 862 | 
      #endif | 
    
    
      | 863 | 
       | 
    
    
      | 864 | 
       | 
    
    
      | 865 | 
      #if PRAGMA_IMPORT_SUPPORTED | 
    
    
      | 866 | 
      #pragma import off | 
    
    
      | 867 | 
      #endif | 
    
    
      | 868 | 
       | 
    
    
      | 869 | 
      #if PRAGMA_ALIGN_SUPPORTED | 
    
    
      | 870 | 
      #pragma options align=reset | 
    
    
      | 871 | 
      #endif | 
    
    
      | 872 | 
       | 
    
    
      | 873 | 
      #ifdef __cplusplus | 
    
    
      | 874 | 
      } | 
    
    
      | 875 | 
      #endif | 
    
    
      | 876 | 
       | 
    
    
      | 877 | 
      #endif /* __MACTCP__ */ |