mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-09 18:35:32 +00:00
363 lines
14 KiB
ObjectPascal
363 lines
14 KiB
ObjectPascal
{******************************************************************************}
|
|
{ }
|
|
{ Winsock2 IPX/SPX Extensions API interface Unit for Object Pascal }
|
|
{ }
|
|
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
|
|
{ Corporation. All Rights Reserved. }
|
|
{ }
|
|
{ The original file is: wsipx.h, released June 2000. The original Pascal }
|
|
{ code is: WSIpxpas, released December 2000. The initial developer of the }
|
|
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
|
|
{ }
|
|
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
|
|
{ Marcel van Brakel. All Rights Reserved. }
|
|
{ }
|
|
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
|
|
{ }
|
|
{ You may retrieve the latest version of this file at the Project JEDI }
|
|
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
|
|
{ }
|
|
{ The contents of this file are used with permission, subject to the Mozilla }
|
|
{ Public License Version 1.1 (the "License"); you may not use this file except }
|
|
{ in compliance with the License. You may obtain a copy of the License at }
|
|
{ http://www.mozilla.org/MPL/MPL-1.1.html }
|
|
{ }
|
|
{ Software distributed under the License is distributed on an "AS IS" basis, }
|
|
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
|
|
{ the specific language governing rights and limitations under the License. }
|
|
{ }
|
|
{ Alternatively, the contents of this file may be used under the terms of the }
|
|
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
|
|
{ provisions of the LGPL License are applicable instead of those above. }
|
|
{ If you wish to allow use of your version of this file only under the terms }
|
|
{ of the LGPL License and not to allow others to use your version of this file }
|
|
{ under the MPL, indicate your decision by deleting the provisions above and }
|
|
{ replace them with the notice and other provisions required by the LGPL }
|
|
{ License. If you do not delete the provisions above, a recipient may use }
|
|
{ your version of this file under either the MPL or the LGPL License. }
|
|
{ }
|
|
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
|
|
{ }
|
|
{******************************************************************************}
|
|
|
|
// $Id: JwaWSNwLink.pas,v 1.7 2007/09/05 11:58:53 dezipaitor Exp $
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
unit JwaWSNwLink;
|
|
|
|
{$WEAKPACKAGEUNIT}
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|
|
|
|
{$HPPEMIT ''}
|
|
{$HPPEMIT '#include "wsnwlink.h"'}
|
|
{$HPPEMIT ''}
|
|
|
|
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
{$I ..\Includes\JediAPILib.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
JwaWinSock2, JwaWinType;
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|
|
{$IFNDEF JWA_IMPLEMENTATIONSECTION}
|
|
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992-1999.
|
|
// Microsoft-specific extensions to the Windows NT IPX/SPX Windows
|
|
// Sockets interface. These extensions are provided for use as
|
|
// necessary for compatibility with existing applications. They are
|
|
// otherwise not recommended for use, as they are only guaranteed to
|
|
// work * over the Microsoft IPX/SPX stack. An application which
|
|
// uses these * extensions may not work over other IPX/SPX
|
|
// implementations. Include this header file after winsock.h and
|
|
// wsipx.h.
|
|
//
|
|
// To open an IPX socket where a particular packet type is sent in
|
|
// the IPX header, specify NSPROTO_IPX + n as the protocol parameter
|
|
// of the socket() API. For example, to open an IPX socket that
|
|
// sets the packet type to 34, use the following socket() call:
|
|
//
|
|
// s = socket(AF_IPX, SOCK_DGRAM, NSPROTO_IPX + 34);
|
|
//
|
|
// Below are socket option that may be set or retrieved by specifying
|
|
// the appropriate manifest in the "optname" parameter of getsockopt()
|
|
// or setsockopt(). Use NSPROTO_IPX as the "level" argument for the
|
|
// call.
|
|
//
|
|
|
|
//
|
|
// Set/get the IPX packet type. The value specified in the
|
|
// optval argument will be set as the packet type on every IPX
|
|
// packet sent from this socket. The optval parameter of
|
|
// getsockopt()/setsockopt() points to an int.
|
|
//
|
|
|
|
const
|
|
IPX_PTYPE = $4000;
|
|
{$EXTERNALSYM IPX_PTYPE}
|
|
|
|
//
|
|
// Set/get the receive filter packet type. Only IPX packets with
|
|
// a packet type equal to the value specified in the optval
|
|
// argument will be returned; packets with a packet type that
|
|
// does not match are discarded. optval points to an int.
|
|
//
|
|
|
|
IPX_FILTERPTYPE = $4001;
|
|
{$EXTERNALSYM IPX_FILTERPTYPE}
|
|
|
|
//
|
|
// Stop filtering on packet type set with IPX_FILTERPTYPE.
|
|
//
|
|
|
|
IPX_STOPFILTERPTYPE = $4003;
|
|
{$EXTERNALSYM IPX_STOPFILTERPTYPE}
|
|
|
|
//
|
|
// Set/get the value of the datastream field in the SPX header on
|
|
// every packet sent. optval points to an int.
|
|
//
|
|
|
|
IPX_DSTYPE = $4002;
|
|
{$EXTERNALSYM IPX_DSTYPE}
|
|
|
|
//
|
|
// Enable extended addressing. On sends, adds the element
|
|
// "unsigned AnsiChar sa_ptype" to the SOCKADDR_IPX structure,
|
|
// making the total length 15 bytes. On receives, add both
|
|
// the sa_ptype and "unsigned AnsiChar sa_flags" to the SOCKADDR_IPX
|
|
// structure, making the total length 16 bytes. The current
|
|
// bits defined in sa_flags are:
|
|
//
|
|
// 0x01 - the received frame was sent as a broadcast
|
|
// 0x02 - the received frame was sent from this machine
|
|
//
|
|
// optval points to a BOOL.
|
|
//
|
|
|
|
IPX_EXTENDED_ADDRESS = $4004;
|
|
{$EXTERNALSYM IPX_EXTENDED_ADDRESS}
|
|
|
|
//
|
|
// Send protocol header up on all receive packets. optval points
|
|
// to a BOOL.
|
|
//
|
|
|
|
IPX_RECVHDR = $4005;
|
|
{$EXTERNALSYM IPX_RECVHDR}
|
|
|
|
//
|
|
// Get the maximum data size that can be sent. Not valid with
|
|
// setsockopt(). optval points to an int where the value is
|
|
// returned.
|
|
//
|
|
|
|
IPX_MAXSIZE = $4006;
|
|
{$EXTERNALSYM IPX_MAXSIZE}
|
|
|
|
//
|
|
// Query information about a specific adapter that IPX is bound
|
|
// to. In a system with n adapters they are numbered 0 through n-1.
|
|
// Callers can issue the IPX_MAX_ADAPTER_NUM getsockopt() to find
|
|
// out the number of adapters present, or call IPX_ADDRESS with
|
|
// increasing values of adapternum until it fails. Not valid
|
|
// with setsockopt(). optval points to an instance of the
|
|
// IPX_ADDRESS_DATA structure with the adapternum filled in.
|
|
//
|
|
|
|
IPX_ADDRESS = $4007;
|
|
{$EXTERNALSYM IPX_ADDRESS}
|
|
|
|
// mvb LongBool's in the following record changed to Boolean's (JCP)
|
|
|
|
type
|
|
_IPX_ADDRESS_DATA = record
|
|
adapternum: Integer; // input: 0-based adapter number
|
|
netnum: array [0..3] of UCHAR; // output: IPX network number
|
|
nodenum: array [0..5] of UCHAR; // output: IPX node address
|
|
wan: Boolean; // output: TRUE = adapter is on a wan link
|
|
status: Boolean; // output: TRUE = wan link is up (or adapter is not wan)
|
|
maxpkt: Integer; // output: max packet size, not including IPX header
|
|
linkspeed: ULONG; // output: link speed in 100 bytes/sec (i.e. 96 == 9600 bps)
|
|
end;
|
|
{$EXTERNALSYM _IPX_ADDRESS_DATA}
|
|
IPX_ADDRESS_DATA = _IPX_ADDRESS_DATA;
|
|
{$EXTERNALSYM IPX_ADDRESS_DATA}
|
|
PIPX_ADDRESS_DATA = ^IPX_ADDRESS_DATA;
|
|
{$EXTERNALSYM PIPX_ADDRESS_DATA}
|
|
TIpxAddressData = IPX_ADDRESS_DATA;
|
|
PIpxAddressData = PIPX_ADDRESS_DATA;
|
|
|
|
//
|
|
// Query information about a specific IPX network number. If the
|
|
// network is in IPX's cache it will return the information directly,
|
|
// otherwise it will issue RIP requests to find it. Not valid with
|
|
// setsockopt(). optval points to an instance of the IPX_NETNUM_DATA
|
|
// structure with the netnum filled in.
|
|
//
|
|
|
|
const
|
|
IPX_GETNETINFO = $4008;
|
|
{$EXTERNALSYM IPX_GETNETINFO}
|
|
|
|
type
|
|
_IPX_NETNUM_DATA = record
|
|
netnum: array [0..3] of UCHAR; // input: IPX network number
|
|
hopcount: USHORT; // output: hop count to this network, in machine order
|
|
netdelay: USHORT; // output: tick count to this network, in machine order
|
|
cardnum: Integer; // output: 0-based adapter number used to route to this net;
|
|
// can be used as adapternum input to IPX_ADDRESS
|
|
router: array [0..5] of UCHAR; // output: MAC address of the next hop router, zeroed if
|
|
// the network is directly attached
|
|
end;
|
|
{$EXTERNALSYM _IPX_NETNUM_DATA}
|
|
IPX_NETNUM_DATA = _IPX_NETNUM_DATA;
|
|
{$EXTERNALSYM IPX_NETNUM_DATA}
|
|
PIPX_NETNUM_DATA = ^IPX_NETNUM_DATA;
|
|
{$EXTERNALSYM PIPX_NETNUM_DATA}
|
|
TIpxNetNumData = IPX_NETNUM_DATA;
|
|
PIpxNetNumData = PIPX_NETNUM_DATA;
|
|
|
|
//
|
|
// Like IPX_GETNETINFO except it *does not* issue RIP requests. If the
|
|
// network is in IPX's cache it will return the information, otherwise
|
|
// it will fail (see also IPX_RERIPNETNUMBER which *always* forces a
|
|
// re-RIP). Not valid with setsockopt(). optval points to an instance of
|
|
// the IPX_NETNUM_DATA structure with the netnum filled in.
|
|
//
|
|
|
|
const
|
|
IPX_GETNETINFO_NORIP = $4009;
|
|
{$EXTERNALSYM IPX_GETNETINFO_NORIP}
|
|
|
|
//
|
|
// Get information on a connected SPX socket. optval points
|
|
// to an instance of the IPX_SPXCONNSTATUS_DATA structure.
|
|
//
|
|
// All numbers are in Novell (high-low) order.
|
|
//
|
|
|
|
IPX_SPXGETCONNECTIONSTATUS = $400B;
|
|
{$EXTERNALSYM IPX_SPXGETCONNECTIONSTATUS}
|
|
|
|
type
|
|
_IPX_SPXCONNSTATUS_DATA = record
|
|
ConnectionState: UCHAR;
|
|
WatchDogActive: UCHAR;
|
|
LocalConnectionId: USHORT;
|
|
RemoteConnectionId: USHORT;
|
|
LocalSequenceNumber: USHORT;
|
|
LocalAckNumber: USHORT;
|
|
LocalAllocNumber: USHORT;
|
|
RemoteAckNumber: USHORT;
|
|
RemoteAllocNumber: USHORT;
|
|
LocalSocket: USHORT;
|
|
ImmediateAddress: array [0..5] of UCHAR;
|
|
RemoteNetwork: array [0..3] of UCHAR;
|
|
RemoteNode: array [0..5] of UCHAR;
|
|
RemoteSocket: USHORT;
|
|
RetransmissionCount: USHORT;
|
|
EstimatedRoundTripDelay: USHORT; // In milliseconds
|
|
RetransmittedPackets: USHORT;
|
|
SuppressedPacket: USHORT;
|
|
end;
|
|
{$EXTERNALSYM _IPX_SPXCONNSTATUS_DATA}
|
|
IPX_SPXCONNSTATUS_DATA = _IPX_SPXCONNSTATUS_DATA;
|
|
{$EXTERNALSYM IPX_SPXCONNSTATUS_DATA}
|
|
PIPX_SPXCONNSTATUS_DATA = ^IPX_SPXCONNSTATUS_DATA;
|
|
{$EXTERNALSYM PIPX_SPXCONNSTATUS_DATA}
|
|
TIpxSpcConnStatusData = IPX_SPXCONNSTATUS_DATA;
|
|
PIpxSpcConnStatusData = PIPX_SPXCONNSTATUS_DATA;
|
|
|
|
//
|
|
// Get notification when the status of an adapter that IPX is
|
|
// bound to changes. Typically this will happen when a wan line
|
|
// goes up or down. Not valid with setsockopt(). optval points
|
|
// to a buffer which contains an IPX_ADDRESS_DATA structure
|
|
// followed immediately by a HANDLE to an unsignaled event.
|
|
//
|
|
// When the getsockopt() query is submitted, it will complete
|
|
// successfully. However, the IPX_ADDRESS_DATA pointed to by
|
|
// optval will not be updated at that point. Instead the
|
|
// request is queued internally inside the transport.
|
|
//
|
|
// When the status of an adapter changes, IPX will locate a
|
|
// queued getsockopt() query and fill in all the fields in the
|
|
// IPX_ADDRESS_DATA structure. It will then signal the event
|
|
// pointed to by the HANDLE in the optval buffer. This handle
|
|
// should be obtained before calling getsockopt() by calling
|
|
// CreateEvent(). If multiple getsockopts() are submitted at
|
|
// once, different events must be used.
|
|
//
|
|
// The event is used because the call needs to be asynchronous
|
|
// but currently getsockopt() does not support this.
|
|
//
|
|
// WARNING: In the current implementation, the transport will
|
|
// only signal one queued query for each status change. Therefore
|
|
// only one service which uses this query should be running at
|
|
// once.
|
|
//
|
|
|
|
const
|
|
IPX_ADDRESS_NOTIFY = $400C;
|
|
{$EXTERNALSYM IPX_ADDRESS_NOTIFY}
|
|
|
|
//
|
|
// Get the maximum number of adapters present. If this call returns
|
|
// n then the adapters are numbered 0 through n-1. Not valid
|
|
// with setsockopt(). optval points to an int where the value
|
|
// is returned.
|
|
//
|
|
|
|
IPX_MAX_ADAPTER_NUM = $400D;
|
|
{$EXTERNALSYM IPX_MAX_ADAPTER_NUM}
|
|
|
|
//
|
|
// Like IPX_GETNETINFO except it forces IPX to re-RIP even if the
|
|
// network is in its cache (but not if it is directly attached to).
|
|
// Not valid with setsockopt(). optval points to an instance of
|
|
// the IPX_NETNUM_DATA structure with the netnum filled in.
|
|
//
|
|
|
|
IPX_RERIPNETNUMBER = $400E;
|
|
{$EXTERNALSYM IPX_RERIPNETNUMBER}
|
|
|
|
//
|
|
// A hint that broadcast packets may be received. The default is
|
|
// TRUE. Applications that do not need to receive broadcast packets
|
|
// should set this sockopt to FALSE which may cause better system
|
|
// performance (note that it does not necessarily cause broadcasts
|
|
// to be filtered for the application). Not valid with getsockopt().
|
|
// optval points to a BOOL.
|
|
//
|
|
|
|
IPX_RECEIVE_BROADCAST = $400F;
|
|
{$EXTERNALSYM IPX_RECEIVE_BROADCAST}
|
|
|
|
//
|
|
// On SPX connections, don't delay before sending ack. Applications
|
|
// that do not tend to have back-and-forth traffic over SPX should
|
|
// set this; it will increase the number of acks sent but will remove
|
|
// delays in sending acks. optval points to a BOOL.
|
|
//
|
|
|
|
IPX_IMMEDIATESPXACK = $4010;
|
|
{$EXTERNALSYM IPX_IMMEDIATESPXACK}
|
|
{$ENDIF JWA_IMPLEMENTATIONSECTION}
|
|
|
|
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
implementation
|
|
//uses ...
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|
|
|
|
|
|
{$IFNDEF JWA_INTERFACESECTION}
|
|
//your implementation here
|
|
{$ENDIF JWA_INTERFACESECTION}
|
|
|
|
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
end.
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|