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

  1. #ifndef __include_bdnapi_h
  2. #define    __include_bdnapi_h
  3.  
  4. #include <winsock2.h>
  5. #include <time.h>
  6.  
  7. #ifndef MSBDNAPI
  8. #define MSBDNAPI __declspec( dllimport )
  9. #endif
  10.  
  11. #ifndef EXTERN_C
  12. #ifdef __cplusplus
  13. #define EXTERN_C extern "C"
  14. #else
  15. #define EXTERN_C
  16. #endif
  17. #endif
  18.  
  19. #ifndef    BDN_TIME_UNBOUND
  20. #define    BDN_TIME_UNBOUND    ((time_t)0)
  21. #endif
  22.  
  23. #ifndef    BDN_SLOT_NONE
  24. #define    BDN_SLOT_NONE        0xFFFFFFFFUL
  25. #endif
  26.  
  27. // opaque handles
  28. typedef struct BDN_SERVICE * HBDNSERVICE;
  29. typedef struct BDN_CONN * HBDNCONN;
  30.  
  31. typedef struct BDN_RSVP {
  32.     DWORD        Version;
  33.     DWORD        Size;
  34.     DWORD        ReservationID;
  35.     FLOWSPEC    Flowspec;
  36.     time_t        StartTime;
  37.     time_t        EndTime;
  38. //    SOCKADDR    rsvpAddr;            // This is never actually used
  39. } BDN_RSVP, * LPBDN_RSVP, MSBDNRSVP, *PMSBDNRSVP, *LPMSBDNRSVP;
  40.  
  41. #define    BDN_RSVP_VERSION    0x0100
  42.  
  43. typedef struct tagBDN_HARDWARE_ADDR {
  44.     WORD        Type;
  45.     LPVOID        Address;
  46.     WORD        AddressLength;
  47. } BDN_HARDWARE_ADDR, * LPBDN_HARDWARE_ADDR;
  48.  
  49. #define    BDN_HARDWARE_TYPE_IEEE8023    1
  50. #define    BDN_HARDWARE_TYPE_ATM        2
  51.  
  52.  
  53. typedef struct BDN_VALUE {
  54.     WORD                    Type;
  55.     union {
  56.         SOCKET_ADDRESS        SocketAddress;
  57.         struct {
  58.             union {
  59.                 LPSTR        AnsiString;
  60.                 LPWSTR        UnicodeString;
  61.                 LPTSTR        String;
  62.             };
  63.             DWORD            StringMaxLength;
  64.         };
  65.         DWORD                Dword;
  66.     };
  67. } BDN_VALUE, * LPBDN_VALUE;
  68.  
  69. // BDN_VALUE.Type
  70. #define BDN_VALUE_ANSI_STRING        1
  71. #define    BDN_VALUE_UNICODE_STRING    2
  72. #define    BDN_VALUE_DWORD                3
  73. #define BDN_VALUE_SOCKADDR            4
  74.  
  75. #ifdef _UNICODE
  76. #define    BDN_VALUE_STRING            BDN_VALUE_UNICODE_STRING
  77. #else
  78. #define    BDN_VALUE_STRING            BDN_VALUE_ANSI_STRING
  79. #endif
  80.  
  81. // value identifiers used with BDN service
  82. #define    BDN_SERVICE_BRIDGE        1
  83. #define    BDN_SERVICE_ARS            2
  84. #define    BDN_SERVICE_BRS            3
  85. #define    BDN_SERVICE_GLOBAL_ADDR    4
  86. #define    BDN_SERVICE_LOCAL_ADDR    5
  87. #define    BDN_SERVICE_APPLICATION    6
  88. #define    BDN_SERVICE_CONTENT_SERVICE        7
  89.  
  90.  
  91. EXTERN_C HRESULT WINAPI BdnLookupServiceA (LPCSTR, HBDNSERVICE *);
  92. EXTERN_C HRESULT WINAPI BdnLookupServiceW (LPCWSTR, HBDNSERVICE *);
  93.  
  94. EXTERN_C HRESULT WINAPI BdnServiceCreate (HBDNSERVICE *);
  95.  
  96. EXTERN_C HRESULT WINAPI BdnServiceClose (HBDNSERVICE);
  97.  
  98. EXTERN_C HRESULT WINAPI BdnReserveAddress
  99. (    HBDNSERVICE,
  100.     time_t,
  101.     time_t,
  102.     DWORD,
  103.     DWORD,
  104.     const SOCKET_ADDRESS *
  105. );
  106.  
  107. EXTERN_C HRESULT WINAPI BdnReleaseAddress
  108. (    HBDNSERVICE,
  109.     time_t,
  110.     const SOCKET_ADDRESS *
  111. );
  112.  
  113. EXTERN_C HRESULT WINAPI BdnServiceSetValue
  114. (    HBDNSERVICE,
  115.     DWORD,
  116.     const BDN_VALUE *
  117. );
  118.  
  119. EXTERN_C HRESULT WINAPI BdnServiceGetValue
  120. (    HBDNSERVICE,
  121.     DWORD,
  122.     BDN_VALUE *
  123. );
  124.  
  125. EXTERN_C HRESULT WINAPI BdnServiceSetValueStringA
  126. (    HBDNSERVICE,
  127.     DWORD,
  128.     LPCSTR
  129. );
  130.  
  131. EXTERN_C HRESULT WINAPI BdnServiceSetValueStringW
  132. (    HBDNSERVICE,
  133.     DWORD,
  134.     LPCWSTR
  135. );
  136.  
  137. EXTERN_C HRESULT WINAPI BdnServiceGetValueStringA
  138. (    HBDNSERVICE,
  139.     DWORD,
  140.     LPSTR,
  141.     DWORD
  142. );
  143.  
  144. EXTERN_C HRESULT WINAPI BdnServiceGetValueStringW
  145. (    HBDNSERVICE,
  146.     DWORD,
  147.     LPWSTR,
  148.     DWORD
  149. );
  150.  
  151. EXTERN_C HRESULT WINAPI BdnCreateRegulatedMulticast
  152. (    HBDNSERVICE            service,
  153.     LPBDN_RSVP            reservation,
  154.     HBDNCONN *            conn
  155. );
  156.  
  157. EXTERN_C HRESULT WINAPI BdnCreateRegulatedMulticastRaw
  158. (    SOCKET                sock,
  159.     LPBDN_RSVP            reservation,
  160.     HBDNCONN *            conn
  161. );
  162.  
  163. EXTERN_C HRESULT WINAPI BdnOpenTunnel
  164. (    HBDNSERVICE                service,
  165.     const SOCKET_ADDRESS *    destination_address,
  166.     BYTE                    mttl,
  167.     DWORD                    reservation_id,
  168.     HBDNCONN *                conn
  169. );
  170.  
  171. EXTERN_C HRESULT WINAPI BdnReserveBandwidthA
  172. (    HBDNSERVICE        service,
  173.     time_t            start_time,
  174.     time_t            end_time,
  175.     DWORD            slot,
  176.     const FLOWSPEC *    flowspec,
  177.     LPCSTR            description,
  178.     DWORD *            resv_id
  179. );
  180.  
  181. EXTERN_C HRESULT WINAPI BdnReserveBandwidthW
  182. (    HBDNSERVICE        service,
  183.     time_t            start_time,
  184.     time_t            end_time,
  185.     DWORD            slot,
  186.     const FLOWSPEC *    flowspec,
  187.     LPCWSTR            description,
  188.     DWORD *            resv_id
  189. );
  190.  
  191. EXTERN_C HRESULT WINAPI BdnGetReservationA
  192. (    HBDNSERVICE        service,
  193.     DWORD            resv_id,
  194.     BDN_RSVP *        resv,
  195.     LPSTR            description,
  196.     DWORD            description_len
  197. );
  198.  
  199. EXTERN_C HRESULT WINAPI BdnGetReservationW
  200. (    HBDNSERVICE        service,
  201.     DWORD            resv_id,
  202.     BDN_RSVP *        resv,
  203.     LPWSTR            description,
  204.     DWORD            description_len
  205. );
  206.  
  207. EXTERN_C HRESULT WINAPI BdnLookupReservationA
  208. (    HBDNSERVICE        hBdnService,
  209.     LPCSTR            szDescription,
  210.     time_t            StartTime,
  211.     time_t            EndTime,
  212.     BDN_RSVP *        lpReservation,
  213.     DWORD *            lpReservationCount        // in-out parameter
  214. );
  215.  
  216. EXTERN_C HRESULT WINAPI BdnLookupReservationW
  217. (    HBDNSERVICE        hBdnService,
  218.     LPCWSTR            szDescription,
  219.     time_t            StartTime,
  220.     time_t            EndTime,
  221.     BDN_RSVP *        lpReservation,
  222.     DWORD *            lpReservationCount        // in-out parameter
  223. );
  224.  
  225. EXTERN_C HRESULT WINAPI BdnClearReservation
  226. (    HBDNSERVICE        hBdnService,
  227.     DWORD            dwReservationID
  228. );
  229.  
  230. EXTERN_C INT WINAPI BdnSend
  231. (    HBDNCONN,
  232.     const void *,
  233.     WORD);
  234.  
  235. EXTERN_C INT WINAPI BdnSendTo (
  236.     HBDNCONN        hBdnConn,
  237.     const SOCKET_ADDRESS * lpDestAddress,
  238.     WORD            wDestPort,
  239.     const BDN_HARDWARE_ADDR * lpHardwareAddress,
  240.     const void *    lpBuffer,
  241.     WORD            nBufferLength
  242. );
  243.  
  244. EXTERN_C INT WINAPI BdnSendRaw (
  245.     HBDNCONN        hBdnConn,
  246.     WORD            wProtocol,
  247.     const BDN_HARDWARE_ADDR * lpHardwareAddress,
  248.     const void *    lpBuffer,
  249.     WORD            nBufferLength
  250. );
  251.  
  252.  
  253. #ifdef _UNICODE
  254. #define    BdnGetReservation                BdnGetReservationW
  255. #define    BdnLookupReservation            BdnLookupReservationW
  256. #define    BdnLookupService                BdnLookupServiceW
  257. #define    BdnServiceSetValueString        BdnServiceSetValueStringW
  258. #else
  259. #define    BdnGetReservation                BdnGetReservationA
  260. #define    BdnLookupReservation            BdnLookupReservationA
  261. #define    BdnLookupService                BdnLookupServiceA
  262. #define    BdnServiceSetValueString        BdnServiceSetValueStringA
  263. #endif
  264.  
  265.  
  266. // #define MSBDNEDENIED        -1; // ???
  267. // #define MSBDNEINVALID       -2; // ???
  268.  
  269.  
  270. EXTERN_C MSBDNAPI INT WINAPI msbdnReserveAddress(
  271.     LPCSADDR_INFO lpcsServerAddr,
  272.     time_t StartTime,
  273.     time_t EndTime,
  274.     WORD wFLags,
  275.     LPSOCKET_ADDRESS lpDestAddr
  276. );
  277.  
  278. #define MSBDN_INET_EXISTING    0x0100  // The lpDestAddr is already filled with an existing value that the server should use for the reservation.
  279. #define MSBDN_INET_GLOBAL    0x0001  // Reserve an internet-wide globally unique IP address for the duration is the reservation.  TTL >= 127.
  280. #define MSBDN_INET_NETWORK    0x0002  // Reserve a IP address that is unique to the organizationÆs network. For DSS, this is equivalent to their entire Satellite.
  281. #define MSBDN_INET_SUBNET    0x0003  // Reserve an address that is unique to a local subnet. For DSS, this is equivilent to a single channel or a group of channels, depending on how the network is configured.
  282.     
  283.  
  284. EXTERN_C MSBDNAPI INT WINAPI msbdnRelinquishAddress(
  285.     LPCSADDR_INFO lpcsServerAddr,
  286.     time_t FromTime,
  287.     LPSOCKET_ADDRESS lpDestAddr
  288. );
  289.  
  290.  
  291. EXTERN_C MSBDNAPI INT WINAPI msbdnReserveBandwidth(
  292.     LPCSADDR_INFO lpcsServerAddr,
  293.     time_t StartTime,
  294.     time_t EndTime,
  295.     LPFLOWSPEC lpFlowSpec,
  296.     LPCTSTR lpszDescription,
  297.     DWORD *lpReservationID
  298. );
  299.  
  300.  
  301. EXTERN_C MSBDNAPI INT WINAPI msbdnGetReservation(
  302.     LPCSADDR_INFO lpcsServerAddr,
  303.     DWORD dwReservationID, 
  304.     LPMSBDNRSVP lpReservation,
  305.     LPSTR lpszDescription,
  306.     DWORD dwDescriptionLength
  307. );
  308.  
  309.  
  310. EXTERN_C MSBDNAPI INT WINAPI msbdnLookupReservation(
  311.     LPCSADDR_INFO lpcsServerAddr,
  312.     LPCSTR szDescription,
  313.     time_t StartTime,
  314.     time_t EndTime,
  315.     LPMSBDNRSVP lpReservation,
  316.     DWORD *lpdwReservationCount
  317. );
  318.  
  319.  
  320. EXTERN_C MSBDNAPI INT WINAPI msbdnClearReservation(
  321.     LPCSADDR_INFO lpcsServerAddr,
  322.     DWORD dwReservationID
  323. );
  324.  
  325. EXTERN_C MSBDNAPI INT WINAPI msbdnForwardMulticast(
  326.     LPCSADDR_INFO lpcsBridgeAddr,
  327.     LPSOCKET_ADDRESS lpDestAddr,
  328.     WORD wTTL,
  329.     DWORD dwReservationID
  330. );
  331.  
  332. EXTERN_C MSBDNAPI INT WINAPI msbdnStopMulticast(
  333.     LPCSADDR_INFO lpcsBridgeAddr,
  334.     LPSOCKET_ADDRESS lpDestAddr
  335. );
  336.  
  337. EXTERN_C MSBDNAPI HBDNCONN msbdnCreateRegulatedMulticast (
  338.     SOCKET hSocket,
  339.     LPMSBDNRSVP lpReservation
  340. ); 
  341.  
  342. EXTERN_C MSBDNAPI HBDNCONN msbdnOpenTunnel (
  343.     LPCSADDR_INFO lpcsBridgeAddr,
  344.     LPSOCKET_ADDRESS lpDestAddr,
  345.     WORD wTTL,
  346.     DWORD dwReservationID
  347. ); 
  348.  
  349. EXTERN_C MSBDNAPI INT WINAPI msbdnSend (
  350.     HBDNCONN hBdnConn,
  351.     LPVOID lpBuffer,
  352.     WORD nBytes
  353. );
  354.  
  355. EXTERN_C MSBDNAPI INT WINAPI msbdnSendTo (
  356.     HBDNCONN hBdnCon,
  357.     LPSOCKET_ADDRESS lpDestAddress,
  358.     WORD wDestPort,
  359.     LPVOID lpHardwareAddress,
  360.     LPVOID lpBuffer,
  361.     WORD nBytes
  362. );
  363.  
  364. EXTERN_C MSBDNAPI INT WINAPI msbdnSendRaw (
  365.     HBDNCONN hBdnCon,
  366.     WORD wProtocol,
  367.     LPVOID lpHardwareAddress,
  368.     LPVOID lpBuffer,
  369.     WORD nBytes
  370. );
  371.  
  372.  
  373. EXTERN_C MSBDNAPI INT WINAPI msbdnClose (
  374.     HBDNCONN hBdnCon
  375. );
  376.  
  377.  
  378. EXTERN_C MSBDNAPI INT WINAPI msbdnReserveAddressEx(
  379.     LPCSTR szServer,
  380.     time_t StartTime,
  381.     time_t EndTime,
  382.     WORD wFLags,
  383.     LPCSTR szDestAddr,
  384.     DWORD dwDestAddrLength
  385. );
  386.  
  387. EXTERN_C MSBDNAPI INT WINAPI msbdnRelinquishAddressEx(
  388.     LPCSTR szServer,
  389.     time_t FromTime,
  390.     LPCSTR szDestAddr
  391. );
  392.  
  393. EXTERN_C MSBDNAPI INT WINAPI msbdnReserveBandwidthEx(
  394.     LPCSTR szServer,
  395.     time_t StartTime,
  396.     time_t EndTime,
  397.     LPFLOWSPEC lpFlowSpec,
  398.     LPCTSTR lpszDescription,
  399.     DWORD *lpReservationID
  400. );
  401.  
  402.  
  403. EXTERN_C MSBDNAPI INT WINAPI msbdnGetReservationEx(
  404.     LPCSTR szServer,
  405.     DWORD dwReservationID, 
  406.     LPMSBDNRSVP lpReservation,
  407.     LPSTR lpszDescription,
  408.     DWORD dwDescriptionLength
  409. );
  410.  
  411.  
  412. EXTERN_C MSBDNAPI INT WINAPI msbdnLookupReservationEx(
  413.     LPCSTR szServer,
  414.     LPCSTR szDescription,
  415.     time_t StartTime,
  416.     time_t EndTime,
  417.     LPMSBDNRSVP lpReservation,
  418.     DWORD *lpdwReservationCount
  419. );
  420.  
  421. EXTERN_C MSBDNAPI INT WINAPI msbdnClearReservationEx(
  422.     LPCSTR szServer,
  423.     DWORD dwReservationID
  424. );
  425.  
  426. EXTERN_C MSBDNAPI INT WINAPI msbdnForwardMulticastEx(
  427.     LPCSTR szBridge,
  428.     LPCSTR szDestAddr,
  429.     DWORD dwReservationID
  430. );
  431.  
  432. EXTERN_C MSBDNAPI INT WINAPI msbdnStopMulticastEx(
  433.     LPCSTR szBridge,
  434.     LPCSTR szDestAddr
  435. );
  436.  
  437. EXTERN_C MSBDNAPI HBDNCONN WINAPI msbdnOpenTunnelEx(
  438.     LPCSTR szBridge,
  439.     LPCSTR szDestAddr,
  440.     WORD wDestPort,
  441.     WORD wTTL,
  442.     DWORD dwReservationID
  443. ); 
  444.  
  445.  
  446. #endif // __include_bdnapi_h
  447.