Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
206 lines
7.6 KiB
C++
206 lines
7.6 KiB
C++
// Copyright (C) 1997 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// MODULE: bridge.h
|
|
//
|
|
// PURPOSE: DLL output service functions for MSBDN Bridge
|
|
//
|
|
// FUNCTIONS DEFINED BY BRIDGE.DLL:
|
|
// msbdnPacketLength - length of a packet
|
|
// msbdnPacketMemcpy - copies data from a packet
|
|
// msbdnPacketGetData - returns pointer to raw packet data
|
|
//
|
|
// FUNCTIONS DEFINED BY LOADABLE OUTPUT DLL:
|
|
// msbdnOutputStartup - called once during initialization
|
|
// msbdnOutputSetState - enable/disable output
|
|
// msbdnOutputShutdown - called once during shutdown
|
|
// msbdnOutputSetHWAddr - override for network MAC address
|
|
// msbdnOutputSetBandwidth - set self throttling rate
|
|
// msbdnOutputSetRoutingInfo - set routing information
|
|
// msbdnOutputStreamStatus - called when "streams" start and stop
|
|
// msbdnOutputSendPacket - called to send data
|
|
//
|
|
// COMMENTS:
|
|
//
|
|
|
|
#ifndef BRIDGE_H
|
|
#define BRIDGE_H
|
|
|
|
#include "packet.h"
|
|
|
|
#ifndef EXTERN_C
|
|
#ifdef __cplusplus
|
|
#define EXTERN_C extern "C"
|
|
#else
|
|
#define EXTERN_C
|
|
#endif
|
|
#endif
|
|
|
|
#define MSBDN_BRIDGE_CALLBACKS_VERSION 0x00020000U
|
|
|
|
typedef DWORD MSBDN_SUBSYSTEM_ID;
|
|
|
|
struct MSBDN_OUTPUT_SUBSYSTEM;
|
|
|
|
typedef struct MSBDN_BRIDGE_CALLBACKS {
|
|
DWORD Version;
|
|
HRESULT (*ReportState) (struct MSBDN_OUTPUT_SUBSYSTEM *, DWORD state, LPCSTR message);
|
|
HRESULT (*ReportActivity) (struct MSBDN_OUTPUT_SUBSYSTEM *, WORD type, DWORD amount);
|
|
HRESULT (*ReportEvent) (struct MSBDN_OUTPUT_SUBSYSTEM *, WORD, DWORD, LPCWSTR);
|
|
} MSBDN_BRIDGE_CALLBACKS;
|
|
|
|
// this is analogous to the kernel's DEVICE_OBJECT, kind of.
|
|
typedef struct MSBDN_OUTPUT_SUBSYSTEM {
|
|
DWORD Version;
|
|
MSBDN_BRIDGE_CALLBACKS BridgeCallbacks;
|
|
MSBDN_SUBSYSTEM_ID OutputSubsystemID;
|
|
HKEY RegistryKey;
|
|
LPVOID DriverContext;
|
|
} MSBDN_OUTPUT_SUBSYSTEM;
|
|
|
|
#define MSBDN_OUTPUT_SUBSYSTEM_VERSION_1 1
|
|
#define MSBDN_OUTPUT_SUBSYSTEM_VERSION MSBDN_OUTPUT_SUBSYSTEM_VERSION_1
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
|
|
#ifndef MSBDNOUTPUTAPI
|
|
#define MSBDNOUTPUTAPI __declspec (dllexport)
|
|
#endif
|
|
|
|
#ifndef MSBDNBRIDGEAPI
|
|
#define MSBDNBRIDGEAPI __declspec (dllimport)
|
|
#endif
|
|
|
|
// for backward combustibility, i mean compatability
|
|
typedef PACKET_BUFFER * HPACKET;
|
|
|
|
|
|
// this is the second parameter in msbdnBridgeReportState
|
|
#define MSBDN_OUTPUT_DISABLED 0
|
|
#define MSBDN_OUTPUT_ENABLED 1
|
|
#define MSBDN_OUTPUT_FORCED 2
|
|
#define MSBDN_OUTPUT_WARNING 10
|
|
|
|
// this is the first parameer in msbdnBridgeReportActivity
|
|
#define MSBDN_REPORT_RATE 100
|
|
#define MSBDN_REPORT_OUTPUT 101
|
|
#define MSBDN_REPORT_ERROR 102
|
|
#define MSBDN_REPORT_TIMEOUT 103 // dwOutputTimeouts
|
|
#define MSBDN_REPORT_FULLFIFO 104 // dwOutputFullFifo
|
|
|
|
#define MSBDN_OUTPUT_API_VERSION 0x00020000
|
|
|
|
#define MSBDN_OUTPUT_VALUE_STRING 0
|
|
#define MSBDN_OUTPUT_VALUE_DWORD 1
|
|
#define MSBDN_OUTPUT_VALUE_IPADDRESS 2
|
|
#define MSBDN_OUTPUT_VALUE_BOOLEAN 3
|
|
|
|
typedef struct MSBDN_OUTPUT_VALUE {
|
|
DWORD Index;
|
|
DWORD Type;
|
|
LPWSTR Name;
|
|
union {
|
|
DWORD Dword;
|
|
LPWSTR String;
|
|
IN_ADDR IPAddress;
|
|
BOOL Boolean;
|
|
};
|
|
} MSBDN_OUTPUT_VALUE;
|
|
|
|
typedef HRESULT (*PMSBDNOUTPUTCREATE) (MSBDN_OUTPUT_SUBSYSTEM *, DWORD);
|
|
typedef HRESULT (*PMSBDNOUTPUTDESTROY) (MSBDN_OUTPUT_SUBSYSTEM *);
|
|
typedef HRESULT (*PMSBDNOUTPUTSETHWADDR) (MSBDN_OUTPUT_SUBSYSTEM *, LPBYTE, LPBYTE, LPWORD);
|
|
typedef HRESULT (*PMSBDNOUTPUTSETBANDWIDTH) (MSBDN_OUTPUT_SUBSYSTEM *, DWORD);
|
|
typedef HRESULT (*PMSBDNOUTPUTSETROUTINGINFO) (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID);
|
|
typedef HRESULT (*PMSBDNOUTPUTSTREAMSTATUS) (MSBDN_OUTPUT_SUBSYSTEM *, WORD, LPBYTE, BOOL);
|
|
typedef HRESULT (*PMSBDNOUTPUTSENDPACKET) (MSBDN_OUTPUT_SUBSYSTEM *, PACKET_BUFFER *);
|
|
typedef HRESULT (*PMSBDNOUTPUTSETVALUE) (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
|
|
typedef HRESULT (*PMSBDNOUTPUTGETVALUE) (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
|
|
typedef HRESULT (*PMSBDNOUTPUTGETVALUECOUNT) (MSBDN_OUTPUT_SUBSYSTEM *, DWORD *);
|
|
typedef HRESULT (*PMSBDNOUTPUTFREEBUFFER) (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID);
|
|
typedef HRESULT (*PMSBDNOUTPUTGETSTATUS) (MSBDN_OUTPUT_SUBSYSTEM *, HRESULT *);
|
|
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputCreate (MSBDN_OUTPUT_SUBSYSTEM *, DWORD);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputDestroy (MSBDN_OUTPUT_SUBSYSTEM *);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputSetHWAddr (MSBDN_OUTPUT_SUBSYSTEM *, LPBYTE pData, LPBYTE pHWAddr, LPWORD pwHWAddrLength);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputSetBandwidth (MSBDN_OUTPUT_SUBSYSTEM *, DWORD Bps);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputSetRoutingInfo (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID pRouteInfo);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputStreamStatus (MSBDN_OUTPUT_SUBSYSTEM *, WORD wProtocol, LPBYTE pAddress, BOOL isActive);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputSendPacket (MSBDN_OUTPUT_SUBSYSTEM *, PACKET_BUFFER *);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputSetValue (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputGetValue (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputGetValueCount (MSBDN_OUTPUT_SUBSYSTEM *, DWORD *);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputFreeBuffer (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID);
|
|
MSBDNOUTPUTAPI HRESULT msbdnOutputGetStatus (MSBDN_OUTPUT_SUBSYSTEM *, HRESULT *);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif // __cplusplus
|
|
|
|
#ifdef IS_BRIDGE_OUTPUT_DRIVER
|
|
|
|
// driver DLL is expected to provide the instance
|
|
extern MSBDN_BRIDGE_CALLBACKS g_BridgeCallbacks;
|
|
|
|
static __inline DWORD msbdnPacketLength (PACKET_BUFFER * packet)
|
|
{
|
|
return packet -> End - packet -> Start;
|
|
}
|
|
|
|
static __inline DWORD msbdnPacketMemcpy (LPVOID dest, PACKET_BUFFER * packet, DWORD pos, DWORD length)
|
|
{
|
|
DWORD buffer_length = packet -> End - packet -> Start;
|
|
|
|
if (pos > buffer_length)
|
|
return 0;
|
|
|
|
if (pos + length > buffer_length)
|
|
length = buffer_length - pos;
|
|
|
|
memcpy (dest, packet -> Data + pos, length);
|
|
return length;
|
|
}
|
|
|
|
static __inline PACKET_BUFFER * msbdnPacketGetData (PACKET_BUFFER * packet, LPBYTE * ret_data, LPDWORD ret_length)
|
|
{
|
|
if (ret_length) *ret_length = packet -> End - packet -> Start;
|
|
if (ret_data) *ret_data = packet -> Data;
|
|
return NULL;
|
|
}
|
|
|
|
static __inline HRESULT msbdnBridgeReportState (MSBDN_OUTPUT_SUBSYSTEM * subsystem, DWORD state, LPCSTR message)
|
|
{
|
|
return (*subsystem -> BridgeCallbacks.ReportState) (subsystem, state, message);
|
|
}
|
|
|
|
static __inline HRESULT msbdnBridgeReportActivity (MSBDN_OUTPUT_SUBSYSTEM * subsystem, WORD type, DWORD amount)
|
|
{
|
|
return (*subsystem -> BridgeCallbacks.ReportActivity) (subsystem, type, amount);
|
|
}
|
|
|
|
static __inline HRESULT msbdnBridgeReportEvent (MSBDN_OUTPUT_SUBSYSTEM * subsystem, WORD type, DWORD error_code, LPCWSTR message)
|
|
{
|
|
return (*subsystem -> BridgeCallbacks.ReportEvent)
|
|
(subsystem, type, error_code, message);
|
|
}
|
|
|
|
#endif // IS_BRIDGE_OUTPUT_DRIVER
|
|
|
|
// decorated names for GetProcAddress
|
|
#define MSBDN_PROC_MSBDNOUTPUTCREATE "msbdnOutputCreate"
|
|
#define MSBDN_PROC_MSBDNOUTPUTDESTROY "msbdnOutputDestroy"
|
|
#define MSBDN_PROC_MSBDNOUTPUTGETSTATUS "msbdnOutputGetStatus"
|
|
#define MSBDN_PROC_MSBDNOUTPUTSETHWADDR "msbdnOutputSetHWAddr"
|
|
#define MSBDN_PROC_MSBDNOUTPUTSETBANDWIDTH "msbdnOutputSetBandwidth"
|
|
#define MSBDN_PROC_MSBDNOUTPUTSETROUTINGINFO "msbdnOutputSetRoutingInfo"
|
|
#define MSBDN_PROC_MSBDNOUTPUTSTREAMSTATUS "msbdnOutputStreamStatus"
|
|
#define MSBDN_PROC_MSBDNOUTPUTSENDPACKET "msbdnOutputSendPacket"
|
|
#define MSBDN_PROC_MSBDNOUTPUTSETVALUE "msbdnOutputSetValue"
|
|
#define MSBDN_PROC_MSBDNOUTPUTGETVALUE "msbdnOutputGetValue"
|
|
#define MSBDN_PROC_MSBDNOUTPUTGETVALUECOUNT "msbdnOutputGetValueCount"
|
|
#define MSBDN_PROC_MSBDNOUTPUTFREEBUFFER "msbdnOutputFreeBuffer"
|
|
|
|
#endif // BRIDGE_H
|