{******************************************************************************} { } { 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 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 char sa_ptype" to the SOCKADDR_IPX structure, // making the total length 15 bytes. On receives, add both // the sa_ptype and "unsigned char 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}