1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _MADCAPCL_H_
7 #define _MADCAPCL_H_
8 
9 #include <winternl.h>
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 #include <time.h>
16 
17 #define MCAST_CLIENT_ID_LEN 17
18 
19   enum {
20     MCAST_API_VERSION_0 = 0,MCAST_API_VERSION_1
21   };
22 
23 #define MCAST_API_CURRENT_VERSION MCAST_API_VERSION_1
24 
25   typedef unsigned short IP_ADDR_FAMILY;
26 
27   typedef union _IPNG_ADDRESS {
28     DWORD IpAddrV4;
29     BYTE IpAddrV6[16];
30   } IPNG_ADDRESS,*PIPNG_ADDRESS;
31 
32   typedef struct _MCAST_CLIENT_UID {
33     LPBYTE ClientUID;
34     DWORD ClientUIDLength;
35   } MCAST_CLIENT_UID,*LPMCAST_CLIENT_UID;
36 
37   typedef struct _MCAST_SCOPE_CTX {
38     IPNG_ADDRESS ScopeID;
39     IPNG_ADDRESS Interface;
40     IPNG_ADDRESS ServerID;
41   } MCAST_SCOPE_CTX,*PMCAST_SCOPE_CTX;
42 
43   typedef struct _MCAST_SCOPE_ENTRY {
44     MCAST_SCOPE_CTX ScopeCtx;
45     IPNG_ADDRESS LastAddr;
46     DWORD TTL;
47     UNICODE_STRING ScopeDesc;
48   } MCAST_SCOPE_ENTRY,*PMCAST_SCOPE_ENTRY;
49 
50   typedef struct _MCAST_LEASE_REQUEST {
51     LONG LeaseStartTime;
52     LONG MaxLeaseStartTime;
53     DWORD LeaseDuration;
54     DWORD MinLeaseDuration;
55     IPNG_ADDRESS ServerAddress;
56     WORD MinAddrCount;
57     WORD AddrCount;
58     PBYTE pAddrBuf;
59   } MCAST_LEASE_REQUEST,*PMCAST_LEASE_REQUEST;
60 
61   typedef struct _MCAST_LEASE_RESPONSE {
62     LONG LeaseStartTime;
63     LONG LeaseEndTime;
64     IPNG_ADDRESS ServerAddress;
65     WORD AddrCount;
66     PBYTE pAddrBuf;
67   } MCAST_LEASE_RESPONSE,*PMCAST_LEASE_RESPONSE;
68 
69   DWORD WINAPI McastApiStartup(PDWORD Version);
70   VOID WINAPI McastApiCleanup(VOID);
71   DWORD WINAPI McastGenUID(LPMCAST_CLIENT_UID pRequestID);
72   DWORD WINAPI McastEnumerateScopes(IP_ADDR_FAMILY AddrFamily,WINBOOL ReQuery,PMCAST_SCOPE_ENTRY pScopeList,PDWORD pScopeLen,PDWORD pScopeCount);
73   DWORD WINAPI McastRequestAddress(IP_ADDR_FAMILY AddrFamily,LPMCAST_CLIENT_UID pRequestID,PMCAST_SCOPE_CTX pScopeCtx,PMCAST_LEASE_REQUEST pAddrRequest,PMCAST_LEASE_RESPONSE pAddrResponse);
74   DWORD WINAPI McastRenewAddress(IP_ADDR_FAMILY AddrFamily,LPMCAST_CLIENT_UID pRequestID,PMCAST_LEASE_REQUEST pRenewRequest,PMCAST_LEASE_RESPONSE pRenewResponse);
75   DWORD WINAPI McastReleaseAddress(IP_ADDR_FAMILY AddrFamily,LPMCAST_CLIENT_UID pRequestID,PMCAST_LEASE_REQUEST pReleaseRequest);
76 
77 #ifdef __cplusplus
78 }
79 #endif
80 #endif
81