/****************************************************************************/ // cc.h // // Call controller class defs. // // Copyright (C) 1997-2000 Microsoft Corporation /****************************************************************************/ #ifndef _H_CC #define _H_CC extern "C" { //#include //#include //#include #include #include } #include "cd.h" #include "uh.h" #include "cm.h" #include "fs.h" class CUI; class CSL; class CUH; class CCD; class CIH; class COR; class CFS; class CCM; class CChan; /****************************************************************************/ /* FSM events (different numbers as the internal events) */ /****************************************************************************/ #define CC_EVT_API_ONCONNECTOK 101 #define CC_EVT_API_ONBUFFERAVAILABLE 104 #define CC_EVT_API_ONDEACTIVATEALL 105 #define CC_EVT_API_DISCONNECT 106 #define CC_EVT_API_ONSHUTDOWNDENIED 107 #define CC_EVT_API_DISCONNECTANDEXIT 108 #define CC_EVT_API_SHUTDOWN 109 /****************************************************************************/ /* Structure: CC_COMBINED_CAPABILITIES */ /* */ /* Description: Capabilities sent from client to server. */ /****************************************************************************/ typedef struct tagCC_COMBINED_CAPABILITIES { UINT16 numberCapabilities; #ifdef DRAW_GDIPLUS #ifdef DRAW_NINEGRID #define CC_COMBINED_CAPS_NUMBER_CAPABILITIES 18 #else // DRAW_NINEGRID #define CC_COMBINED_CAPS_NUMBER_CAPABILITIES 17 #endif // DRAW_NINEGRID #else // DRAW_GDIPLUS #ifdef DRAW_NINEGRID #define CC_COMBINED_CAPS_NUMBER_CAPABILITIES 17 #else #define CC_COMBINED_CAPS_NUMBER_CAPABILITIES 16 #endif // DRAW_NINEGRID #endif // DRAW_GDIPLUS UINT16 pad2octets; TS_GENERAL_CAPABILITYSET generalCapabilitySet; TS_BITMAP_CAPABILITYSET bitmapCapabilitySet; TS_ORDER_CAPABILITYSET orderCapabilitySet; TS_BITMAPCACHE_CAPABILITYSET bitmapCacheCaps; TS_COLORTABLECACHE_CAPABILITYSET colorTableCacheCapabilitySet; TS_WINDOWACTIVATION_CAPABILITYSET windowActivationCapabilitySet; TS_CONTROL_CAPABILITYSET controlCapabilitySet; TS_POINTER_CAPABILITYSET pointerCapabilitySet; TS_SHARE_CAPABILITYSET shareCapabilitySet; TS_INPUT_CAPABILITYSET inputCapabilitySet; TS_SOUND_CAPABILITYSET soundCapabilitySet; TS_FONT_CAPABILITYSET fontCapabilitySet; TS_GLYPHCACHE_CAPABILITYSET glyphCacheCapabilitySet; TS_BRUSH_CAPABILITYSET brushCapabilitySet; TS_OFFSCREEN_CAPABILITYSET offscreenCapabilitySet; TS_VIRTUALCHANNEL_CAPABILITYSET virtualchannelCapabilitySet; #ifdef DRAW_NINEGRID TS_DRAW_NINEGRID_CAPABILITYSET drawNineGridCapabilitySet; #endif #ifdef DRAW_GDIPLUS TS_DRAW_GDIPLUS_CAPABILITYSET drawGdiplusCapabilitySet; #endif } CC_COMBINED_CAPABILITIES, DCPTR PCC_COMBINED_CAPABILITIES; /****************************************************************************/ /* FSM definitions */ /****************************************************************************/ #define CC_FSM_INPUTS 11 #define CC_FSM_STATES 11 /****************************************************************************/ /* FSM states */ /****************************************************************************/ #define CC_DISCONNECTED 0 #define CC_CONNECTPENDING 1 #define CC_WAITINGFORDEMANDACTIVE 2 #define CC_SENDINGCONFIRMACTIVE1 3 #define CC_SENDINGSYNC1 4 #define CC_SENDINGCOOPCONTROL 5 #define CC_SENDINGGRANTCONTROL CC_SENDINGCOOPCONTROL + 1 #define CC_CONNECTED CC_SENDINGCOOPCONTROL + 2 #define CC_SENDING_SHUTDOWNPDU CC_SENDINGCOOPCONTROL + 3 #define CC_SENT_SHUTDOWNPDU CC_SENDINGCOOPCONTROL + 4 #define CC_PENDING_SHUTDOWN CC_SENDINGCOOPCONTROL + 5 #ifdef DC_DEBUG static TCHAR FAR *stateString[CC_FSM_STATES] = { _T("CC_DISCONNECTED"), _T("CC_CONNECTPENDING"), _T("CC_WAITINGFORDEMANDACTIVE"), _T("CC_SENDINGCONFIRMACTIVE1"), _T("CC_SENDINGSYNC1"), _T("CC_SENDINGCOOPCONTROL"), _T("CC_SENDINGGRANTCONTROL"), _T("CC_CONNECTED"), _T("CC_SENDING_SHUTDOWPDU"), _T("CC_SENT_SHUTDOWNPDU"), _T("CC_PENDING_SHUTDOWN") }; #endif /* DEBUG */ /****************************************************************************/ /* FSM events */ /****************************************************************************/ #define CC_EVT_STARTCONNECT 0 #define CC_EVT_ONCONNECTOK 1 #define CC_EVT_ONDEMANDACTIVE 2 #define CC_EVT_SENTOK 3 #define CC_EVT_ONBUFFERAVAILABLE 4 #define CC_EVT_ONDEACTIVATEALL 5 #define CC_EVT_DISCONNECT 6 #define CC_EVT_ONDISCONNECTED 7 #define CC_EVT_SHUTDOWN 8 #define CC_EVT_ONSHUTDOWNDENIED 9 #define CC_EVT_DISCONNECT_AND_EXIT 10 #ifdef DC_DEBUG static TCHAR FAR *eventString[CC_FSM_INPUTS] = { _T("CC_EVT_STARTCONNECT"), _T("CC_EVT_ONCONNECTOK"), _T("CC_EVT_ONDEMANDACTIVE"), _T("CC_EVT_SENTOK"), _T("CC_EVT_ONBUFFERAVAILABLE"), _T("CC_EVT_ONDEACTIVATEALL"), _T("CC_EVT_DISCONNECT"), _T("CC_EVT_ONDISCONNECTED"), _T("CC_EVT_SHUTDOWN"), _T("CC_EVT_ONSHUTDOWNDENIED"), _T("CC_EVT_DISCONNECT_AND_EXIT") }; #endif /* DEBUG */ typedef struct tagCC_GLOBAL_DATA { TS_SHARECONTROLHEADER shareControlHeader; TS_SHAREDATAHEADER shareDataHeader; unsigned fsmState; unsigned packetLen; PBYTE pBuffer; // // Flag indicating we've already set the safe checksum settings // for this link. // BOOL fSafeChecksumSettingsSet; } CC_GLOBAL_DATA; class CCC { public: CCC(CObjs* objs); ~CCC(); // // API functions // void DCAPI CC_Init(); void DCAPI CC_Term(); void DCAPI CC_Event(ULONG_PTR); void DCAPI CC_Connect(PVOID, unsigned); EXPOSE_CD_NOTIFICATION_FN(CCC, CC_Connect); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CCC, CC_Event); void DCAPI CC_OnDisconnected(ULONG_PTR); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CCC, CC_OnDisconnected) void DCAPI CC_OnDemandActivePDU(PVOID, unsigned); EXPOSE_CD_NOTIFICATION_FN(CCC, CC_OnDemandActivePDU) // // Data members // public: /****************************************************************************/ /* CC_BUFSIZE is big enough for the largest packet sent by CC - which is a */ /* ConfirmActivePDU with Combined Caps and the largest legal */ /* SourceDescriptor. */ /****************************************************************************/ #define CC_BUFSIZE \ (TS_CA_NON_DATA_SIZE + TS_MAX_SOURCEDESCRIPTOR + \ sizeof(CC_COMBINED_CAPABILITIES)) /****************************************************************************/ /* Call Controller global data */ /****************************************************************************/ /****************************************************************************/ /* Structure: CC_GLOBAL_DATA */ /* */ /* Description: Data global in the Call Controller */ /****************************************************************************/ CC_GLOBAL_DATA _CC; CC_COMBINED_CAPABILITIES _ccCombinedCapabilities; // // FSM // // // Internal methods // private: /****************************************************************************/ /* Name for use as terminal descriptor */ /****************************************************************************/ #define CC_DUCATI_NAME "MSTSC" /****************************************************************************/ /* SL types */ /****************************************************************************/ #define CC_SEND_FLAGS_CONFIRM (RNS_SEC_RESET_SEQNO | \ RNS_SEC_IGNORE_SEQNO | \ RNS_SEC_ENCRYPT) #define CC_SEND_FLAGS_DATA (RNS_SEC_ENCRYPT) #define CC_SEND_FLAGS_OTHER (RNS_SEC_ENCRYPT | RNS_SEC_IGNORE_SEQNO) /****************************************************************************/ /* Call Controller internal function prototypes */ /****************************************************************************/ void DCINTERNAL CCFSMProc(unsigned, ULONG_PTR, DCUINT dataLen); void DCINTERNAL CCBuildConfirmActivePDU(); void DCINTERNAL CCBuildSyncPDU(); void DCINTERNAL CCBuildCoopControlPDU(); void DCINTERNAL CCSendPDU(unsigned, unsigned, unsigned, unsigned); void DCINTERNAL CCBuildShutdownReqPDU(); void DCINTERNAL CCBuildRequestControlPDU(); void DCINTERNAL CCBuildShareHeaders(); HRESULT DCINTERNAL CCShareStart(PTS_DEMAND_ACTIVE_PDU, DCUINT dataLen, PBOOL pfChecksumEncryptedData); void DCINTERNAL CCShareEnd(); void DCINTERNAL CCEnableShareSendCmpnts(); void DCINTERNAL CCDisableShareSendCmpnts(); void DCINTERNAL CCEnableShareRecvCmpnts(); void DCINTERNAL CCDisableShareRecvCmpnts(); void DCINTERNAL CCDisconnectShareRecvCmpnts(); #define CC_TYPE_CONFIRMACTIVE 1 #define CC_TYPE_SYNCHRONIZE 2 #define CC_TYPE_COOPCONTROL 3 #define CC_TYPE_REQUESTCONTROL 4 #define CC_TYPE_SHUTDOWNREQ 5 private: CUT* _pUt; CUI* _pUi; CSL* _pSl; CUH* _pUh; CCD* _pCd; CIH* _pIh; COR* _pOr; CFS* _pFs; CCM* _pCm; CChan* _pCChan; private: CObjs* _pClientObjects; }; #endif // _H_CC