mirror of https://github.com/lianthony/NT4.0
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.
960 lines
23 KiB
960 lines
23 KiB
//*++======================================================================
|
|
// Program Name: Ipx/Spx 32-bit API
|
|
//
|
|
// File Name: NWSIPX32.H
|
|
//
|
|
// Version: v1.00
|
|
//
|
|
// Abstract: This module defines the 32-bit API for IPX/SPX
|
|
//
|
|
// Copyright (C) 1995 Novell, Inc. All Rights Reserved.
|
|
//
|
|
// No part of this file may be duplicated, revised, translated, localized,
|
|
// or modified in any manner or compiled, linked or uploaded or downloaded
|
|
// to or from any computer system without the prior written consent of
|
|
// Novell, Inc.
|
|
//=====================================================================--*/
|
|
|
|
#ifndef NWSIPX32_H
|
|
#define NWSIPX32_H
|
|
|
|
//===[ Manifest constants ]================================================
|
|
|
|
//
|
|
// Current API version
|
|
//
|
|
|
|
#define NWSIPX32_API_VERSION 0x00000001
|
|
|
|
|
|
//
|
|
// NWTCB Synchronization Types
|
|
//
|
|
// These types are used to control the request completion notification to
|
|
// the application. They are passed as a parameter to the
|
|
// NWSipxAllocControlBlock and NWSipxChangeControlBlock API primitives.
|
|
//
|
|
|
|
#define SIPX_API_EVENT 0x00000001 // Request allocs event
|
|
#define SIPX_API_MUX_EVENT 0x00000002 // Request allocs mux event
|
|
#define SIPX_BLOCKING 0x00000003 // Request is synchronous
|
|
#define SIPX_POLLING 0x00000004 // Request will poll
|
|
#define SIPX_USER_EVENT 0x00000005 // Request uses app event
|
|
#define SIPX_CALLBACK 0x00000006 // Request uses app callback
|
|
|
|
|
|
//
|
|
// Event Timeout Constant Definitions.
|
|
//
|
|
// These constants are used as parameters to the NWSipxWaitForSingleEvent
|
|
// and NWSipxWaitForMultipleEvents API primitives. The SIPX_NO_WAIT
|
|
// causes the API primitives to check the signaled status of the events but
|
|
// not wait for event completion. The SIPX_INFINITE_WAIT constant causes
|
|
// the wait API primitives to wait forever for the event to be signalled.
|
|
//
|
|
|
|
#define SIPX_NO_WAIT 0x00000000 // Return immediately.
|
|
#define SIPX_INFINITE_WAIT 0xFFFFFFFF // Wait forever
|
|
|
|
|
|
//
|
|
// Mulitiple API Event Constants
|
|
//
|
|
// This constant is used when calling NWSipxAllocControlBlock and
|
|
// NWSipxChangeControlBlock with the SIPX_API_MUX_EVENT synchronization type
|
|
// specified. A pointer to this constant is passed as a parameter to tell
|
|
// the system to allocate the multiple events from a new event group and pass
|
|
// the event group identifier back in its place.
|
|
//
|
|
|
|
#define SIPX_ALLOC_MUX_GROUP (SIPXMUXGRP_HANDLE) 0xFFFFFFFF
|
|
|
|
|
|
//
|
|
// Query Service Types
|
|
//
|
|
// These type are used when calling the NWSipxQueryServices API primitive.
|
|
// They are passed in the queryType parameter to specify the type of SAP
|
|
// query to perform.
|
|
//
|
|
|
|
#define SIPX_ALL_SERVERS 0x00000001 // Query for all servers
|
|
#define SIPX_NEAREST_SERVER 0x00000002 // Query for nearest server
|
|
|
|
|
|
//
|
|
// Establish Connection Flags
|
|
//
|
|
// These flags are set when calling the NWSipxEstablishConnection API
|
|
// primitive. They are passed by the application in the NWTCB structure
|
|
// in the TCBFlags field. The SIPX_CONNECT_NO_WATCHDOG flag disables the
|
|
// connection keep-alive protocol.
|
|
//
|
|
|
|
#define SIPX_CONNECT_NO_WATCHDOG 0x00000001 // Don't enable the watchdog
|
|
|
|
|
|
//
|
|
// Listen For Connection Flags
|
|
//
|
|
// These flags are set when calling the NWSipxListenForConnection and
|
|
// the NWSipxAcceptConnection API primitives. They are passed by the
|
|
// application in the NWTCB structure in the TCBFlags field. The
|
|
// SIPX_LISTEN_DELAY_ACCEPT flag forces the listen request to return
|
|
// immediately upon receiving a connection request without replying to the
|
|
// request. The connection request can be satisified later by calling
|
|
// NWSipxAcceptConnection. The SIPX_LISTEN_NO_WATCHDOG flag disables the
|
|
// connection keep-alive protocol.
|
|
//
|
|
|
|
#define SIPX_LISTEN_DELAY_ACCEPT 0x00000001 // Delayed connection accept
|
|
#define SIPX_LISTEN_NO_WATCHDOG 0x00000002 // Don't enable the watchdog
|
|
|
|
|
|
//
|
|
// Terminate Connection Flags
|
|
//
|
|
// These flags are set when calling the NWSipxTerminateConnection API
|
|
// primitive. They are passed by the application in the NWTCB structure
|
|
// in the TCBFlags field. The SIPX_TERM_ABORT flags causes the local
|
|
// connection endpoint to be closed without informing the remote connection
|
|
// endpoint. The SIPX_TERM_ACKED flag cause the remote connection endpoint
|
|
// to be notified that the local endpoint is closing.
|
|
//
|
|
|
|
#define SIPX_TERM_ABORT 0x00000001 // Abort connection
|
|
#define SIPX_TERM_ACKED 0x00000002 // SPX terminate
|
|
#define SIPX_TERM_REJECT 0x00000004 // Reject connection
|
|
|
|
|
|
//
|
|
// Send Message Flags
|
|
//
|
|
// These flags are set when calling the NWSipxSendMessage API primitive.
|
|
// They are passed by the application in the NWTCB structure in the TCBFlags
|
|
// field. The SIPX_SNDMSG_PARTIAL flag tells the SPX driver not to set the
|
|
// end-of-message bit in the SPX packet header. Setting the end-of-message
|
|
// bit implies that the entire message was represented in the send request.
|
|
// The SIPX_SNDMSG_DSTRM_TYPE flag sets the value in the TCBDatastreamType
|
|
// field of the NWTCB in the datastream field of the SPX packet header. The
|
|
// SIPX_SNDMSG_ATTN flag tell the SPX driver to set the SPX attention bit
|
|
// in the SPX header of send packet.
|
|
//
|
|
|
|
#define SIPX_SNDMSG_PARTIAL 0x00000001 // Message is not all here
|
|
#define SIPX_SNDMSG_DSTRM_TYPE 0x00000002 // Set datastream type
|
|
#define SIPX_SNDMSG_ATTN 0x00000004 // Set SPX ATTN bit
|
|
|
|
|
|
//
|
|
// Send Datagram Flags
|
|
//
|
|
// These flags are set when calling the NWSipxSendDatagram API primitive.
|
|
// They are passed by the application in the NWTCB structure in the TCBFlags
|
|
// field. The SIPX_SNDDG_PACKET_TYPE flag sets the value in the
|
|
// TCBPacketType field of the NWTCB in the packet type field of the IPX
|
|
// header. The SIPX_SNDDG_VERIFY_ROUTE causes IPX to rediscover the route
|
|
// to the remote endpoint. The SIPX_SNDDG_SPECIFIC_ROUTE tells the IPX
|
|
// driver to use the subnetwork handle in the TCBSubnetworkHandle field of
|
|
// the NWTCB structure to send the packet. The SIPX_SNDDG_BEST_ROUTE flag
|
|
// tells the IPX driver to select the best route based on the packet size.
|
|
// The handle of the subnetwork used to send the packet will be returned in
|
|
// the TCBSubnetworkHandle field of the NWTCB structure when the
|
|
// NWSipxSendDatagram request completes. The SIPX_SNDDG_SPECIFIC_ROUTE and
|
|
// the SIPX_SNDDG_BEST_ROUTE flags are mutually exclusive. The
|
|
// SIPX_SNDDG_GENERATE_CHKSUM flag causes a checksum to be generated using
|
|
// the IPX packet and set in the checksum field of the IPX header.
|
|
//
|
|
|
|
#define SIPX_SNDDG_PACKET_TYPE 0x00000001 // Set the packet type
|
|
#define SIPX_SNDDG_VERIFY_ROUTE 0x00000002 // Get the route again
|
|
#define SIPX_SNDDG_SPECIFIC_ROUTE 0x00000004 // Subnetwork specified
|
|
#define SIPX_SNDDG_BEST_ROUTE 0x00000008 // Ipx choose best route
|
|
#define SIPX_SNDDG_GENERATE_CHKSUM 0x00000010 // Send with checksum
|
|
|
|
|
|
//
|
|
// Receive Message Flags
|
|
//
|
|
// These flags are returned when calling the NWSipxReceiveMessage API
|
|
// primitive. They are returned by the system in the TCBFlags field of the
|
|
// NWTCB structure. The SIPX_RCVMSG_PARTIAL is returned when the
|
|
// end-of-message bit in the received SPX header is not set or if the
|
|
// received data overflows the application's buffer. If the
|
|
// SIPX_RCVMSG_PARTIAL bit is not set, end-of-message is implied and the
|
|
// entire message has been received. The SIPX_RCVMSG_ATTN flag is returned
|
|
// when the SPX attention bit is set in the received SPX header.
|
|
//
|
|
|
|
#define SIPX_RCVMSG_PARTIAL 0x00000001 // More data to receive
|
|
#define SIPX_RCVMSG_ATTN 0x00000002 // Received SPX ATTN bit
|
|
|
|
|
|
//
|
|
// Receive Datagram Flags
|
|
//
|
|
// These flags are set when calling the NWSipxReceiveDatagram API primitive.
|
|
// They are passed by the application in the TCBFlags field of the NWTCB
|
|
// structure. The SIPX_RCVDG_VALIDATE_CHKSUM flag causes the checksum
|
|
// received in the IPX packet header to be verified.
|
|
//
|
|
|
|
#define SIPX_RCVDG_VALIDATE_CHKSUM 0x00000001 // Validate received checksum
|
|
|
|
|
|
//
|
|
// Query For Services Flags
|
|
//
|
|
// The SIPX_QUERY_SPECIFIC_ROUTE is used to tell the query process which
|
|
// subnetwork to send the query request out on.
|
|
//
|
|
|
|
#define SIPX_QUERY_SPECIFIC_ROUTE 0x00000001 // Use specified subnetwork
|
|
|
|
|
|
//
|
|
// Transport events.
|
|
//
|
|
// These are events that the application may register to receive
|
|
// notification for when calling the NWSipxRegisterForTransportEvent API
|
|
// primitive. They are passed by the application in the TCBTransportEvent
|
|
// field of the NWTCB structure.
|
|
//
|
|
|
|
#define SIPX_LISTEN_FOR_DISCONNECT 0x00000001 // Listen for remote term
|
|
#define SIPX_SCHEDULE_TIMER_EVENT 0x00000002 // Schedule timer event
|
|
#define SIPX_SUBNET_STATUS_CHANGE 0x00000003 // Subnet status change
|
|
|
|
|
|
//
|
|
// Information Levels
|
|
//
|
|
// Each level causes different information to be set or retrieved. These
|
|
// levels are passed by the application as parameters to the
|
|
// NWSipxGetInfomation and NWSipxSetInformation API primitives.
|
|
//
|
|
//
|
|
|
|
#define SIPX_API_INFORMATION 0x00000001
|
|
#define SIPX_SOCKET_INFORMATION 0x00000002
|
|
#define SIPX_CONN_INFORMATION 0x00000003
|
|
#define SIPX_NWTCB_INFORMATION 0x00000004
|
|
|
|
|
|
//
|
|
// Maximum Transport Address Length
|
|
//
|
|
// This is the maximum length of a transport address. It is used in the
|
|
// NETADDR structure.
|
|
//
|
|
|
|
#define SIPX_MAX_TRANS_ADDR_LEN 32
|
|
|
|
|
|
//
|
|
// Connection States
|
|
//
|
|
// These values are retrieved in the SIPX_CONN_INFO structure by the
|
|
// NWSipxGetInformation API primitive and represent the current state of
|
|
// the specified connection.
|
|
//
|
|
|
|
#define SIPX_ALLOCATED 0x00000001
|
|
#define SIPX_CONNECTING 0x00000002
|
|
#define SIPX_LISTENING 0x00000003
|
|
#define SIPX_WAITING_ACCEPT 0x00000004
|
|
#define SIPX_CONNECTED 0x00000005
|
|
#define SIPX_TERMINATING 0x00000006
|
|
#define SIPX_TERMINATED 0x00000007
|
|
|
|
|
|
//
|
|
// NWTCB State Parameters
|
|
//
|
|
// These values are retrieved in the SIPX_NWTCB_INFO structure by the
|
|
// NWSipxGetInformation API primitive and describe the current state of the
|
|
// specified NWTCB.
|
|
//
|
|
|
|
#define SIPX_TCB_ALLOCATED 0x00000000 // Control block is allocated
|
|
#define SIPX_TCB_IN_USE 0x00000001 // Control block is in use
|
|
|
|
|
|
//
|
|
//
|
|
// Connection Parameters.
|
|
//
|
|
// These values are set and retreived in the SIPX_CONN_INFO structure by the
|
|
// NWSipxGetInformation and NWSipxSetInformation API primitives.
|
|
// SIPX_CONN_STREAM tells the SPX driver to ignore the end-of-message bit
|
|
// and hand up any received data as soon as it arrives, even if the buffer
|
|
// is not full. SIPX_CONN_MESSAGE value causes the SPX driver to respect
|
|
// the end-of-message bit. The SIPX_CONN_LONG_TERM and SIPX_CONN_SHORT_TERM
|
|
// values specifies to the SPX driver the lifetime of the connection.
|
|
//
|
|
|
|
#define SIPX_CONN_STREAM 0x00000001 // Ignore the EOM bit
|
|
#define SIPX_CONN_MESSAGE 0x00000002 // Respect the EOM bit
|
|
#define SIPX_CONN_LONG_TERM 0x00000003 // Long lived connection
|
|
#define SIPX_CONN_SHORT_TERM 0x00000004 // Short lived connection
|
|
|
|
|
|
//
|
|
// Socket Parameters
|
|
//
|
|
// These values are set and retreived in the SIPX_SOCKET_INFO structure by
|
|
// the NWSipxGetInformation and NWSipxSetInformation API primitives. The
|
|
// SIPX_SOCK_STATIC and the SIPX_SOCK_DYNAMIC flags tells whether the
|
|
// specified socket is a named socket or a dynamic socket.
|
|
//
|
|
|
|
#define SIPX_SOCK_STATIC 0x00000001 // Named socket
|
|
#define SIPX_SOCK_DYNAMIC 0x00000002 // Dynamic socket
|
|
|
|
|
|
//
|
|
// SUBNET Parameters
|
|
//
|
|
// These values are retreived in the SIPX_SUBNET_INFO structure by
|
|
// the NWSipxGetInformation API primitive. The SIPX_SN_XSUM_FLAG
|
|
// tells whether the SUBNET supports checksumming. The SIPX_SN_DEFAULT_FLAG
|
|
// indicates that this SUBNET is the default subnetwork.
|
|
//
|
|
|
|
#define SIPX_SN_XSUM_FLAG 0x00000001 // Checksum supported
|
|
#define SIPX_SN_DEFAULT_FLAG 0x00000002 // This is the default subnet
|
|
#define SIPX_SN_ACTIVE_FLAG 0x00000004 // Subnet is active
|
|
|
|
|
|
//
|
|
// Status Code Definitions
|
|
//
|
|
// These status codes are returned by the API primitives. Macros are
|
|
// defined to quickly check whether the status is informational or
|
|
// indicates an error.
|
|
//
|
|
|
|
#define SIPX_SUCCESS(x) !(((nuint32)(x)) & 0x80000000)
|
|
#define SIPX_ERROR(x) (((nuint32)(x)) & 0x80000000)
|
|
|
|
|
|
//
|
|
// If the most significant bit of the return status code is set, this
|
|
// indicates an error condition. If the second most significant bit is
|
|
// set, this indicates a warning or informational status. If both these
|
|
// bits are clear, the operation was successful.
|
|
//
|
|
|
|
#define SIPX_SUCCESSFUL 0x00000000
|
|
#define SIPX_PENDING 0x00000001
|
|
|
|
#define SIPX_ACCESS_DENIED 0x80000001
|
|
#define SIPX_ACCESS_VIOLATION 0x80000002
|
|
#define SIPX_CANCELED 0x80000003
|
|
#define SIPX_CONNECTION_ABORTED 0x80000004
|
|
#define SIPX_CANNOT_CANCEL 0x80000005
|
|
#define SIPX_CONNECTION_TERMINATED 0x80000006
|
|
#define SIPX_INSUFFICIENT_RESOURCES 0x80000007
|
|
#define SIPX_INVALID_SUBNETWORK_HANDLE 0x80000008
|
|
#define SIPX_INVALID_CHECKSUM 0x80000009
|
|
#define SIPX_INVALID_CONNECTION_HANDLE 0x8000000A
|
|
#define SIPX_INVALID_FRAGMENT_COUNT 0x8000000B
|
|
#define SIPX_INVALID_FRAGMENT_LIST 0x8000000C
|
|
#define SIPX_INVALID_HANDLE 0x8000000D
|
|
#define SIPX_INVALID_IOCTL_BUFFER_LEN 0x8000000E
|
|
#define SIPX_INVALID_IOCTL_FUNCTION 0x8000000F
|
|
#define SIPX_INVALID_INFO_TYPE 0x80000010
|
|
#define SIPX_INVALID_MUX_GROUP_HANDLE 0x80000012
|
|
#define SIPX_INVALID_NETWORK_ADDRESS 0x80000013
|
|
#define SIPX_INVALID_NWTCB 0x80000014
|
|
#define SIPX_INVALID_NWTCB_FLAGS 0x80000015
|
|
#define SIPX_INVALID_PARAMETER 0x80000016
|
|
#define SIPX_INVALID_PARAMETER_MIX 0x80000017
|
|
#define SIPX_INVALID_QUERY_TYPE 0x80000018
|
|
#define SIPX_INVALID_SERVICE_TYPE 0x80000019
|
|
#define SIPX_INVALID_SOCKET_HANDLE 0x8000001A
|
|
#define SIPX_INVALID_STATE 0x8000001B
|
|
#define SIPX_INVALID_SYNC_TYPE 0x8000001C
|
|
#define SIPX_INVALID_TRANSPORT_EVENT 0x8000001D
|
|
#define SIPX_MEMORY_LOCK_ERROR 0x8000001E
|
|
#define SIPX_NO_SUBNETS_BOUND_TO_IPX 0x8000001F
|
|
#define SIPX_NO_RESPONSE_FROM_TARGET 0x80000020
|
|
#define SIPX_NO_ROUTE_TO_TARGET 0x80000021
|
|
#define SIPX_SERVICE_NOT_ACTIVE 0x80000022
|
|
#define SIPX_NWTCB_IN_USE 0x80000023
|
|
#define SIPX_PARTIAL_SERVER_INFO 0x80000024
|
|
#define SIPX_REQUEST_NOT_PENDING 0x80000025
|
|
#define SIPX_SOCKET_IN_USE 0x80000026
|
|
#define SIPX_UNSUCCESSFUL 0x80000027
|
|
#define SIPX_INTERNAL_ERROR 0x80000028
|
|
#define SIPX_SERVICE_ALREADY_ACTIVE 0x80000029
|
|
#define SIPX_INVALID_SERVICE_NAME 0x8000002A
|
|
|
|
|
|
//===[ Type definitions ]==================================================
|
|
|
|
//
|
|
// Transport address types.
|
|
//
|
|
|
|
typedef enum TAG_TRANSPORT_ADDR_TYPE
|
|
{
|
|
TA_IPX_SPX,
|
|
TA_COUNT
|
|
|
|
} TRANSPORT_ADDR_TYPE;
|
|
|
|
|
|
//
|
|
// NetWare IPX/SPX transport address structure definition.
|
|
//
|
|
|
|
typedef struct TAG_IPXADDR
|
|
{
|
|
nuint8 NANet[4];
|
|
nuint8 NANode[6];
|
|
nuint8 NASocket[2];
|
|
|
|
} IPXADDR, *PIPXADDR;
|
|
|
|
|
|
//
|
|
// Transport Address Structure
|
|
//
|
|
// This structure can be used to define multiple address types.
|
|
// The only address type currently supported is the TA_IPX_SPX type.
|
|
//
|
|
|
|
typedef struct TAG_NETADDR
|
|
{
|
|
nuint32 NAType;
|
|
nuint32 NALength;
|
|
union
|
|
{
|
|
nuint8 NAGenAddress[SIPX_MAX_TRANS_ADDR_LEN];
|
|
IPXADDR NAIpxAddress;
|
|
|
|
} NAAddress;
|
|
|
|
} NETADDR, *PNETADDR;
|
|
|
|
|
|
//
|
|
// Data fragment structure defintion.
|
|
//
|
|
|
|
typedef struct TAG_FRAGMENT
|
|
{
|
|
nptr FAddress;
|
|
nuint32 FLength;
|
|
|
|
} FRAGMENT, *PFRAGMENT;
|
|
|
|
|
|
//
|
|
// SIPX Handle structure definition
|
|
//
|
|
|
|
struct TAG_SIPXHANDLE;
|
|
|
|
|
|
//
|
|
// Transport address object context definition.
|
|
//
|
|
|
|
typedef struct TAG_SIPXHANDLE *SIPXSOCK_HANDLE, **PSIPXSOCK_HANDLE;
|
|
|
|
|
|
//
|
|
// NetWare transport connection context structure.
|
|
//
|
|
|
|
|
|
typedef struct TAG_SIPXHANDLE *SIPXCONN_HANDLE, **PSIPXCONN_HANDLE;
|
|
|
|
|
|
//
|
|
// Subnetwork object context definition.
|
|
//
|
|
|
|
typedef struct TAG_SIPXHANDLE *SIPXSUBNET_HANDLE, **PSIPXSUBNET_HANDLE;
|
|
|
|
|
|
//
|
|
// MuxGroup object context definition.
|
|
//
|
|
|
|
typedef struct TAG_SIPXHANDLE *SIPXMUXGRP_HANDLE, **PSIPXMUXGRP_HANDLE;
|
|
|
|
|
|
//
|
|
// NetWare transport control block structure definition.
|
|
//
|
|
|
|
typedef struct TAG_NWTCB
|
|
{
|
|
//
|
|
// Link pointers for control block list manipulation.
|
|
//
|
|
|
|
struct TAG_NWTCB *TCBNext;
|
|
struct TAG_NWTCB *TCBPrevious;
|
|
|
|
|
|
//
|
|
// The socket handle returned by NWSipxOpenSocket.
|
|
//
|
|
|
|
SIPXSOCK_HANDLE TCBSockHandle;
|
|
|
|
|
|
//
|
|
// The connection handle returned by NWSipxOpenConnectionEndpoint.
|
|
//
|
|
|
|
SIPXCONN_HANDLE TCBConnHandle;
|
|
|
|
|
|
//
|
|
// Client specific context field, typically used when specifing
|
|
// a callback routine.
|
|
//
|
|
|
|
nptr TCBClientContext;
|
|
|
|
|
|
//
|
|
// Transport event parameters. These are used when registering
|
|
// for specific transport events.
|
|
//
|
|
|
|
nuint32 TCBTransportEvent;
|
|
union
|
|
{
|
|
nuint32 TCBTimeout;
|
|
nuint8 TCBEventSpace[32];
|
|
|
|
} TCBEvent;
|
|
|
|
|
|
//
|
|
// The final status for the request just completed.
|
|
//
|
|
|
|
nuint32 TCBFinalStatus;
|
|
|
|
|
|
//
|
|
// Number of bytes sent or received on a transfer (send/receive) data
|
|
// operation.
|
|
//
|
|
|
|
nuint32 TCBBytesTransferred;
|
|
|
|
|
|
//
|
|
// Request/Reply flags used to set or indicate status.
|
|
//
|
|
|
|
nflag32 TCBFlags;
|
|
|
|
|
|
//
|
|
// Network address of remote client. Filled in by
|
|
// NWSipxListenForConnection and NWSipxReceiveDatagram. Set by
|
|
// application for NWSipxEstablishConnection and NWSipxSendDatagram.
|
|
//
|
|
|
|
NETADDR TCBRemoteAddress;
|
|
|
|
|
|
//
|
|
// Handle of subnetwork used to send or receive packet. The subnetwork
|
|
// handle may be set in this field by the application when using the
|
|
// NWSipxSendDatagram API primitive to direct IPX to use a specific
|
|
// subnetwork. The handle of the subnetwork used to send or receive the
|
|
// packet is returned in this field upon completion of the
|
|
// NWSipxSendDatagram, NWSipxReceiveDatagram, NWSipxEstablishConnection
|
|
// and NWSipxListenForConnection requests.
|
|
//
|
|
|
|
SIPXSUBNET_HANDLE TCBSubnetworkHandle;
|
|
|
|
|
|
//
|
|
// Message sequence number.
|
|
//
|
|
|
|
nuint32 TCBMsgSequenceNumber;
|
|
|
|
|
|
//
|
|
// IPX packet type.
|
|
//
|
|
|
|
nuint8 TCBPacketType;
|
|
|
|
|
|
//
|
|
// SPX Datastream type.
|
|
//
|
|
|
|
nuint8 TCBDataStreamType;
|
|
|
|
|
|
//
|
|
// Reserved for future use.
|
|
//
|
|
|
|
|
|
nuint8 TCBReserved[2];
|
|
|
|
|
|
//
|
|
// Number of data fragments specified by the client.
|
|
//
|
|
|
|
nuint32 TCBFragmentCount;
|
|
|
|
|
|
//
|
|
// Pointer to the client data fragment list.
|
|
//
|
|
|
|
PFRAGMENT TCBFragmentList;
|
|
|
|
} NWTCB, *PNWTCB, **PPNWTCB;
|
|
|
|
|
|
//
|
|
// API Information Structure
|
|
//
|
|
//
|
|
// The SUBNET_INFO structure is associated with the API_INFO structure.
|
|
// Each SUBNET_INFO structure describes an attachment to the network.
|
|
// There is a unique local network address (net.node) bound to each SUBNET
|
|
// by the IPX protocol stack.
|
|
//
|
|
|
|
typedef struct TAG_SIPX_SUBNET_INFO
|
|
{
|
|
SIPXSUBNET_HANDLE SNSubnetworkHandle;
|
|
nuint32 SNMaxNsduSize;
|
|
NETADDR SNNetAddress;
|
|
nflag32 SNFlags;
|
|
|
|
} SIPX_SUBNET_INFO, *PSIPX_SUBNET_INFO;
|
|
|
|
|
|
typedef struct TAG_SIPX_API_INFO
|
|
{
|
|
nuint32 AIApiVersion;
|
|
nuint32 AIIpxVersion;
|
|
nuint32 AISpxVersion;
|
|
nuint32 AISubnetCount; // Number of SUBNETs bound to by IPX
|
|
SIPX_SUBNET_INFO AISubnetInfo[1]; // Array of AISubnetCount entries
|
|
|
|
} SIPX_API_INFO, *PSIPX_API_INFO;
|
|
|
|
|
|
//
|
|
// Socket Information Structure
|
|
//
|
|
|
|
typedef struct TAG_SIPX_SOCKET_INFO
|
|
{
|
|
nuint32 SIIpxVersion;
|
|
nflag32 SIAttributeFlags;
|
|
nuint16 SISocketNumber;
|
|
nuint16 SIReserved;
|
|
nuint32 SIPacketType;
|
|
SIPXSUBNET_HANDLE SISubnetworkHandle;
|
|
|
|
} SIPX_SOCKET_INFO, *PSIPX_SOCKET_INFO;
|
|
|
|
|
|
//
|
|
// Connection Information Structure
|
|
//
|
|
typedef struct TAG_SIPX_CONN_INFO
|
|
{
|
|
nuint32 CISpxVersion;
|
|
nuint32 CIState;
|
|
nuint32 CIDataStreamType;
|
|
nuint32 CIConnectionProfile;
|
|
nuint32 CIInputMode;
|
|
nuint32 CIStreamingTimer;
|
|
nuint32 CIRetryCount;
|
|
nptr CISocketHandle;
|
|
nuint32 CIMaxTsduSize;
|
|
|
|
} SIPX_CONN_INFO, *PSIPX_CONN_INFO;
|
|
|
|
|
|
//
|
|
// NWTCB Information Structure
|
|
//
|
|
typedef struct TAG_SIPX_NWTCB_INFO
|
|
{
|
|
nuint32 NWIState;
|
|
nuint32 NWIEventType;
|
|
nuint32 NWIEventInfo;
|
|
|
|
} SIPX_NWTCB_INFO, *PSIPX_NWTCB_INFO;
|
|
|
|
|
|
//
|
|
// Service Information Structure
|
|
//
|
|
//
|
|
// The SIPX_SERVICE_INFO structure is used with the NWSipxQueryServices API
|
|
// primitive. One or more SIPX_SERVICE_INFO structures are returned in the
|
|
// data space provided by the client application. These structures contain
|
|
// the requested server information.
|
|
//
|
|
|
|
typedef struct TAG_SIPX_SERVICE_INFO
|
|
{
|
|
nuint16 SIServerType;
|
|
nstr8 SIServerName[48];
|
|
nuint8 SINetwork[4];
|
|
nuint8 SINode[6];
|
|
nuint8 SISocket[2];
|
|
nuint16 SIHops;
|
|
|
|
} SIPX_SERVICE_INFO, *PSIPX_SERVICE_INFO;
|
|
|
|
|
|
//===[ Function prototypes ]===============================================
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxAcceptConnection
|
|
(
|
|
PNWTCB pNwtcb,
|
|
SIPXCONN_HANDLE hAcceptHandle
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxAdvertiseService
|
|
(
|
|
nuint16 serviceType,
|
|
pnstr8 pServerName,
|
|
SIPXSOCK_HANDLE hSockHandle
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxAllocControlBlock
|
|
(
|
|
nuint32 syncType,
|
|
nptr pEventInfo,
|
|
PPNWTCB ppNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxCancelAdvertiseService
|
|
(
|
|
nuint16 serviceType,
|
|
pnstr8 pServerName,
|
|
SIPXSOCK_HANDLE hSockHandle
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxCancelPendingRequest
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxChangeControlBlock
|
|
(
|
|
nuint32 syncType,
|
|
nptr pEventInfo,
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxCheckRequestComplete
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxCloseConnectionEndpoint
|
|
(
|
|
SIPXCONN_HANDLE hConnHandle
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxCloseSocket
|
|
(
|
|
SIPXSOCK_HANDLE hSockHandle
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxEstablishConnection
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxFreeControlBlock
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxFreeInformation
|
|
(
|
|
nptr pInfoStruct
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxGetInformation
|
|
(
|
|
nuint32 infoType,
|
|
nptr hHandle,
|
|
pnptr ppInfoStruct,
|
|
pnuint32 pInfoStructLen
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxGetInternetAddress
|
|
(
|
|
SIPXSOCK_HANDLE hSockHandle,
|
|
PNETADDR pNetAddress
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxGetMaxNsduSize
|
|
(
|
|
SIPXSOCK_HANDLE hSockHandle
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxGetMaxTsduSize
|
|
(
|
|
SIPXCONN_HANDLE hConnHandle
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxListenForConnection
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxOpenConnectionEndpoint
|
|
(
|
|
pnuint16 pSocket,
|
|
PSIPXCONN_HANDLE pConnHandle
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxOpenSocket
|
|
(
|
|
pnuint16 pSocket,
|
|
PSIPXSOCK_HANDLE pSockHandle
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxQueryServices
|
|
(
|
|
nuint16 queryType,
|
|
nuint16 serviceType,
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxReceiveDatagram
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxReceiveMessage
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxRegisterForTransportEvent
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxSendDatagram
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxSendMessage
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxSetInformation
|
|
(
|
|
nuint32 infoType,
|
|
nptr hHandle,
|
|
nptr pInfoStruct
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxTerminateConnection
|
|
(
|
|
PNWTCB pNwtcb
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxWaitForSingleEvent
|
|
(
|
|
PNWTCB pNwtcb,
|
|
nuint32 timeOut
|
|
);
|
|
|
|
|
|
N_EXTERN_LIBRARY(nuint32)
|
|
NWSipxWaitForMultipleEvents
|
|
(
|
|
SIPXMUXGRP_HANDLE muxGroupHandle,
|
|
nuint32 timeOut,
|
|
PPNWTCB ppNwtcb
|
|
);
|
|
|
|
|
|
//===[ Global variables ]==================================================
|
|
|
|
#endif // NWSIPX32_H
|
|
|
|
//=========================================================================
|
|
//=========================================================================
|