This topic has not yet been rated - Rate this topic

6 Appendix A: Full IDL

The Distributed File System: Replication (DFS-R) Protocol contains one interface, whose IDL definition is listed in this section. The IDL definition for this interface imports the "ms-dtyp.idl" file, as specified in [MS-DTYP] section 2.2.5.3.4.3.

import "ms-dtyp.idl";


#define FRS_COMMUNICATION_PROTOCOL_VERSION_W2K3R2     0x00050000
#define FRS_COMMUNICATION_PROTOCOL_VERSION_LONGHORN_SERVER 0x00050002

#define CONFIG_RDC_VERSION    (1)
#define CONFIG_RDC_VERSION_COMPATIBLE   (1)

#define CONFIG_FILEHASH_DATASIZE (20)
#define CONFIG_RDC_SIMILARITY_DATASIZE (16)
#define CONFIG_RDC_HORIZONSIZE_MIN      (128)
#define CONFIG_RDC_HORIZONSIZE_MAX       (1024*16)
#define CONFIG_RDC_HASHWINDOWSIZE_MIN   (2)
#define CONFIG_RDC_HASHWINDOWSIZE_MAX   (96)
#define CONFIG_RDC_MAX_LEVELS           (8)
#define CONFIG_RDC_MAX_NEEDLENGTH       (65536)
#define CONFIG_TRANSPORT_MAX_BUFFER_SIZE (262144)
#define CONFIG_RDC_NEED_QUEUE_SIZE      (20)

#define TRUE 1
#define FALSE 0

typedef GUID FRS_REPLICA_SET_ID;
typedef GUID FRS_CONTENT_SET_ID;
typedef GUID FRS_DATABASE_ID;
typedef GUID FRS_MEMBER_ID;
typedef GUID FRS_CONNECTION_ID;

typedef SYSTEMTIME EPOQUE;

typedef struct _FRS_VERSION_VECTOR {

    GUID dbGuid;
    DWORDLONG low;
    DWORDLONG high;
} FRS_VERSION_VECTOR;

typedef struct _FRS_EPOQUE_VECTOR {

    GUID machine;
    EPOQUE epoque;

} FRS_EPOQUE_VECTOR;


typedef struct _FRS_ID_GVSN {
   GUID uidDbGuid;
   DWORDLONG uidVersion;
   GUID gvsnDbGuid;
   DWORDLONG gvsnVersion;
} FRS_ID_GVSN;



typedef struct _FRS_UPDATE {

    long            present;
    long            nameConflict;

    unsigned long   attributes;
    FILETIME        fence;
    FILETIME        clock;
    FILETIME        createTime;


    FRS_CONTENT_SET_ID  contentSetId;
    unsigned char           hash[CONFIG_FILEHASH_DATASIZE];
    unsigned char           rdcSimilarity[CONFIG_RDC_SIMILARITY_DATASIZE];

    GUID            uidDbGuid;
    DWORDLONG       uidVersion;

    GUID            gvsnDbGuid;
    DWORDLONG       gvsnVersion;

    GUID            parentDbGuid;
    DWORDLONG       parentVersion;

    [string] WCHAR  name[260+1];

    long            flags;

} FRS_UPDATE;


typedef struct _FRS_UPDATE_CANCEL_DATA {

    FRS_UPDATE          blockingUpdate;

    FRS_CONTENT_SET_ID  contentSetId;

    FRS_DATABASE_ID     gvsnDatabaseId;
    FRS_DATABASE_ID     uidDatabaseId;
    FRS_DATABASE_ID     parentDatabaseId;

    DWORDLONG           gvsnVersion;
    DWORDLONG           uidVersion;
    DWORDLONG           parentVersion;

    unsigned long       cancelType;

    long                isUidValid;
    long                isParentUidValid;
    long                isBlockerValid;

} FRS_UPDATE_CANCEL_DATA;


typedef struct _FRS_RDC_SOURCE_NEED {
    ULONGLONG           needOffset;
    ULONGLONG           needSize;
} FRS_RDC_SOURCE_NEED;


typedef enum
{
    TRANSPORT_SUPPORTS_RDC_SIMILARITY = 1
} TransportFlags;

typedef enum
{
    RDC_UNCOMPRESSED = 0,
    RDC_XPRESS = 1
} RDC_FILE_COMPRESSION_TYPES;

typedef enum
{
    RDC_FILTERGENERIC = 0,
    RDC_FILTERMAX = 1,
    RDC_FILTERPOINT = 2,
    RDC_MAXALGORITHM = 3
} RDC_CHUNKER_ALGORITHM;

typedef enum
{
   UPDATE_REQUEST_ALL = 0,
   UPDATE_REQUEST_TOMBSTONES = 1,
   UPDATE_REQUEST_LIVE = 2
} UPDATE_REQUEST_TYPE;

typedef enum
{
    UPDATE_STATUS_DONE = 2,
    UPDATE_STATUS_MORE = 3
} UPDATE_STATUS;

typedef enum
{
    RECORDS_STATUS_DONE = 0,
    RECORDS_STATUS_MORE = 1
} RECORDS_STATUS;

typedef enum
{
    REQUEST_NORMAL_SYNC = 0,
    REQUEST_SLOW_SYNC = 1,
    REQUEST_SUBORDINATE_SYNC = 2
} VERSION_REQUEST_TYPE;

typedef enum
{
  CHANGE_NOTIFY = 0,
  CHANGE_ALL = 2
} VERSION_CHANGE_TYPE;

typedef enum
{
    SERVER_DEFAULT = 0,
    STAGING_REQUIRED = 1,
    RESTAGING_REQUIRED = 2
} FRS_REQUESTED_STAGING_POLICY;

typedef struct _FRS_RDC_PARAMETERS_FILTERMAX
{
    [range(CONFIG_RDC_HORIZONSIZE_MIN, CONFIG_RDC_HORIZONSIZE_MAX)]
    unsigned short horizonSize;

    [range(CONFIG_RDC_HASHWINDOWSIZE_MIN, CONFIG_RDC_HASHWINDOWSIZE_MAX)]
    unsigned short windowSize;
} FRS_RDC_PARAMETERS_FILTERMAX;

typedef struct _FRS_RDC_PARAMETERS_FILTERPOINT
{
    unsigned short minChunkSize;
    unsigned short maxChunkSize;
} FRS_RDC_PARAMETERS_FILTERPOINT;

typedef struct _FRS_RDC_PARAMETERS_GENERIC
{
    unsigned short    chunkerType;
    byte    chunkerParameters[64];
} FRS_RDC_PARAMETERS_GENERIC;


typedef struct
{
    unsigned short      rdcChunkerAlgorithm;
    [switch_is(rdcChunkerAlgorithm)] union
    {
        [case(RDC_FILTERGENERIC)] FRS_RDC_PARAMETERS_GENERIC filterGeneric;
        [case(RDC_FILTERMAX)]     FRS_RDC_PARAMETERS_FILTERMAX filterMax;
        [case(RDC_FILTERPOINT)]   FRS_RDC_PARAMETERS_FILTERPOINT filterPoint;
    } u;
} FRS_RDC_PARAMETERS;


typedef struct _FRS_RDC_FILEINFO
{
    DWORDLONG onDiskFileSize;
    DWORDLONG fileSizeEstimate;
    unsigned short      rdcVersion;
    unsigned short      rdcMinimumCompatibleVersion;
    [range(0, CONFIG_RDC_MAX_LEVELS)]
    byte      rdcSignatureLevels;
    RDC_FILE_COMPRESSION_TYPES  compressionAlgorithm;

    [size_is(rdcSignatureLevels)]
        FRS_RDC_PARAMETERS rdcFilterParameters[*];
} FRS_RDC_FILEINFO;


typedef struct _FRS_ASYNC_VERSION_VECTOR_RESPONSE {
  ULONGLONG            vvGeneration;
  unsigned long                versionVectorCount;
  [size_is(versionVectorCount)]
  FRS_VERSION_VECTOR * versionVector;
  unsigned long                epoqueVectorCount;
  [size_is(epoqueVectorCount)]
  FRS_EPOQUE_VECTOR *  epoqueVector;
} FRS_ASYNC_VERSION_VECTOR_RESPONSE;


typedef struct _FRS_ASYNC_RESPONSE_CONTEXT {
    unsigned long sequenceNumber;
    DWORD status;

    FRS_ASYNC_VERSION_VECTOR_RESPONSE result;

} FRS_ASYNC_RESPONSE_CONTEXT;

#define FRS_UPDATE_FLAG_GHOSTED_HEADER = 0x04;      
#define FRS_UPDATE_FLAG_DATA           = 0x08;      
#define FRS_UPDATE_FLAG_CLOCK_DECREMENTED = 0x10;      

typedef pipe byte BYTE_PIPE;

[
    uuid(897e2e5f-93f3-4376-9c9c-fd2277495c27),
    version(1.0)
]
interface FrsTransport
{
    DWORD
    CheckConnectivity(
        [in] FRS_REPLICA_SET_ID replicaSetId,
        [in] FRS_CONNECTION_ID connectionId
        );

    DWORD
    EstablishConnection(
        [in] FRS_REPLICA_SET_ID replicaSetId,
        [in] FRS_CONNECTION_ID connectionId,
        [in] DWORD downstreamProtocolVersion,
        [in] DWORD downstreamFlags,
        [out] DWORD *upstreamProtocolVersion,
        [out] DWORD *upstreamFlags
        );

    DWORD
    EstablishSession(
        [in] FRS_CONNECTION_ID connectionId,
        [in] FRS_CONTENT_SET_ID contentSetId
        );


    DWORD
    RequestUpdates(
        [in] FRS_CONNECTION_ID connectionId,
        [in] FRS_CONTENT_SET_ID contentSetId,
        [in, range(0,256)] DWORD creditsAvailable,
        [in, range(0,1)] long hashRequested,
        [in, range(UPDATE_REQUEST_ALL, UPDATE_REQUEST_LIVE)] UPDATE_REQUEST_TYPE updateRequestType,
        [in] unsigned long versionVectorDiffCount,
        [in, size_is(versionVectorDiffCount)]
            FRS_VERSION_VECTOR *versionVectorDiff,
        [out, size_is(creditsAvailable), length_is(*updateCount)] FRS_UPDATE *frsUpdate,
        [out] DWORD *updateCount,
        [out] UPDATE_STATUS *updateStatus,
        [out] GUID *gvsnDbGuid,
        [out] DWORDLONG *gvsnVersion
        );

    DWORD
    RequestVersionVector(
        [in] DWORD sequenceNumber,
        [in] FRS_CONNECTION_ID connectionId,
        [in] FRS_CONTENT_SET_ID contentSetId,
        [in, range(REQUEST_NORMAL_SYNC,REQUEST_SUBORDINATE_SYNC)] VERSION_REQUEST_TYPE requestType,
        [in, range(CHANGE_NOTIFY,CHANGE_ALL)] VERSION_CHANGE_TYPE changeType,
        [in] ULONGLONG vvGeneration
        );

    DWORD
    AsyncPoll(
        [in]  FRS_CONNECTION_ID connectionId,
        [out] FRS_ASYNC_RESPONSE_CONTEXT* response
        );

    DWORD
    RequestRecords(
        [in] FRS_CONNECTION_ID connectionId,
        [in] FRS_CONTENT_SET_ID contentSetId,
        [in] FRS_DATABASE_ID uidDbGuid,
        [in] DWORDLONG uidVersion,
        [in, out] DWORD *maxRecords,
        [out] DWORD *numRecords,
        [out] DWORD *numBytes,
        [out, size_is(,*numBytes)] byte **compressedRecords,
        [out] RECORDS_STATUS *recordsStatus
        );

    DWORD
    UpdateCancel(
        [in] FRS_CONNECTION_ID connectionId,
        [in] FRS_UPDATE_CANCEL_DATA cancelData
        );

    typedef [context_handle] void * PFRS_SERVER_CONTEXT;

    DWORD
    RawGetFileData(
        [in, out] PFRS_SERVER_CONTEXT *serverContext,
        [out, size_is(bufferSize), length_is(*sizeRead)] byte *dataBuffer,
        [in, range(0, CONFIG_TRANSPORT_MAX_BUFFER_SIZE)] DWORD bufferSize,  
        [out] DWORD *sizeRead,
        [out] long *isEndOfFile
        );

    DWORD
    RdcGetSignatures(
        [in] PFRS_SERVER_CONTEXT serverContext,
        [in, range(1, CONFIG_RDC_MAX_LEVELS)] byte level,
        [in] DWORDLONG offset,
        [out, size_is(length), length_is(*sizeRead)] byte *buffer,
        [in, range(1, CONFIG_RDC_MAX_NEEDLENGTH)] DWORD length,
        [out] DWORD *sizeRead
       );

    DWORD
    RdcPushSourceNeeds(
        [in] PFRS_SERVER_CONTEXT serverContext,
        [in, size_is(needCount)] FRS_RDC_SOURCE_NEED *sourceNeeds,
        [in, range(0, CONFIG_RDC_NEED_QUEUE_SIZE)] DWORD needCount
        );

    DWORD
    RdcGetFileData(
        [in] PFRS_SERVER_CONTEXT serverContext,
        [out, size_is(bufferSize), length_is(*sizeReturned)] byte *dataBuffer,
        [in, range(0, CONFIG_TRANSPORT_MAX_BUFFER_SIZE)] DWORD bufferSize, 
        [out] DWORD *sizeReturned
       );

    DWORD
    RdcClose(
       [in, out] PFRS_SERVER_CONTEXT *serverContext
       );

    DWORD
    InitializeFileTransferAsync(
        [in] FRS_CONNECTION_ID  connectionId,
        [in, out] FRS_UPDATE *frsUpdate,
        [in, range(0,1)] long rdcDesired,
        [in,out] FRS_REQUESTED_STAGING_POLICY *stagingPolicy,
        [out] PFRS_SERVER_CONTEXT *serverContext,
        [out] FRS_RDC_FILEINFO **rdcFileInfo,
        [out, size_is(bufferSize), length_is(*sizeRead)] byte *dataBuffer,
        [in, range(0, CONFIG_TRANSPORT_MAX_BUFFER_SIZE)] DWORD bufferSize,  
        [out] DWORD *sizeRead,
        [out] long *isEndOfFile
        );

DWORD Opnum14NotUsedOnWire (void);


    DWORD
    RawGetFileDataAsync(
        [in]  PFRS_SERVER_CONTEXT serverContext,
        [out] BYTE_PIPE* bytePipe
        );

    DWORD
    RdcGetFileDataAsync(
        [in]  PFRS_SERVER_CONTEXT serverContext,
        [out] BYTE_PIPE* bytePipe
        );
}
 
Did you find this helpful?
(1500 characters remaining)
© 2013 Microsoft. All rights reserved.