210 lines
7.5 KiB
C++
210 lines
7.5 KiB
C++
|
#ifndef __MBFTRECV_HPP__
|
|||
|
#define __MBFTRECV_HPP__
|
|||
|
|
|||
|
|
|||
|
class CMBFTFile;
|
|||
|
class MBFTReceiveSubEvent;
|
|||
|
|
|||
|
|
|||
|
class CT120ChannelList : public CList
|
|||
|
{
|
|||
|
DEFINE_CLIST_(CT120ChannelList, T120ChannelID)
|
|||
|
};
|
|||
|
|
|||
|
class CRecvSubEventList : public CList
|
|||
|
{
|
|||
|
DEFINE_CLIST(CRecvSubEventList, MBFTReceiveSubEvent*)
|
|||
|
MBFTReceiveSubEvent * FindEquiv(MBFTReceiveSubEvent *);
|
|||
|
void Delete(MBFTReceiveSubEvent *);
|
|||
|
void DeleteAll(void);
|
|||
|
};
|
|||
|
|
|||
|
class CChannelUidQueue : public CQueue
|
|||
|
{
|
|||
|
DEFINE_CQUEUE_(CChannelUidQueue, UINT_PTR)
|
|||
|
BOOL RemoveByChannelID(T120ChannelID nChannelID);
|
|||
|
UINT_PTR FindByChannelID(T120ChannelID nChannelID);
|
|||
|
};
|
|||
|
|
|||
|
class MBFTPrivateReceive : public MBFTSession
|
|||
|
{
|
|||
|
public:
|
|||
|
|
|||
|
enum MBFTPrivateReceiveState
|
|||
|
{
|
|||
|
EnumIdleNotInitialized,
|
|||
|
EnumIdleInitialized,
|
|||
|
EnumInitializationFailed,
|
|||
|
EnumWaitJoinControlChannel,
|
|||
|
EnumWaitRequestJoinControl,
|
|||
|
EnumWaitRequestControlConvene,
|
|||
|
EnumWaitRequestDataConvene,
|
|||
|
EnumWaitAdmitControlChannelIndication,
|
|||
|
EnumWaitAdmitDataChannelIndication,
|
|||
|
EnumWaitSendChannelResponsePDU,
|
|||
|
EnumWaitUserConfirmation,
|
|||
|
EnumWaitSendFileAcceptPDU,
|
|||
|
EnumWaitSendFileRejectPDU,
|
|||
|
EnumWaitFileOfferPDU,
|
|||
|
EnumWaitFileStartPDU,
|
|||
|
EnumWaitFileDataPDU,
|
|||
|
EnumWaitSendFileEndAcknowledgePDU,
|
|||
|
EnumWaitSendChannelLeavePDU,
|
|||
|
EnumWaitJoinDataChannel,
|
|||
|
EnumWaitRejoinDataChannel,
|
|||
|
EnumWaitRequestJoinData,
|
|||
|
EnumWaitAdmitControlChannel,
|
|||
|
EnumWaitChannelDisband,
|
|||
|
EnumWaitForTermination
|
|||
|
};
|
|||
|
|
|||
|
MBFTPrivateReceive(LPMBFTENGINE, MBFTFILEHANDLE, T120ChannelID chidControl, T120ChannelID chidData);
|
|||
|
~MBFTPrivateReceive(void);
|
|||
|
|
|||
|
BOOL OnMCSChannelJoinConfirm(T120ChannelID, BOOL bSuccess);
|
|||
|
BOOL OnMCSChannelAdmitIndication(T120ChannelID, T120UserID uidManager);
|
|||
|
BOOL OnMCSChannelExpelIndication(T120ChannelID, Reason);
|
|||
|
|
|||
|
virtual BOOL OnReceivedFileOfferPDU(T120ChannelID, T120Priority, T120UserID uidSender, T120NodeID uidNode, LPFILEOFFERPDU lpNewPDU, BOOL IsUniformSendData);
|
|||
|
BOOL OnReceivedFileStartPDU(T120ChannelID, T120Priority, T120UserID uidSender, LPFILESTARTPDU lpNewPDU, BOOL IsUniformSendData);
|
|||
|
BOOL OnReceivedFileDataPDU(T120ChannelID, T120Priority, T120UserID uidSender, LPFILEDATAPDU lpNewPDU, BOOL IsUniformSendData);
|
|||
|
BOOL OnReceivedFileErrorPDU(T120ChannelID, T120Priority, T120UserID uidSender, LPFILEERRORPDU lpNewPDU, BOOL IsUniformSendData);
|
|||
|
void OnPeerDeletedNotification(CPeerData * lpPeerData);
|
|||
|
void OnControlNotification(MBFTFILEHANDLE hFile, FileTransferControlMsg::FileTransferControl iControlCommand, LPCSTR lpszDirectory, LPCSTR lpszFileName);
|
|||
|
void DoStateMachine(void);
|
|||
|
void UnInitialize(BOOL bIsShutDown = FALSE);
|
|||
|
|
|||
|
|
|||
|
protected:
|
|||
|
|
|||
|
T120UserID m_LocalMBFTUserID;
|
|||
|
T120ChannelID m_PrivateMBFTControlChannel;
|
|||
|
CT120ChannelList m_PrivateMBFTDataChannelList;
|
|||
|
T120ChannelID m_PrivateMBFTDataChannel;
|
|||
|
T120UserID m_MBFTControlSenderID;
|
|||
|
T120UserID m_MBFTDataSenderID;
|
|||
|
T120UserID m_ProshareSenderID;
|
|||
|
MBFTFILEHANDLE m_CurrentAcceptHandle; // ???
|
|||
|
MBFTFILEHANDLE m_CurrentRejectHandle; // ???
|
|||
|
MBFTFILEHANDLE m_CurrentFileEndHandle;
|
|||
|
|
|||
|
MBFTPrivateReceiveState m_State;
|
|||
|
MBFTPrivateReceiveState m_PreviousRejectState;
|
|||
|
BOOL m_bProshareTransfer;
|
|||
|
CRecvSubEventList m_ReceiveList;
|
|||
|
MBFTReceiveSubEvent *m_CurrentReceiveEvent;
|
|||
|
BOOL m_JoinedToDataChannel;
|
|||
|
BOOL m_bOKToLeaveDataChannel;
|
|||
|
BOOL m_bEventEndPosted;
|
|||
|
CChannelUidQueue m_AdmittedChannelQueue;
|
|||
|
|
|||
|
void JoinControlChannel(void);
|
|||
|
void JoinDataChannel(void);
|
|||
|
void LeaveDataChannel(void);
|
|||
|
|
|||
|
void SendChannelResponsePDU(void);
|
|||
|
BOOL SendFileAcceptPDU(MBFTFILEHANDLE iFileHandle = 0);
|
|||
|
void SendFileRejectPDU(MBFTFILEHANDLE iFileHandle = 0);
|
|||
|
void SendFileEndAcknowledgePDU(MBFTFILEHANDLE iFileHandle = 0);
|
|||
|
void SendChannelLeavePDU(void);
|
|||
|
|
|||
|
void DeleteReceiveEvent(MBFTReceiveSubEvent * lpReceive,BOOL bNotifyUser);
|
|||
|
void TerminateReceiveSession(void);
|
|||
|
|
|||
|
void ReportError(MBFTReceiveSubEvent * lpReceiveEvent,
|
|||
|
int iErrorType,
|
|||
|
int iErrorCode,
|
|||
|
BOOL bIsLocalError = TRUE,
|
|||
|
T120UserID SenderID = 0,
|
|||
|
const char* pFileName = NULL,
|
|||
|
ULONG lFileSize = 0);
|
|||
|
|
|||
|
void ReportReceiverError(MBFTReceiveSubEvent * lpReceiveEvent,
|
|||
|
int iErrorType,
|
|||
|
int iErrorCode,
|
|||
|
MBFTFILEHANDLE iFileHandle = 0);
|
|||
|
|
|||
|
void DeleteNotificationMessages(MBFT_NOTIFICATION iNotificationType);
|
|||
|
|
|||
|
int DecompressAndWrite(MBFTReceiveSubEvent * lpReceiveEvent,
|
|||
|
LPCSTR lpBuffer,LONG BufferLength,LPINT lpDecompressedSize);
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
#ifdef USE_BROADCAST_RECEIVE
|
|||
|
class MBFTBroadcastReceive : public MBFTPrivateReceive
|
|||
|
{
|
|||
|
private:
|
|||
|
|
|||
|
T120UserID m_SenderID;
|
|||
|
MBFTFILEHANDLE m_FileHandle;
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
MBFTBroadcastReceive(LPMBFTENGINE lpParentEngine,
|
|||
|
MBFTEVENTHANDLE EventHandle,
|
|||
|
T120ChannelID wControlChannel,
|
|||
|
T120ChannelID wDataChannel,
|
|||
|
T120UserID SenderID,
|
|||
|
MBFTFILEHANDLE FileHandle);
|
|||
|
|
|||
|
BOOL OnMCSChannelJoinConfirm(T120ChannelID, BOOL bSuccess);
|
|||
|
BOOL OnReceivedFileOfferPDU(T120ChannelID, T120Priority, T120UserID uidSender, T120NodeID uidNode, LPFILEOFFERPDU lpNewPDU, BOOL IsUniformSendData);
|
|||
|
BOOL OnReceivedFileStartPDU(T120ChannelID, T120Priority, T120UserID uidSender, LPFILESTARTPDU lpNewPDU, BOOL IsUniformSendData);
|
|||
|
BOOL OnReceivedFileDataPDU(T120ChannelID, T120Priority, T120UserID, LPFILEDATAPDU lpNewPDU, BOOL IsUniformSendData);
|
|||
|
void OnControlNotification(MBFTFILEHANDLE hFile, FileTransferControlMsg::FileTransferControl iControlCommand, LPCSTR lpszDirectory, LPCSTR lpszFileName);
|
|||
|
void OnPeerDeletedNotification(CPeerData * lpPeerData);
|
|||
|
void DoStateMachine(void);
|
|||
|
void UnInitialize(BOOL bIsShutDown = FALSE);
|
|||
|
};
|
|||
|
|
|||
|
#endif // USE_BROADCAST_RECEIVE
|
|||
|
|
|||
|
typedef class MBFTPrivateReceive FAR * LPMBFTPRIVATESUBSESSIONRECEIVE;
|
|||
|
|
|||
|
class MBFTReceiveSubEvent
|
|||
|
{
|
|||
|
private:
|
|||
|
|
|||
|
friend class MBFTPrivateReceive;
|
|||
|
#ifdef USE_BROADCAST_RECEIVE
|
|||
|
friend class MBFTBroadcastReceive;
|
|||
|
#endif // USE_BROADCAST_RECEIVE
|
|||
|
|
|||
|
MBFTPrivateReceive::MBFTPrivateReceiveState m_State;
|
|||
|
|
|||
|
BOOL m_bIsBroadcast;
|
|||
|
MBFTFILEHANDLE m_hFile;
|
|||
|
ULONG m_FileSize;
|
|||
|
ULONG m_TotalBytesReceived;
|
|||
|
ULONG m_cbRecvLastNotify;
|
|||
|
T120UserID m_SenderID;
|
|||
|
CMBFTFile *m_lpFile;
|
|||
|
BOOL m_UserAccepted;
|
|||
|
BOOL m_bFileCompressed;
|
|||
|
BOOL m_bEOFAcknowledge;
|
|||
|
time_t m_FileDateTime;
|
|||
|
LPVOID m_lpV42bisPointer;
|
|||
|
char m_szFileName[_MAX_FNAME];
|
|||
|
char m_szFileDirectory[_MAX_PATH];
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
MBFTReceiveSubEvent(MBFTFILEHANDLE FileHandle,
|
|||
|
LONG FileSize,
|
|||
|
LPCSTR lpszFileName,
|
|||
|
time_t FileDateTime,
|
|||
|
T120UserID SenderID,
|
|||
|
BOOL bIsBroadcast,
|
|||
|
BOOL bIsCompressed,
|
|||
|
BOOL bEOFAcknowledge);
|
|||
|
~MBFTReceiveSubEvent(void);
|
|||
|
|
|||
|
BOOL Init(void);
|
|||
|
BOOL IsEqual(MBFTReceiveSubEvent *lpObject);
|
|||
|
void InitV42DeCompression(int v42bisP1,int v42bisP2);
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
#endif //__MBFTRECV_HPP__
|
|||
|
|