263 lines
6.4 KiB
C
263 lines
6.4 KiB
C
|
// Copyright (c) 1990-1999 Microsoft Corporation
|
||
|
#ifndef _MADCAPCL_H_
|
||
|
#define _MADCAPCL_H_
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include <time.h>
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#define MCAST_CLIENT_ID_LEN 17
|
||
|
|
||
|
enum {
|
||
|
MCAST_API_VERSION_0 = 0,
|
||
|
MCAST_API_VERSION_1
|
||
|
};
|
||
|
|
||
|
#define MCAST_API_CURRENT_VERSION MCAST_API_VERSION_1
|
||
|
|
||
|
typedef unsigned short IP_ADDR_FAMILY;
|
||
|
|
||
|
typedef union _IPNG_ADDRESS {
|
||
|
DWORD IpAddrV4;
|
||
|
BYTE IpAddrV6[16];
|
||
|
} IPNG_ADDRESS, *PIPNG_ADDRESS;
|
||
|
|
||
|
|
||
|
/*++
|
||
|
Description:
|
||
|
|
||
|
This union is used to pass both IPv4 and IPv6 style address.
|
||
|
|
||
|
Members:
|
||
|
|
||
|
IpAddrV4 - IPv4 style address
|
||
|
|
||
|
IpAddrV6 - IPv6 style address
|
||
|
|
||
|
--*/
|
||
|
|
||
|
typedef struct _MCAST_CLIENT_UID {
|
||
|
LPBYTE ClientUID;
|
||
|
DWORD ClientUIDLength;
|
||
|
} MCAST_CLIENT_UID, *LPMCAST_CLIENT_UID;
|
||
|
|
||
|
/*++
|
||
|
Description:
|
||
|
|
||
|
This describes the unique clientID for each request.
|
||
|
|
||
|
Members:
|
||
|
|
||
|
ClientUID - Buffer containing the clientID
|
||
|
|
||
|
ClientUIDLength - The size of the above buffer in bytes.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
typedef struct _MCAST_SCOPE_CTX {
|
||
|
IPNG_ADDRESS ScopeID;
|
||
|
IPNG_ADDRESS Interface;
|
||
|
IPNG_ADDRESS ServerID;
|
||
|
} MCAST_SCOPE_CTX, *PMCAST_SCOPE_CTX;
|
||
|
|
||
|
/*++
|
||
|
Description:
|
||
|
|
||
|
This defines the handle of the scope from which the address
|
||
|
is to be allocated/renewed/released.
|
||
|
|
||
|
Members:
|
||
|
|
||
|
ScopeID - Scope ID is essentially first ip of the scope
|
||
|
|
||
|
Interface - Interface on which this scope was found
|
||
|
|
||
|
ServerID - IPAddress of the MADCAP server
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
typedef struct _MCAST_SCOPE_ENTRY {
|
||
|
MCAST_SCOPE_CTX ScopeCtx;
|
||
|
IPNG_ADDRESS LastAddr;
|
||
|
DWORD TTL;
|
||
|
UNICODE_STRING ScopeDesc;
|
||
|
} MCAST_SCOPE_ENTRY, *PMCAST_SCOPE_ENTRY;
|
||
|
|
||
|
/*++
|
||
|
Description:
|
||
|
|
||
|
This structure contains all the info pertaining to a given multicast
|
||
|
scope.
|
||
|
|
||
|
Members:
|
||
|
|
||
|
ScopeCtx - the handle for this scope
|
||
|
|
||
|
LastAddr - last addr of the scope
|
||
|
|
||
|
TTL - TTL value of this scope.
|
||
|
|
||
|
ScopeDesc - user friendly description of scope
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct _MCAST_LEASE_REQUEST {
|
||
|
LONG LeaseStartTime;
|
||
|
LONG MaxLeaseStartTime;
|
||
|
DWORD LeaseDuration;
|
||
|
DWORD MinLeaseDuration;
|
||
|
IPNG_ADDRESS ServerAddress;
|
||
|
WORD MinAddrCount;
|
||
|
WORD AddrCount;
|
||
|
PBYTE pAddrBuf;
|
||
|
} MCAST_LEASE_REQUEST, *PMCAST_LEASE_REQUEST;
|
||
|
|
||
|
/*++
|
||
|
Description:
|
||
|
|
||
|
This structure is used to describe the request parameters for
|
||
|
requesting/renewing/releasing multicast addresses
|
||
|
|
||
|
Members:
|
||
|
|
||
|
LeaseStartTime - desired start time of the lease, pass 0 if desired start time
|
||
|
is current time. The desired time is specified in the number of seconds elapsed
|
||
|
since midnight (00:00:00), January 1, 1970, coordinated universal time.
|
||
|
|
||
|
MaxLeaseStartTime - the maximum start time that the client is willing to accept.
|
||
|
Where time is the number of seconds elapsed since midnight (00:00:00),
|
||
|
January 1, 1970, coordinated universal time.
|
||
|
|
||
|
LeaseDuration - desired lease time for the request, pass 0 if default
|
||
|
lease time is requested.
|
||
|
|
||
|
MinLeaseDuration - the minimum lease time that the client is willing
|
||
|
to accept
|
||
|
|
||
|
ServerAddress - server's ip address where this lease whas renewed/requested.
|
||
|
pass 0 if unknown (e.g in McastRequestAddress)
|
||
|
|
||
|
MinAddrCount - minimum number of addresses that the client is willing
|
||
|
to accept
|
||
|
|
||
|
AddrCount - the desired number of addresses requested/allocated/renewed.
|
||
|
This also specifies the size of the array specified by Addr.
|
||
|
|
||
|
pAddrBuf - buffer containing specific addresses being requested/renewed/released.
|
||
|
For IPv4 it is a pointer to 4 byte addresses and for IPv6 it
|
||
|
points to 16 byte chunks. Pass NULL if no specific addresses
|
||
|
are requested.
|
||
|
|
||
|
Remarks:
|
||
|
|
||
|
In MCAST_API_VERSION_1 version, the MaxLeaseStartTime, MinLeaseDuration and
|
||
|
MinAddrCount are ignored by the API implementation. However, the clients should
|
||
|
set appropriate desired values for these members so as when the OS update brings
|
||
|
new implementation of the APIs then the clients can take advantage of it.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
typedef struct _MCAST_LEASE_RESPONSE {
|
||
|
LONG LeaseStartTime;
|
||
|
LONG LeaseEndTime;
|
||
|
IPNG_ADDRESS ServerAddress;
|
||
|
WORD AddrCount;
|
||
|
PBYTE pAddrBuf;
|
||
|
} MCAST_LEASE_RESPONSE, *PMCAST_LEASE_RESPONSE;
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Description:
|
||
|
|
||
|
This structure is used to pass the response of the operation of
|
||
|
requesting/renewing/releasing multicast addresses.
|
||
|
|
||
|
Members:
|
||
|
|
||
|
LeaseStartTime - start time of the lease in number of seconds elapsed since
|
||
|
midnight (00:00:00), January 1, 1970, coordinated universal time.
|
||
|
|
||
|
LeaseEndTime - time when lease ends, where time is the number of seconds elapsed
|
||
|
since midnight (00:00:00), January 1, 1970, coordinated universal time.
|
||
|
|
||
|
ServerAddress - server's ip address where this lease is renewed/requested.
|
||
|
|
||
|
AddrCount - number of addresses requested/allocated/renewed.
|
||
|
This also specifies the size of the array specified by Addr.
|
||
|
|
||
|
Addr - buffer containing addresses being requested/renewed/released. For IPv4
|
||
|
it is a pointer to 4 byte addresses and for IPv6 it points to 16 byte chunks
|
||
|
|
||
|
--*/
|
||
|
|
||
|
DWORD
|
||
|
APIENTRY
|
||
|
McastApiStartup(
|
||
|
IN OUT PDWORD Version
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
APIENTRY
|
||
|
McastApiCleanup(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
APIENTRY
|
||
|
McastGenUID(
|
||
|
IN OUT LPMCAST_CLIENT_UID pRequestID
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
APIENTRY
|
||
|
McastEnumerateScopes(
|
||
|
IN IP_ADDR_FAMILY AddrFamily,
|
||
|
IN BOOL ReQuery,
|
||
|
IN OUT PMCAST_SCOPE_ENTRY pScopeList,
|
||
|
IN OUT PDWORD pScopeLen,
|
||
|
OUT PDWORD pScopeCount
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
APIENTRY
|
||
|
McastRequestAddress(
|
||
|
IN IP_ADDR_FAMILY AddrFamily,
|
||
|
IN LPMCAST_CLIENT_UID pRequestID,
|
||
|
IN PMCAST_SCOPE_CTX pScopeCtx,
|
||
|
IN PMCAST_LEASE_REQUEST pAddrRequest,
|
||
|
IN OUT PMCAST_LEASE_RESPONSE pAddrResponse
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
APIENTRY
|
||
|
McastRenewAddress(
|
||
|
IN IP_ADDR_FAMILY AddrFamily,
|
||
|
IN LPMCAST_CLIENT_UID pRequestID,
|
||
|
IN PMCAST_LEASE_REQUEST pRenewRequest,
|
||
|
IN OUT PMCAST_LEASE_RESPONSE pRenewResponse
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
APIENTRY
|
||
|
McastReleaseAddress(
|
||
|
IN IP_ADDR_FAMILY AddrFamily,
|
||
|
IN LPMCAST_CLIENT_UID pRequestID,
|
||
|
IN PMCAST_LEASE_REQUEST pReleaseRequest
|
||
|
);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
#endif _MADCAPCL_H_
|