home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 May / PCFMay2001.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / bridge.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  7.0 KB  |  214 lines

  1. // This source code is only intended as a supplement to the
  2. // Broadcast Architecture Programmer's Reference.
  3. // See the reference for detailed information regarding
  4. // Broadcast Architecture.
  5. //
  6. // This file contains preliminary documentation and subject to change
  7.  
  8. #ifndef BRIDGE_H
  9. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  10. #define BRIDGE_H
  11.  
  12. #include "packet.h"
  13.  
  14. #ifndef    EXTERN_C
  15. #ifdef    __cplusplus
  16. #define    EXTERN_C    extern "C"
  17. #else
  18. #define    EXTERN_C
  19. #endif
  20. #endif
  21.  
  22. #define    MSBDN_BRIDGE_CALLBACKS_VERSION    0x00020000U
  23.  
  24. struct    PACKET_LIST_ENTRY {
  25.     LIST_ENTRY        ListEntry;
  26.     PACKET_BUFFER *    PacketBuffer;
  27. };
  28.  
  29. struct MSBDN_OUTPUT_SUBSYSTEM;
  30.  
  31. typedef DWORD MSBDN_SUBSYSTEM_ID;
  32. typedef    MSBDN_OUTPUT_SUBSYSTEM MSBDN_OUTPUT_SUBSYSTEM;
  33.  
  34. typedef struct MSBDN_BRIDGE_CALLBACKS {
  35.     DWORD    Version;
  36.     HRESULT    (*ReportState)            (MSBDN_OUTPUT_SUBSYSTEM *, DWORD state, LPCSTR message);
  37.     HRESULT    (*ReportActivity)        (MSBDN_OUTPUT_SUBSYSTEM *, WORD type, DWORD amount);
  38.     HRESULT    (*ReportEvent)            (MSBDN_OUTPUT_SUBSYSTEM *, WORD, DWORD, LPCWSTR);
  39.     HRESULT (*GetNextPacket)        (MSBDN_OUTPUT_SUBSYSTEM *, PACKET_BUFFER **);
  40.     HRESULT    (*PacketListEntryAlloc)    (PACKET_LIST_ENTRY **);
  41.     HRESULT    (*PacketListEntryFree)    (PACKET_LIST_ENTRY *);
  42. } MSBDN_BRIDGE_CALLBACKS;
  43.  
  44. // this is analogous to the kernel's DEVICE_OBJECT, kind of.
  45. struct MSBDN_OUTPUT_SUBSYSTEM {
  46.     DWORD                        Version;
  47.     MSBDN_BRIDGE_CALLBACKS        BridgeCallbacks;
  48.     MSBDN_SUBSYSTEM_ID            OutputSubsystemID;
  49.     HKEY                        RegistryKey;
  50.     LPVOID                        DriverContext;
  51. };
  52.  
  53. #define    MSBDN_OUTPUT_SUBSYSTEM_VERSION_1    1
  54. #define    MSBDN_OUTPUT_SUBSYSTEM_VERSION        MSBDN_OUTPUT_SUBSYSTEM_VERSION_1
  55.  
  56. #ifdef __cplusplus
  57. extern "C" {
  58. #endif // __cplusplus
  59.  
  60. #ifndef MSBDNOUTPUTAPI
  61. #define MSBDNOUTPUTAPI __declspec (dllexport)
  62. #endif
  63.  
  64. #ifndef MSBDNBRIDGEAPI
  65. #define MSBDNBRIDGEAPI __declspec (dllimport)
  66. #endif
  67.  
  68. // for backward combustibility, i mean compatability
  69. typedef PACKET_BUFFER * HPACKET;
  70.  
  71.  
  72. // this is the second parameter in msbdnBridgeReportState
  73. #define MSBDN_OUTPUT_DISABLED   0
  74. #define MSBDN_OUTPUT_ENABLED    1
  75. #define MSBDN_OUTPUT_FORCED     2
  76. #define MSBDN_OUTPUT_WARNING    10
  77.  
  78. // this is the first parameer in msbdnBridgeReportActivity
  79. #define MSBDN_REPORT_RATE       100
  80. #define MSBDN_REPORT_OUTPUT     101
  81. #define MSBDN_REPORT_ERROR      102
  82. #define MSBDN_REPORT_TIMEOUT    103     // dwOutputTimeouts
  83. #define MSBDN_REPORT_FULLFIFO   104     // dwOutputFullFifo
  84.  
  85. #define    MSBDN_OUTPUT_API_VERSION    0x00020000
  86.  
  87. #define    MSBDN_OUTPUT_VALUE_STRING        0
  88. #define    MSBDN_OUTPUT_VALUE_DWORD        1
  89. #define    MSBDN_OUTPUT_VALUE_IPADDRESS    2
  90. #define    MSBDN_OUTPUT_VALUE_BOOLEAN        3
  91.  
  92. typedef struct MSBDN_OUTPUT_VALUE {
  93.     DWORD    Index;
  94.     DWORD    Type;
  95.     LPWSTR    Name;
  96.     union {
  97.         DWORD    Dword;
  98.         LPWSTR    String;
  99.         IN_ADDR    IPAddress;
  100.         BOOL    Boolean;
  101.     };
  102. } MSBDN_OUTPUT_VALUE;
  103.  
  104. typedef    HRESULT    (*PMSBDNOUTPUTCREATE)            (MSBDN_OUTPUT_SUBSYSTEM *, DWORD);
  105. typedef    HRESULT    (*PMSBDNOUTPUTDESTROY)            (MSBDN_OUTPUT_SUBSYSTEM *);
  106. typedef    HRESULT    (*PMSBDNOUTPUTSETHWADDR)        (MSBDN_OUTPUT_SUBSYSTEM *, LPBYTE, LPBYTE, LPWORD);
  107. typedef    HRESULT    (*PMSBDNOUTPUTSETBANDWIDTH)        (MSBDN_OUTPUT_SUBSYSTEM *, DWORD);
  108. typedef    HRESULT    (*PMSBDNOUTPUTSETROUTINGINFO)    (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID);
  109. typedef    HRESULT    (*PMSBDNOUTPUTSTREAMSTATUS)        (MSBDN_OUTPUT_SUBSYSTEM *, WORD, LPBYTE, BOOL);
  110. typedef    HRESULT    (*PMSBDNOUTPUTSENDPACKET)        (MSBDN_OUTPUT_SUBSYSTEM *, PACKET_BUFFER *);
  111. typedef    HRESULT    (*PMSBDNOUTPUTSETVALUE)            (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
  112. typedef    HRESULT    (*PMSBDNOUTPUTGETVALUE)            (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
  113. typedef    HRESULT    (*PMSBDNOUTPUTGETVALUECOUNT)    (MSBDN_OUTPUT_SUBSYSTEM *, DWORD *);
  114. typedef    HRESULT    (*PMSBDNOUTPUTFREEBUFFER)        (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID);
  115. typedef    HRESULT    (*PMSBDNOUTPUTGETSTATUS)        (MSBDN_OUTPUT_SUBSYSTEM *, HRESULT *);
  116.  
  117. #ifdef __cplusplus
  118. }
  119. #endif // __cplusplus
  120.  
  121.  
  122. // decorated names for GetProcAddress
  123. #define    MSBDN_PROC_MSBDNOUTPUTCREATE            "msbdnOutputCreate"
  124. #define    MSBDN_PROC_MSBDNOUTPUTDESTROY            "msbdnOutputDestroy"
  125. #define    MSBDN_PROC_MSBDNOUTPUTGETSTATUS            "msbdnOutputGetStatus"
  126. #define    MSBDN_PROC_MSBDNOUTPUTSENDPACKET        "msbdnOutputSendPacket"
  127. #define    MSBDN_PROC_MSBDNOUTPUTSETVALUE            "msbdnOutputSetValue"
  128. #define    MSBDN_PROC_MSBDNOUTPUTGETVALUE            "msbdnOutputGetValue"
  129. #define    MSBDN_PROC_MSBDNOUTPUTGETVALUECOUNT        "msbdnOutputGetValueCount"
  130. #define    MSBDN_PROC_MSBDNOUTPUTFREEBUFFER        "msbdnOutputFreeBuffer"
  131.  
  132.  
  133. #ifdef    IS_BRIDGE_OUTPUT_DRIVER
  134. // code for VIF driver DLLs
  135.  
  136. #ifdef    __cplusplus
  137. extern "C" {
  138. #endif
  139.  
  140. #ifndef    MRVIFAPI
  141. #define    MRVIFAPI    __declspec (dllexport)
  142. #endif
  143.  
  144. MRVIFAPI HRESULT msbdnOutputCreate            (MSBDN_OUTPUT_SUBSYSTEM *, DWORD);
  145. MRVIFAPI HRESULT msbdnOutputDestroy            (MSBDN_OUTPUT_SUBSYSTEM *);
  146. MRVIFAPI HRESULT msbdnOutputSendPacket        (MSBDN_OUTPUT_SUBSYSTEM *, PACKET_BUFFER *);
  147. MRVIFAPI HRESULT msbdnOutputSetValue        (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
  148. MRVIFAPI HRESULT msbdnOutputGetValue        (MSBDN_OUTPUT_SUBSYSTEM *, MSBDN_OUTPUT_VALUE *);
  149. MRVIFAPI HRESULT msbdnOutputGetValueCount    (MSBDN_OUTPUT_SUBSYSTEM *, DWORD *);
  150. MRVIFAPI HRESULT msbdnOutputFreeBuffer        (MSBDN_OUTPUT_SUBSYSTEM *, LPVOID);
  151. MRVIFAPI HRESULT msbdnOutputGetStatus        (MSBDN_OUTPUT_SUBSYSTEM *, HRESULT *);
  152.  
  153. #ifdef __cplusplus
  154. }
  155. #endif // __cplusplus
  156.  
  157. #if 0
  158. // driver DLL is expected to provide the instance
  159. extern    MSBDN_BRIDGE_CALLBACKS    g_BridgeCallbacks;
  160. #endif
  161.  
  162. static __inline DWORD msbdnPacketLength (PACKET_BUFFER * packet)
  163. {
  164.     return packet -> End - packet -> Start;
  165. }
  166.  
  167. static __inline DWORD msbdnPacketMemcpy (LPVOID dest, PACKET_BUFFER * packet, DWORD pos, DWORD length)
  168. {
  169.     DWORD    buffer_length = packet -> End - packet -> Start;
  170.  
  171.     if (pos > buffer_length)
  172.         return 0;
  173.  
  174.     if (pos + length > buffer_length)
  175.         length = buffer_length - pos;
  176.  
  177.     memcpy (dest, packet -> Data + pos, length);
  178.     return length;
  179. }
  180.  
  181. static __inline PACKET_BUFFER * msbdnPacketGetData (PACKET_BUFFER * packet, LPBYTE * ret_data, LPDWORD ret_length)
  182. {
  183.     if (ret_length) *ret_length = packet -> End - packet -> Start;
  184.     if (ret_data) *ret_data = packet -> Data;
  185.     return NULL;
  186. }
  187.  
  188. static __inline HRESULT msbdnBridgeReportState (MSBDN_OUTPUT_SUBSYSTEM * subsystem, DWORD state, LPCSTR message)
  189. {
  190.     return (*subsystem -> BridgeCallbacks.ReportState) (subsystem, state, message);
  191. }
  192.  
  193. static __inline HRESULT msbdnBridgeReportActivity (MSBDN_OUTPUT_SUBSYSTEM * subsystem, WORD type, DWORD amount)
  194. {
  195.     return (*subsystem -> BridgeCallbacks.ReportActivity) (subsystem, type, amount);
  196. }
  197.  
  198. static __inline HRESULT msbdnBridgeReportEvent (MSBDN_OUTPUT_SUBSYSTEM * subsystem, WORD type, DWORD error_code, LPCWSTR message)
  199. {
  200.     return (*subsystem -> BridgeCallbacks.ReportEvent)
  201.         (subsystem, type, error_code, message);
  202. }
  203.  
  204. static __inline HRESULT msbdnBridgeGetNextPacket (MSBDN_OUTPUT_SUBSYSTEM * subsystem, PACKET_BUFFER ** packet)
  205. {
  206.     return (*subsystem -> BridgeCallbacks.GetNextPacket)
  207.         (subsystem, packet);
  208. }
  209.  
  210. #endif // IS_BRIDGE_OUTPUT_DRIVER
  211.  
  212. #pragma option pop /*P_O_Pop*/
  213. #endif // BRIDGE_H
  214.