192 lines
6 KiB
C
192 lines
6 KiB
C
// 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 */
|
||
|
||
|