home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / bridge.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  8KB  |  206 lines

  1. // Copyright (C) 1997  Microsoft Corporation.  All Rights Reserved.
  2. //
  3. //  MODULE:   bridge.h
  4. //
  5. //  PURPOSE:  DLL output service functions for MSBDN Bridge
  6. //
  7. //  FUNCTIONS DEFINED BY BRIDGE.DLL:
  8. // msbdnPacketLength        - length of a packet
  9. // msbdnPacketMemcpy        - copies data from a packet
  10. // msbdnPacketGetData       - returns pointer to raw packet data
  11. //
  12. //  FUNCTIONS DEFINED BY LOADABLE OUTPUT DLL:
  13. // msbdnOutputStartup       - called once during initialization
  14. // msbdnOutputSetState      - enable/disable output
  15. // msbdnOutputShutdown      - called once during shutdown
  16. // msbdnOutputSetHWAddr     - override for network MAC address
  17. // msbdnOutputSetBandwidth  - set self throttling rate
  18. // msbdnOutputSetRoutingInfo - set routing information
  19. // msbdnOutputStreamStatus  - called when "streams" start and stop
  20. // msbdnOutputSendPacket    - called to send data
  21. // 
  22. //  COMMENTS:
  23. // 
  24.  
  25. #ifndef BRIDGE_H
  26. #define BRIDGE_H
  27.  
  28. #include "packet.h"
  29.  
  30. #ifndef    EXTERN_C
  31. #ifdef    __cplusplus
  32. #define    EXTERN_C    extern "C"
  33. #else
  34. #define    EXTERN_C
  35. #endif
  36. #endif
  37.  
  38. #define    MSBDN_BRIDGE_CALLBACKS_VERSION    0x00020000U
  39.  
  40. typedef DWORD MSBDN_SUBSYSTEM_ID;
  41.  
  42. struct MSBDN_OUTPUT_SUBSYSTEM;
  43.  
  44. typedef struct MSBDN_BRIDGE_CALLBACKS {
  45.     DWORD    Version;
  46.     HRESULT    (*ReportState)        (struct MSBDN_OUTPUT_SUBSYSTEM *, DWORD state, LPCSTR message);
  47.     HRESULT    (*ReportActivity)    (struct MSBDN_OUTPUT_SUBSYSTEM *, WORD type, DWORD amount);
  48.     HRESULT    (*ReportEvent)        (struct MSBDN_OUTPUT_SUBSYSTEM *, WORD, DWORD, LPCWSTR);
  49. } MSBDN_BRIDGE_CALLBACKS;
  50.  
  51. // this is analogous to the kernel's DEVICE_OBJECT, kind of.
  52. typedef struct MSBDN_OUTPUT_SUBSYSTEM {
  53.     DWORD                        Version;
  54.     MSBDN_BRIDGE_CALLBACKS        BridgeCallbacks;
  55.     MSBDN_SUBSYSTEM_ID            OutputSubsystemID;
  56.     HKEY                        RegistryKey;
  57.     LPVOID                        DriverContext;
  58. } MSBDN_OUTPUT_SUBSYSTEM;
  59.  
  60. #define    MSBDN_OUTPUT_SUBSYSTEM_VERSION_1    1
  61. #define    MSBDN_OUTPUT_SUBSYSTEM_VERSION        MSBDN_OUTPUT_SUBSYSTEM_VERSION_1
  62.  
  63. #ifdef __cplusplus
  64. extern "C" {
  65. #endif // __cplusplus
  66.  
  67.  
  68. #ifndef MSBDNOUTPUTAPI
  69. #define MSBDNOUTPUTAPI __declspec (dllexport)
  70. #endif
  71.  
  72. #ifndef MSBDNBRIDGEAPI
  73. #define MSBDNBRIDGEAPI __declspec (dllimport)
  74. #endif
  75.  
  76. // for backward combustibility, i mean compatability
  77. typedef PACKET_BUFFER * HPACKET;
  78.  
  79.  
  80. // this is the second parameter in msbdnBridgeReportState
  81. #define MSBDN_OUTPUT_DISABLED   0
  82. #define MSBDN_OUTPUT_ENABLED    1
  83. #define MSBDN_OUTPUT_FORCED     2
  84. #define MSBDN_OUTPUT_WARNING    10
  85.  
  86. // this is the first parameer in msbdnBridgeReportActivity
  87. #define MSBDN_REPORT_RATE       100
  88. #define MSBDN_REPORT_OUTPUT     101
  89. #define MSBDN_REPORT_ERROR      102
  90. #define MSBDN_REPORT_TIMEOUT    103     // dwOutputTimeouts
  91. #define MSBDN_REPORT_FULLFIFO   104     // dwOutputFullFifo
  92.  
  93. #define    MSBDN_OUTPUT_API_VERSION    0x00020000
  94.  
  95. #define    MSBDN_OUTPUT_VALUE_STRING        0
  96. #define    MSBDN_OUTPUT_VALUE_DWORD        1
  97. #define    MSBDN_OUTPUT_VALUE_IPADDRESS    2
  98. #define    MSBDN_OUTPUT_VALUE_BOOLEAN        3
  99.  
  100. typedef struct MSBDN_OUTPUT_VALUE {
  101.     DWORD    Index;
  102.     DWORD    Type;
  103.     LPWSTR    Name;
  104.     union {
  105.         DWORD    Dword;
  106.         LPWSTR    String;
  107.         IN_ADDR    IPAddress;
  108.         BOOL    Boolean;
  109.     };
  110. } MSBDN_OUTPUT_VALUE;
  111.  
  112. typedef    HRESULT    (*PMSBDNOUTPUTCREATE)            (MSBDN_OUTPUT_SUBSYSTEM *, DWORD);
  113. typedef    HRESULT    (*PMSBDNOUTPUTDESTROY)            (MSBDN_OUTPUT_SUBSYSTEM *);
  114. typedef    HRESULT    (*PMSBDNOUTPUTSETHWADDR)        (MSBDN_OUTPUT_SUBSYSTEM *, LPBYTE, LPBYTE, LPWORD);
  115. typedef    HRESULT    (*PMSBDNOUTPUTSETBANDWIDTH)        (MSBDN_OUTPUT_SUBSYSTEM *, DWORD);
  116. typedef    HRESULT    (*PMSBDNOUTPUTSETROUTINGINFO)    (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID);
  117. typedef    HRESULT    (*PMSBDNOUTPUTSTREAMSTATUS)        (MSBDN_OUTPUT_SUBSYSTEM *, WORD, LPBYTE, BOOL);
  118. typedef    HRESULT    (*PMSBDNOUTPUTSENDPACKET)        (MSBDN_OUTPUT_SUBSYSTEM *, PACKET_BUFFER *);
  119. typedef    HRESULT    (*PMSBDNOUTPUTSETVALUE)            (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
  120. typedef    HRESULT    (*PMSBDNOUTPUTGETVALUE)            (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
  121. typedef    HRESULT    (*PMSBDNOUTPUTGETVALUECOUNT)    (MSBDN_OUTPUT_SUBSYSTEM *, DWORD *);
  122. typedef    HRESULT    (*PMSBDNOUTPUTFREEBUFFER)        (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID);
  123. typedef    HRESULT    (*PMSBDNOUTPUTGETSTATUS)        (MSBDN_OUTPUT_SUBSYSTEM *, HRESULT *);
  124.  
  125. MSBDNOUTPUTAPI HRESULT msbdnOutputCreate            (MSBDN_OUTPUT_SUBSYSTEM *, DWORD);
  126. MSBDNOUTPUTAPI HRESULT msbdnOutputDestroy            (MSBDN_OUTPUT_SUBSYSTEM *);
  127. MSBDNOUTPUTAPI HRESULT msbdnOutputSetHWAddr            (MSBDN_OUTPUT_SUBSYSTEM *, LPBYTE pData, LPBYTE pHWAddr, LPWORD pwHWAddrLength);
  128. MSBDNOUTPUTAPI HRESULT msbdnOutputSetBandwidth        (MSBDN_OUTPUT_SUBSYSTEM *, DWORD Bps);
  129. MSBDNOUTPUTAPI HRESULT msbdnOutputSetRoutingInfo    (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID pRouteInfo);
  130. MSBDNOUTPUTAPI HRESULT msbdnOutputStreamStatus        (MSBDN_OUTPUT_SUBSYSTEM *, WORD wProtocol, LPBYTE pAddress, BOOL isActive);
  131. MSBDNOUTPUTAPI HRESULT msbdnOutputSendPacket        (MSBDN_OUTPUT_SUBSYSTEM *, PACKET_BUFFER *);
  132. MSBDNOUTPUTAPI HRESULT msbdnOutputSetValue            (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
  133. MSBDNOUTPUTAPI HRESULT msbdnOutputGetValue            (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
  134. MSBDNOUTPUTAPI HRESULT msbdnOutputGetValueCount        (MSBDN_OUTPUT_SUBSYSTEM *, DWORD *);
  135. MSBDNOUTPUTAPI HRESULT msbdnOutputFreeBuffer        (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID);
  136. MSBDNOUTPUTAPI HRESULT msbdnOutputGetStatus            (MSBDN_OUTPUT_SUBSYSTEM *, HRESULT *);
  137.  
  138. #ifdef __cplusplus
  139. }
  140. #endif // __cplusplus
  141.  
  142. #ifdef    IS_BRIDGE_OUTPUT_DRIVER
  143.  
  144. // driver DLL is expected to provide the instance
  145. extern    MSBDN_BRIDGE_CALLBACKS    g_BridgeCallbacks;
  146.  
  147. static __inline DWORD msbdnPacketLength (PACKET_BUFFER * packet)
  148. {
  149.     return packet -> End - packet -> Start;
  150. }
  151.  
  152. static __inline DWORD msbdnPacketMemcpy (LPVOID dest, PACKET_BUFFER * packet, DWORD pos, DWORD length)
  153. {
  154.     DWORD    buffer_length = packet -> End - packet -> Start;
  155.  
  156.     if (pos > buffer_length)
  157.         return 0;
  158.  
  159.     if (pos + length > buffer_length)
  160.         length = buffer_length - pos;
  161.  
  162.     memcpy (dest, packet -> Data + pos, length);
  163.     return length;
  164. }
  165.  
  166. static __inline PACKET_BUFFER * msbdnPacketGetData (PACKET_BUFFER * packet, LPBYTE * ret_data, LPDWORD ret_length)
  167. {
  168.     if (ret_length) *ret_length = packet -> End - packet -> Start;
  169.     if (ret_data) *ret_data = packet -> Data;
  170.     return NULL;
  171. }
  172.  
  173. static __inline HRESULT msbdnBridgeReportState (MSBDN_OUTPUT_SUBSYSTEM * subsystem, DWORD state, LPCSTR message)
  174. {
  175.     return (*subsystem -> BridgeCallbacks.ReportState) (subsystem, state, message);
  176. }
  177.  
  178. static __inline HRESULT msbdnBridgeReportActivity (MSBDN_OUTPUT_SUBSYSTEM * subsystem, WORD type, DWORD amount)
  179. {
  180.     return (*subsystem -> BridgeCallbacks.ReportActivity) (subsystem, type, amount);
  181. }
  182.  
  183. static __inline HRESULT msbdnBridgeReportEvent (MSBDN_OUTPUT_SUBSYSTEM * subsystem, WORD type, DWORD error_code, LPCWSTR message)
  184. {
  185.     return (*subsystem -> BridgeCallbacks.ReportEvent)
  186.         (subsystem, type, error_code, message);
  187. }
  188.  
  189. #endif // IS_BRIDGE_OUTPUT_DRIVER
  190.  
  191. // decorated names for GetProcAddress
  192. #define    MSBDN_PROC_MSBDNOUTPUTCREATE            "msbdnOutputCreate"
  193. #define    MSBDN_PROC_MSBDNOUTPUTDESTROY            "msbdnOutputDestroy"
  194. #define    MSBDN_PROC_MSBDNOUTPUTGETSTATUS            "msbdnOutputGetStatus"
  195. #define    MSBDN_PROC_MSBDNOUTPUTSETHWADDR            "msbdnOutputSetHWAddr"
  196. #define    MSBDN_PROC_MSBDNOUTPUTSETBANDWIDTH        "msbdnOutputSetBandwidth"
  197. #define    MSBDN_PROC_MSBDNOUTPUTSETROUTINGINFO    "msbdnOutputSetRoutingInfo"
  198. #define    MSBDN_PROC_MSBDNOUTPUTSTREAMSTATUS        "msbdnOutputStreamStatus"
  199. #define    MSBDN_PROC_MSBDNOUTPUTSENDPACKET        "msbdnOutputSendPacket"
  200. #define    MSBDN_PROC_MSBDNOUTPUTSETVALUE            "msbdnOutputSetValue"
  201. #define    MSBDN_PROC_MSBDNOUTPUTGETVALUE            "msbdnOutputGetValue"
  202. #define    MSBDN_PROC_MSBDNOUTPUTGETVALUECOUNT        "msbdnOutputGetValueCount"
  203. #define    MSBDN_PROC_MSBDNOUTPUTFREEBUFFER        "msbdnOutputFreeBuffer"
  204.  
  205. #endif // BRIDGE_H
  206.