windows-nt/Source/XPSP1/NT/enduser/netmeeting/ui/msconfft/mbftrecv.hpp
2020-09-26 16:20:57 +08:00

210 lines
7.5 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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__