|
|
// File: iMbft.h
//
// Interface to Multipoint Binary File Transfer
#ifndef _IMBFT_H_
#define _IMBFT_H_
#include <t120type.h>
const unsigned int _iMBFT_MAX_APP_KEY = 64; //Max characters in lpszAppKey parameter passed to MBFTInitialize
const unsigned int _iMBFT_MAX_FILE_NAME = MAX_PATH; //Max characters in filename
typedef UINT MBFTFILEHANDLE; typedef UINT MBFTEVENTHANDLE;
typedef enum { iMBFT_OK = 0, iMBFT_FIRST_ERROR = 0x100, iMBFT_NOT_INITIALIZED, iMBFT_ALREADY_INITIALIZED, iMBFT_INVALID_SESSION_ID, iMBFT_INVALID_ATTACHMENT_HANDLE, iMBFT_NO_MORE_RECIPIENTS, iMBFT_NO_MORE_FILES, iMBFT_INVALID_EVENT_HANDLE, iMBFT_INVALID_FILE_HANDLE, iMBFT_INSUFFICIENT_DISK_SPACE, iMBFT_FILE_NOT_FOUND, iMBFT_FILE_IO_ERROR, iMBFT_MEMORY_ALLOCATION_ERROR, iMBFT_ASN1_ENCODING_ERROR, iMBFT_RECIPIENT_NOT_FOUND, iMBFT_SENDER_ABORTED, iMBFT_RECEIVER_ABORTED, iMBFT_MULT_RECEIVER_ABORTED, iMBFT_RECEIVER_REJECTED, iMBFT_INVALID_PARAMETERS, iMBFT_COMPRESSION_ERROR, iMBFT_DECOMPRESSION_ERROR, iMBFT_INVALID_PATH, iMBFT_FILE_ACCESS_DENIED, iMBFT_FILE_HARD_IO_ERROR, iMBFT_FILE_SHARING_VIOLATION, iMBFT_DIRECTORY_FULL_ERROR, iMBFT_TOO_MANY_OPEN_FILES, iMBFT_OPERATION_IN_PROGRESS, iMBFT_INSUFFICIENT_PRIVILEGE, iMBFT_CONDUCTOR_ABORTED, iMBFT_PACKET_SIZE_ERROR, iMBFT_UNKNOWN_ERROR, iMBFT_TIMEOUT_ERROR } MBFT_ERROR_CODE;
// Return codes (Should be in imsconf2.idl)
#define FT_ERR_FAC 0xF000
#define FT_E(e) (0x81000000UL | FT_ERR_FAC | (ULONG) (e))
enum { NM_E_FT_NO_RECIPIENTS = FT_E(0x01FF), NM_E_FT_CANCELED = FT_E(0x01FE), NM_E_FT_MULT_CANCELED = FT_E(0x01FD), NM_E_FT_RECDIR = FT_E(0x01FC), NM_E_FT_REJECTED = FT_E(0x01FB) };
#define HRESULT_FROM_IMBFT(iMbftError) FT_E(iMbftError)
// This matches "ErrorType" in T.MBFT spec
typedef enum { MBFT_INFORMATIVE_ERROR = 0, // Information only
MBFT_TRANSIENT_ERROR, // Current transfer failed, retry might work
MBFT_PERMANENT_ERROR // Error occurs consistently
} MBFT_ERROR_TYPES;
typedef struct _T_MBFT_PEER_INFO { T120NodeID NodeID; // MCS userID of GCC on peer's node
T120UserID MBFTPeerID; // MCS userID of peer app
T120SessionID MBFTSessionID; // Session ID
BOOL bIsProShareApp; // ProShare MBFT peer
char szAppKey[_iMBFT_MAX_APP_KEY]; // see MBFTInitialize
} MBFT_PEER_INFO;
typedef struct _T_MBFT_SEND_FILE_INFO { char * lpszFilePath; //Canonical path to file to be sent, upto [_iMBFT_MAX_PATH] bytes
MBFTFILEHANDLE hFile; // unique identifier for file (filled in on return)
ULONG lFileSize; // File size in bytes
time_t FileDateTime; } MBFT_SEND_FILE_INFO;
typedef struct _T_MBFT_RECEIVE_FILE_INFO { char szFileName[_iMBFT_MAX_FILE_NAME]; // Just the File name
MBFTFILEHANDLE hFile; // unique identifier for file
ULONG lFileSize; // File size in bytes
time_t FileDateTime; } MBFT_RECEIVE_FILE_INFO;
typedef struct _T_MBFT_FILE_OFFER { MBFTEVENTHANDLE hEvent; T120UserID SenderID; // MCS ID of sender-to-be
T120NodeID NodeID; ULONG uNumFiles; // Number of files offered
BOOL bIsBroadcastEvent; MBFT_RECEIVE_FILE_INFO FAR * lpFileInfoList; // Array of structs with file info
} MBFT_FILE_OFFER;
typedef struct _T_MBFT_FILE_PROGRESS { MBFTEVENTHANDLE hEvent; MBFTFILEHANDLE hFile; ULONG lFileSize; ULONG lBytesTransmitted; BOOL bIsBroadcastEvent; } MBFT_FILE_PROGRESS;
typedef struct _T_MBFT_EVENT_ERROR { MBFTEVENTHANDLE hEvent; BOOL bIsLocalError; // If error in local MBFT provider
T120UserID UserID; // MCS ID of peer who reported error
MBFTFILEHANDLE hFile; // File associated with error
BOOL bIsBroadcastEvent; MBFT_ERROR_TYPES eErrorType; // Severity of error
MBFT_ERROR_CODE eErrorCode; } MBFT_EVENT_ERROR;
#undef INTERFACE
#define INTERFACE IMbftEvents
DECLARE_INTERFACE(IMbftEvents) { STDMETHOD(OnInitializeComplete)( THIS) PURE;
STDMETHOD(OnPeerAdded)( THIS_ MBFT_PEER_INFO *pInfo) PURE; STDMETHOD(OnPeerRemoved)( THIS_ MBFT_PEER_INFO *pInfo) PURE; STDMETHOD(OnFileOffer)( THIS_ MBFT_FILE_OFFER *pOffer) PURE; STDMETHOD(OnFileProgress)( THIS_ MBFT_FILE_PROGRESS *pProgress) PURE; STDMETHOD(OnFileEnd)( THIS_ MBFTFILEHANDLE hFile) PURE; STDMETHOD(OnFileError)( THIS_ MBFT_EVENT_ERROR *pEvent) PURE; STDMETHOD(OnFileEventEnd)( THIS_ MBFTEVENTHANDLE hEvent) PURE; STDMETHOD(OnSessionEnd)( THIS) PURE; };
#undef INTERFACE
#define INTERFACE IMbftControl
DECLARE_INTERFACE(IMbftControl) { STDMETHOD_(void, ReleaseInterface)( THIS) PURE; STDMETHOD_(void, Update)( THIS) PURE; STDMETHOD_(void, CancelFt)( THIS_ MBFTEVENTHANDLE hEvent, MBFTFILEHANDLE hFile) PURE; STDMETHOD(AcceptFileOffer)( THIS_ MBFT_FILE_OFFER *pOffer, LPCSTR pszRecDir, LPCSTR pszFileName) PURE; STDMETHOD_(void, RejectFileOffer)( THIS_ MBFT_FILE_OFFER *pOffer) PURE; STDMETHOD(SendFile)( THIS_ LPCSTR pszFileName, T120NodeID nidReceiver, MBFTEVENTHANDLE *phEvent, MBFTFILEHANDLE *phFile) PURE; };
typedef HRESULT (WINAPI * PFNCREATEMBFTOBJECT) (IMbftControl**, IMbftEvents *);
HRESULT WINAPI FT_CreateInterface(IMbftControl **ppMbft, IMbftEvents *pEvents);
#endif /* _IMBFT_H */
|