|
|
/*
* Copyright (c) 1995-1998, Microsoft Corporation * * synceng.h - File synchronization engine API description. */
#ifndef __SYNCENG_H__
#define __SYNCENG_H__
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++. */ #endif /* __cplusplus */
/* Constants
************/
/* Define API decoration for direct import of DLL functions. */
#ifdef _SYNCENG_
#define SYNCENGAPI
#else
#define SYNCENGAPI DECLSPEC_IMPORT
#endif
/* Macros
*********/
#ifndef DECLARE_STANDARD_TYPES
/*
* For a type "FOO", define the standard derived types PFOO, CFOO, and PCFOO. */
#define DECLARE_STANDARD_TYPES(type) typedef type *P##type; \
typedef const type C##type; \ typedef const type *PC##type;
#endif
/* Types
********/
/* return codes */
typedef enum _twinresult { TR_SUCCESS, TR_RH_LOAD_FAILED, TR_SRC_OPEN_FAILED, TR_SRC_READ_FAILED, TR_DEST_OPEN_FAILED, TR_DEST_WRITE_FAILED, TR_ABORT, TR_UNAVAILABLE_VOLUME, TR_OUT_OF_MEMORY, TR_FILE_CHANGED, TR_DUPLICATE_TWIN, TR_DELETED_TWIN, TR_HAS_FOLDER_TWIN_SRC, TR_INVALID_PARAMETER, TR_REENTERED, TR_SAME_FOLDER, TR_SUBTREE_CYCLE_FOUND, TR_NO_MERGE_HANDLER, TR_MERGE_INCOMPLETE, TR_TOO_DIFFERENT, TR_BRIEFCASE_LOCKED, TR_BRIEFCASE_OPEN_FAILED, TR_BRIEFCASE_READ_FAILED, TR_BRIEFCASE_WRITE_FAILED, TR_CORRUPT_BRIEFCASE, TR_NEWER_BRIEFCASE, TR_NO_MORE } TWINRESULT; DECLARE_STANDARD_TYPES(TWINRESULT);
/* handles */
DECLARE_HANDLE(HBRFCASE); DECLARE_STANDARD_TYPES(HBRFCASE);
DECLARE_HANDLE(HBRFCASEITER); DECLARE_STANDARD_TYPES(HBRFCASEITER);
DECLARE_HANDLE(HTWIN); DECLARE_STANDARD_TYPES(HTWIN);
DECLARE_HANDLE(HOBJECTTWIN); DECLARE_STANDARD_TYPES(HOBJECTTWIN);
DECLARE_HANDLE(HFOLDERTWIN); DECLARE_STANDARD_TYPES(HFOLDERTWIN);
DECLARE_HANDLE(HTWINFAMILY); DECLARE_STANDARD_TYPES(HTWINFAMILY);
DECLARE_HANDLE(HTWINLIST); DECLARE_STANDARD_TYPES(HTWINLIST);
DECLARE_HANDLE(HVOLUMEID); DECLARE_STANDARD_TYPES(HVOLUMEID);
/* OpenBriefcase() flags */
typedef enum _openbriefcaseflags { OB_FL_OPEN_DATABASE = 0x0001, OB_FL_TRANSLATE_DB_FOLDER = 0x0002, OB_FL_ALLOW_UI = 0x0004, OB_FL_LIST_DATABASE = 0x0008, ALL_OB_FLAGS = (OB_FL_OPEN_DATABASE | OB_FL_TRANSLATE_DB_FOLDER | OB_FL_ALLOW_UI | OB_FL_LIST_DATABASE) } OPENBRIEFCASEFLAGS;
/* open briefcase information returned by GetOpenBriefcaseInfo() */
typedef struct _openbrfcaseinfo { ULONG ulSize; DWORD dwFlags; HWND hwndOwner; HVOLUMEID hvid; TCHAR rgchDatabasePath[MAX_PATH]; } OPENBRFCASEINFO; DECLARE_STANDARD_TYPES(OPENBRFCASEINFO);
/*
* briefcase information returned by FindFirstBriefcase() and * FindNextBriefcase() */
typedef struct _brfcaseinfo { ULONG ulSize; TCHAR rgchDatabasePath[MAX_PATH]; } BRFCASEINFO; DECLARE_STANDARD_TYPES(BRFCASEINFO);
/* new object twin */
typedef struct _newobjecttwin { ULONG ulSize; LPCTSTR pcszFolder1; LPCTSTR pcszFolder2; LPCTSTR pcszName; } NEWOBJECTTWIN; DECLARE_STANDARD_TYPES(NEWOBJECTTWIN);
/* NEWFOLDERTWIN flags */
typedef enum _newfoldertwinflags { NFT_FL_SUBTREE = 0x0001, ALL_NFT_FLAGS = NFT_FL_SUBTREE } NEWFOLDERTWINFLAGS;
/* new folder twin */
typedef struct _newfoldertwin { ULONG ulSize; LPCTSTR pcszFolder1; LPCTSTR pcszFolder2; LPCTSTR pcszName; DWORD dwAttributes; DWORD dwFlags; } NEWFOLDERTWIN; DECLARE_STANDARD_TYPES(NEWFOLDERTWIN);
#ifndef _COMPARISONRESULT_DEFINED_
/* comparison results */
typedef enum _comparisonresult { CR_FIRST_SMALLER = -1, CR_EQUAL = 0, CR_FIRST_LARGER = +1 } COMPARISONRESULT; DECLARE_STANDARD_TYPES(COMPARISONRESULT);
#define _COMPARISONRESULT_DEFINED_
#endif
/* file stamp conditions */
typedef enum _filestampcondition { FS_COND_UNAVAILABLE, FS_COND_DOES_NOT_EXIST, FS_COND_EXISTS } FILESTAMPCONDITION; DECLARE_STANDARD_TYPES(FILESTAMPCONDITION);
/* file stamp */
typedef struct _filestamp { FILESTAMPCONDITION fscond; FILETIME ftMod; DWORD dwcbLowLength; DWORD dwcbHighLength; FILETIME ftModLocal; } FILESTAMP; DECLARE_STANDARD_TYPES(FILESTAMP);
/* volume description flags */
typedef enum _volumedescflags { /* dwSerialNumber is valid. */
VD_FL_SERIAL_NUMBER_VALID = 0x0001,
/* rgchVolumeLabel is valid. */
VD_FL_VOLUME_LABEL_VALID = 0x0002,
/* rgchNetResource is valid. */
VD_FL_NET_RESOURCE_VALID = 0x0004,
/* flag combinations */
ALL_VD_FLAGS = (VD_FL_SERIAL_NUMBER_VALID | VD_FL_VOLUME_LABEL_VALID | VD_FL_NET_RESOURCE_VALID) } VOLUMEDESCFLAGS;
/* volume description */
typedef struct _volumedesc { ULONG ulSize; DWORD dwFlags; DWORD dwSerialNumber; TCHAR rgchVolumeLabel[MAX_PATH]; TCHAR rgchNetResource[MAX_PATH]; } VOLUMEDESC; DECLARE_STANDARD_TYPES(VOLUMEDESC);
/* RECNODE states */
typedef enum _recnodestate { RNS_NEVER_RECONCILED, RNS_UNAVAILABLE, RNS_DOES_NOT_EXIST, RNS_DELETED, RNS_NOT_RECONCILED, RNS_UP_TO_DATE, RNS_CHANGED } RECNODESTATE; DECLARE_STANDARD_TYPES(RECNODESTATE);
/* RECNODE actions */
typedef enum _recnodeaction { RNA_NOTHING, RNA_COPY_FROM_ME, RNA_COPY_TO_ME, RNA_MERGE_ME, RNA_DELETE_ME } RECNODEACTION; DECLARE_STANDARD_TYPES(RECNODEACTION);
/* RECNODE flags */
typedef enum _recnodeflags { RN_FL_FROM_OBJECT_TWIN = 0x0001, RN_FL_FROM_FOLDER_TWIN = 0x0002, RN_FL_DELETION_SUGGESTED = 0x0004, ALL_RECNODE_FLAGS = (RN_FL_FROM_OBJECT_TWIN | RN_FL_FROM_FOLDER_TWIN | RN_FL_DELETION_SUGGESTED) } RECNODEFLAGS;
/* reconciliation node */
typedef struct _recnode { struct _recnode *prnNext; HVOLUMEID hvid; LPCTSTR pcszFolder; HOBJECTTWIN hObjectTwin; struct _recitem *priParent; FILESTAMP fsLast; FILESTAMP fsCurrent; RECNODESTATE rnstate; RECNODEACTION rnaction; DWORD dwFlags; DWORD dwUser; } RECNODE; DECLARE_STANDARD_TYPES(RECNODE);
/* RECITEM actions */
typedef enum _recitemaction { RIA_NOTHING, RIA_DELETE, RIA_COPY, RIA_MERGE, RIA_BROKEN_MERGE } RECITEMACTION; DECLARE_STANDARD_TYPES(RECITEMACTION);
/* reconciliation item */
typedef struct _recitem { struct _recitem *priNext; LPCTSTR pcszName; HTWINFAMILY hTwinFamily; ULONG ulcNodes; PRECNODE prnFirst; RECITEMACTION riaction; DWORD dwUser; } RECITEM; DECLARE_STANDARD_TYPES(RECITEM);
/* reconciliation list */
typedef struct _reclist { ULONG ulcItems; PRECITEM priFirst; HBRFCASE hbr; } RECLIST; DECLARE_STANDARD_TYPES(RECLIST);
/* ReconcileItem() flags */
typedef enum _reconcileitemflags { RI_FL_ALLOW_UI = 0x0001, RI_FL_FEEDBACK_WINDOW_VALID = 0x0002, ALL_RI_FLAGS = (RI_FL_ALLOW_UI | RI_FL_FEEDBACK_WINDOW_VALID) } RECONCILEITEMFLAGS;
/* reconciliation status update information */
typedef struct _recstatusupdate { ULONG ulProgress; ULONG ulScale; } RECSTATUSUPDATE; DECLARE_STANDARD_TYPES(RECSTATUSUPDATE);
/* CREATERECLISTPROC messages */
typedef enum _createreclistprocmsg { CRLS_BEGIN_CREATE_REC_LIST, CRLS_DELTA_CREATE_REC_LIST, CRLS_END_CREATE_REC_LIST } CREATERECLISTPROCMSG; DECLARE_STANDARD_TYPES(CREATERECLISTPROCMSG);
/* CreateRecList() status callback function */
typedef BOOL (CALLBACK *CREATERECLISTPROC)(CREATERECLISTPROCMSG, LPARAM, LPARAM);
/* RECSTATUSPROC messages */
typedef enum _recstatusprocmsg { RS_BEGIN_COPY, RS_DELTA_COPY, RS_END_COPY, RS_BEGIN_MERGE, RS_DELTA_MERGE, RS_END_MERGE, RS_BEGIN_DELETE, RS_DELTA_DELETE, RS_END_DELETE } RECSTATUSPROCMSG; DECLARE_STANDARD_TYPES(RECSTATUSPROCMSG);
/* ReconcileItem() status callback function */
typedef BOOL (CALLBACK *RECSTATUSPROC)(RECSTATUSPROCMSG, LPARAM, LPARAM);
/* FOLDERTWIN flags */
typedef enum _foldertwinflags { FT_FL_SUBTREE = 0x0001, ALL_FT_FLAGS = FT_FL_SUBTREE } FOLDERTWINFLAGS;
/* folder twin */
typedef struct _foldertwin { const struct _foldertwin *pcftNext; HFOLDERTWIN hftSrc; HVOLUMEID hvidSrc; LPCTSTR pcszSrcFolder; HFOLDERTWIN hftOther; HVOLUMEID hvidOther; LPCTSTR pcszOtherFolder; LPCTSTR pcszName; DWORD dwFlags; DWORD dwUser; } FOLDERTWIN; DECLARE_STANDARD_TYPES(FOLDERTWIN);
/* folder twin list */
typedef struct _foldertwinlist { ULONG ulcItems; PCFOLDERTWIN pcftFirst; HBRFCASE hbr; } FOLDERTWINLIST; DECLARE_STANDARD_TYPES(FOLDERTWINLIST);
/* FOLDERTWIN status codes */
typedef enum _foldertwinstatus { FTS_DO_NOTHING, FTS_DO_SOMETHING, FTS_UNAVAILABLE } FOLDERTWINSTATUS; DECLARE_STANDARD_TYPES(FOLDERTWINSTATUS);
/* Prototypes
*************/
/* briefcase interface */
SYNCENGAPI TWINRESULT WINAPI OpenBriefcase(LPCTSTR, DWORD, HWND, PHBRFCASE); SYNCENGAPI TWINRESULT WINAPI SaveBriefcase(HBRFCASE); SYNCENGAPI TWINRESULT WINAPI CloseBriefcase(HBRFCASE); SYNCENGAPI TWINRESULT WINAPI DeleteBriefcase(LPCTSTR); SYNCENGAPI TWINRESULT WINAPI GetOpenBriefcaseInfo(HBRFCASE, POPENBRFCASEINFO); SYNCENGAPI TWINRESULT WINAPI ClearBriefcaseCache(HBRFCASE); SYNCENGAPI TWINRESULT WINAPI FindFirstBriefcase(PHBRFCASEITER, PBRFCASEINFO); SYNCENGAPI TWINRESULT WINAPI FindNextBriefcase(HBRFCASEITER, PBRFCASEINFO); SYNCENGAPI TWINRESULT WINAPI FindBriefcaseClose(HBRFCASEITER);
/* twin interface */
SYNCENGAPI TWINRESULT WINAPI AddObjectTwin(HBRFCASE, PCNEWOBJECTTWIN, PHTWINFAMILY); SYNCENGAPI TWINRESULT WINAPI AddFolderTwin(HBRFCASE, PCNEWFOLDERTWIN, PHFOLDERTWIN); SYNCENGAPI TWINRESULT WINAPI ReleaseTwinHandle(HTWIN); SYNCENGAPI TWINRESULT WINAPI DeleteTwin(HTWIN); SYNCENGAPI TWINRESULT WINAPI GetObjectTwinHandle(HBRFCASE, LPCTSTR, LPCTSTR, PHOBJECTTWIN); SYNCENGAPI TWINRESULT WINAPI IsFolderTwin(HBRFCASE, LPCTSTR, PBOOL); SYNCENGAPI TWINRESULT WINAPI CreateFolderTwinList(HBRFCASE, LPCTSTR, PFOLDERTWINLIST *); SYNCENGAPI TWINRESULT WINAPI DestroyFolderTwinList(PFOLDERTWINLIST); SYNCENGAPI TWINRESULT WINAPI IsOrphanObjectTwin(HOBJECTTWIN, PBOOL); SYNCENGAPI TWINRESULT WINAPI CountSourceFolderTwins(HOBJECTTWIN, PULONG); SYNCENGAPI TWINRESULT WINAPI AnyTwins(HBRFCASE, PBOOL);
/* twin list interface */
SYNCENGAPI TWINRESULT WINAPI CreateTwinList(HBRFCASE, PHTWINLIST); SYNCENGAPI TWINRESULT WINAPI DestroyTwinList(HTWINLIST); SYNCENGAPI TWINRESULT WINAPI AddTwinToTwinList(HTWINLIST, HTWIN); SYNCENGAPI TWINRESULT WINAPI AddAllTwinsToTwinList(HTWINLIST); SYNCENGAPI TWINRESULT WINAPI RemoveTwinFromTwinList(HTWINLIST, HTWIN); SYNCENGAPI TWINRESULT WINAPI RemoveAllTwinsFromTwinList(HTWINLIST);
/* reconciliation list interface */
SYNCENGAPI TWINRESULT WINAPI CreateRecList(HTWINLIST, CREATERECLISTPROC, LPARAM, PRECLIST *); SYNCENGAPI TWINRESULT WINAPI DestroyRecList(PRECLIST); SYNCENGAPI TWINRESULT WINAPI ReconcileItem(PCRECITEM, RECSTATUSPROC, LPARAM, DWORD, HWND, HWND); SYNCENGAPI TWINRESULT WINAPI BeginReconciliation(HBRFCASE); SYNCENGAPI TWINRESULT WINAPI EndReconciliation(HBRFCASE); SYNCENGAPI TWINRESULT WINAPI GetFolderTwinStatus(HFOLDERTWIN, CREATERECLISTPROC, LPARAM, PFOLDERTWINSTATUS);
/* file stamp interface */
SYNCENGAPI TWINRESULT WINAPI GetFileStamp(LPCTSTR, PFILESTAMP); SYNCENGAPI TWINRESULT WINAPI CompareFileStamps(PCFILESTAMP, PCFILESTAMP, PCOMPARISONRESULT);
/* volume ID interface */
SYNCENGAPI TWINRESULT WINAPI IsPathOnVolume(LPCTSTR, HVOLUMEID, PBOOL); SYNCENGAPI TWINRESULT WINAPI GetVolumeDescription(HVOLUMEID, PVOLUMEDESC);
#ifdef __cplusplus
} /* End of extern "C" {. */ #endif /* __cplusplus */
#endif /* ! __SYNCENG_H__ */
|