Leaked source code of windows server 2003
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.
 
 
 
 
 
 

233 lines
8.4 KiB

/*==========================================================================
*
* Copyright (C) 2001-2002 Microsoft Corporation. All Rights Reserved.
*
* File: dpnwsockextern.h
* Content: DirectPlay Wsock Library external functions to be called
* by other DirectPlay components.
*
* History:
* Date By Reason
* ==== == ======
* 07/20/2001 masonb Created
*
***************************************************************************/
// Pack this to keep it small since it will be sent over the wire
#pragma pack(push, 1)
#define SPSESSIONDATAINFO_XNET 0x00000001 // XNet security session information
typedef struct _SPSESSIONDATA_XNET
{
DWORD dwInfo; // version control for future-proofing the session data, should be SPSESSIONDATAINFO_XNET
GUID guidKey; // session key
ULONGLONG ullKeyID; // session key ID
} SPSESSIONDATA_XNET;
#ifdef XBOX_ON_DESKTOP
//
// Emulated Xbox networking library structures
//
typedef struct {
BYTE cfgSizeOfStruct;
// Must be set to sizeof(XNetStartupParams). There is no default.
BYTE cfgFlags;
// One or more of the following flags OR'd together:
#define XNET_STARTUP_BYPASS_SECURITY 0x01
// This devkit-only flag tells the XNet stack to allow insecure
// communication to untrusted hosts (such as a PC). This flag
// is silently ignored by the secure versions of the library.
#define XNET_STARTUP_BYPASS_DHCP 0x02
// This devkit-only flag tells the XNet stack to skip searching for
// for a DHCP server and use auto-ip only to acquire an IP address.
// This will save several seconds when starting up if you know
// that there is no DHCP server configured. This flag is silently
// ignored by the secure versions of the library.
// The default is 0 (no flags specified).
BYTE cfgPrivatePoolSizeInPages;
// Specifies the size of the pre-allocated private memory pool used by
// XNet for the following situations:
//
// - Responding to ARP/DHCP/ICMP messages
// - Responding to certain TCP control messages
// - Allocating incoming TCP connection request sockets
// - Buffering outgoing data until it is transmitted (UDP) or
// until it is acknowledged (TCP)
// - Buffering incoming data on a socket that does not have a
// sufficiently large overlapped read pending
//
// The reason for using a private pool instead of the normal system
// pool is because we want to have completely deterministic memory
// behavior. That is, all memory allocation occurs only when an API
// is called. No system memory allocation happens asynchronously in
// response to an incoming packet.
//
// Note that this parameter is in units of pages (4096 bytes per page).
//
// The default is 12 pages (48K).
BYTE cfgEnetReceiveQueueLength;
// The length of the Ethernet receive queue in number of packets. Each
// packet takes 2KB of physically contiguous memory.
//
// The default is 8 packets (16K).
BYTE cfgIpFragMaxSimultaneous;
// The maximum number of IP datagrams that can be in the process of reassembly
// at the same time.
//
// The default is 4 packets.
BYTE cfgIpFragMaxPacketDiv256;
// The maximum size of an IP datagram (including header) that can be reassembled.
// Be careful when setting this parameter to a large value as it opens up
// a potential denial-of-service attack by consuming large amounts of memory
// in the fixed-size private pool.
//
// Note that this parameter is in units of 256-bytes each.
//
// The default is 8 units (2048 bytes).
BYTE cfgSockMaxSockets;
// The maximum number of sockets that can be opened at once, including those
// sockets created as a result of incoming connection requests. Remember
// that a TCP socket may not be closed immediately after closesocket is
// called depending on the linger options in place (by default a TCP socket
// will linger).
//
// The default is 64 sockets.
BYTE cfgSockDefaultRecvBufsizeInK;
// The default receive buffer size for a socket, in units of K (1024 bytes).
//
// The default is 16 units (16K).
BYTE cfgSockDefaultSendBufsizeInK;
// The default send buffer size for a socket, in units of K (1024 bytes).
//
// The default is 16 units (16K).
BYTE cfgKeyRegMax;
// The maximum number of XNKID / XNKEY pairs that can be registered at the
// same time by calling XNetRegisterKey.
//
// The default is 4 key pair registrations.
BYTE cfgSecRegMax;
// The maximum number of security associations that can be registered at the
// same time. Security associations are created for each unique XNADDR / XNKID
// pair passed to XNetXnAddrToInAddr. Security associations are also implicitly
// created for each secure host that establishes an incoming connection
// with this host on a given registered XNKID. Note that there will only be
// one security association between a pair of hosts on a given XNKID no matter
// how many sockets are actively communicating on that secure connection.
//
// The default is 32 security associations.
BYTE cfgQosDataLimitDiv4;
// The maximum amount of Qos data, in units of DWORD (4 bytes), that can be supplied
// to a call to XNetQosListen or returned in the result set of a call to XNetQosLookup.
//
// The default is 64 (256 bytes).
} XNetStartupParams;
typedef struct _XNADDR
{
IN_ADDR ina; // IP address (zero if not static/DHCP)
IN_ADDR inaOnline; // Online IP address (zero if not online)
WORD wPortOnline; // Online port
BYTE abEnet[6]; // Ethernet MAC address
BYTE abOnline[20]; // Online identification
} XNADDR;
typedef struct _XNKID
{
BYTE ab[8]; // xbox to xbox key identifier
} XNKID;
#define XNET_XNKID_MASK 0xF0 // Mask of flag bits in first byte of XNKID
#define XNET_XNKID_SYSTEM_LINK 0x00 // Peer to peer system link session
#define XNET_XNKID_ONLINE_PEER 0x80 // Peer to peer online session
#define XNET_XNKID_ONLINE_SERVER 0xC0 // Client to server online session
#define XNetXnKidIsSystemLink(pxnkid) (((pxnkid)->ab[0] & 0xC0) == XNET_XNKID_SYSTEM_LINK)
#define XNetXnKidIsOnlinePeer(pxnkid) (((pxnkid)->ab[0] & 0xC0) == XNET_XNKID_ONLINE_PEER)
#define XNetXnKidIsOnlineServer(pxnkid) (((pxnkid)->ab[0] & 0xC0) == XNET_XNKID_ONLINE_SERVER)
typedef struct _XNKEY
{
BYTE ab[16]; // xbox to xbox key exchange key
} XNKEY;
typedef struct
{
INT iStatus; // WSAEINPROGRESS if pending; 0 if success; error if failed
UINT cina; // Count of IP addresses for the given host
IN_ADDR aina[8]; // Vector of IP addresses for the given host
} XNDNS;
#endif // XBOX_ON_DESKTOP
#pragma pack(pop)
BOOL DNWsockInit(HANDLE hModule);
void DNWsockDeInit();
#ifndef DPNBUILD_NOCOMREGISTER
BOOL DNWsockRegister(LPCWSTR wszDLLName);
BOOL DNWsockUnRegister();
#endif // ! DPNBUILD_NOCOMREGISTER
#ifndef DPNBUILD_NOIPX
HRESULT CreateIPXInterface(
#ifdef DPNBUILD_PREALLOCATEDMEMORYMODEL
const XDP8CREATE_PARAMS * const pDP8CreateParams,
#endif // DPNBUILD_PREALLOCATEDMEMORYMODEL
IDP8ServiceProvider **const ppiDP8SP
);
#endif // ! DPNBUILD_NOIPX
HRESULT CreateIPInterface(
#ifdef DPNBUILD_PREALLOCATEDMEMORYMODEL
const XDP8CREATE_PARAMS * const pDP8CreateParams,
#endif // DPNBUILD_PREALLOCATEDMEMORYMODEL
IDP8ServiceProvider **const ppiDP8SP
);
#ifndef DPNBUILD_LIBINTERFACE
DWORD DNWsockGetRemainingObjectCount();
extern IClassFactoryVtbl TCPIPClassFactoryVtbl;
#ifndef DPNBUILD_NOIPX
extern IClassFactoryVtbl IPXClassFactoryVtbl;
#endif // ! DPNBUILD_NOIPX
#endif // ! DPNBUILD_LIBINTERFACE