1252 lines
55 KiB
C++
1252 lines
55 KiB
C++
//
|
||
// App Sharing Header
|
||
//
|
||
// <DCS.H> is included BEFORE the other component headers, it has common
|
||
// constants and typedefs.
|
||
// <AS.H> is included AFTER the other component headers, it has structure
|
||
// definitions that depend on the structures in the component headers.
|
||
//
|
||
|
||
#ifndef _H_AS
|
||
#define _H_AS
|
||
|
||
class ASHost;
|
||
class ASPerson;
|
||
class ASView;
|
||
class ASShare;
|
||
|
||
|
||
|
||
//
|
||
// This is the data we keep for when we HOST application. When not
|
||
// hosting, we don't have this data at all. It's a fair amount of variables,
|
||
// hence it's worth allocating/freeing. And when we support multiple
|
||
// simultaneous conferences, won't we be glad we don't have globals to
|
||
// remove?
|
||
//
|
||
|
||
class ASHost
|
||
{
|
||
public:
|
||
STRUCTURE_STAMP
|
||
|
||
//
|
||
// Pointer back to share
|
||
//
|
||
ASShare * m_pShare;
|
||
|
||
//
|
||
// Bounds rects
|
||
//
|
||
UINT m_baNumRects;
|
||
RECT m_abaRects[BA_NUM_RECTS];
|
||
|
||
//
|
||
// Active Window Coordinator
|
||
//
|
||
HWND m_awcLastActiveWindow;
|
||
UINT m_awcLastActiveMsg;
|
||
|
||
//
|
||
// Control
|
||
//
|
||
BOOL m_caRetrySendState;
|
||
BOOL m_caAutoAcceptRequests:1;
|
||
BOOL m_caTempRejectRequests:1;
|
||
|
||
//
|
||
// Cursor Manager
|
||
//
|
||
BOOL m_cmfUseColorCursorProtocol:1;
|
||
BOOL m_cmfCursorHidden:1;
|
||
BOOL m_cmfSyncPos:1;
|
||
BOOL m_cmfCursorTransformApplied:1;
|
||
POINT m_cmLastCursorPos;
|
||
CURSORDESCRIPTION m_cmLastCursorShape;
|
||
UINT m_cmNumTxCacheEntries; // CAN GO AWAY IN 4.0
|
||
PCHCACHE m_cmTxCacheHandle;
|
||
|
||
//
|
||
// Host Tracker
|
||
//
|
||
GUIEFFECTS m_hetEffects;
|
||
|
||
//
|
||
// Order Accumulator
|
||
//
|
||
UINT m_oaFlow;
|
||
|
||
//
|
||
// OE2 OUTGOING encoding
|
||
//
|
||
PARTYORDERDATA m_oe2Tx;
|
||
|
||
//
|
||
// PM OUTGOING cache, current colors
|
||
//
|
||
BOOL m_pmMustSendPalette:1;
|
||
BOOL m_pmBuggedDriver:1;
|
||
PALETTEENTRY m_apmCurrentSystemPaletteEntries[PM_NUM_8BPP_PAL_ENTRIES];
|
||
TSHR_RGBQUAD m_apmTxPaletteColors[PM_NUM_8BPP_PAL_ENTRIES];
|
||
HPALETTE m_pmTxPalette;
|
||
UINT m_pmNumTxCacheEntries; // CAN GO AWAY IN 4.0
|
||
PCHCACHE m_pmTxCacheHandle;
|
||
PCOLORTABLECACHE m_pmNextTxCacheEntry;
|
||
COLORTABLECACHE m_apmTxCache[TSHR_PM_CACHE_ENTRIES];
|
||
TSHR_RGBQUAD m_apmDDGreyRGB[PM_GREY_COUNT];
|
||
|
||
//
|
||
// Send bitmap cache
|
||
//
|
||
SBC_ORDER_INFO m_sbcOrderInfo;
|
||
SBC_TILE_WORK_INFO m_asbcWorkInfo[SBC_NUM_TILE_SIZES];
|
||
BMC_DIB_CACHE m_asbcBmpCaches[NUM_BMP_CACHES];
|
||
SBC_SHM_CACHE_INFO m_asbcCacheInfo[NUM_BMP_CACHES];
|
||
LPSBC_FASTPATH m_sbcFastPath;
|
||
|
||
|
||
//
|
||
// Screen data
|
||
//
|
||
RECT m_sdgPendingRect;
|
||
BOOL m_sdgRectIsPending:1;
|
||
UINT m_sdgcLossy;
|
||
RECT m_asdgLossyRect[BA_NUM_RECTS];
|
||
|
||
//
|
||
// Save bits
|
||
//
|
||
DWORD m_ssiSaveBitmapSize; // Can go away in 4.0
|
||
|
||
//
|
||
// Shared window list
|
||
//
|
||
UINT m_swlCurrentDesktop;
|
||
char m_aswlOurDesktopName[SWL_DESKTOPNAME_MAX];
|
||
|
||
//
|
||
// Updates
|
||
//
|
||
BOOL m_upBackPressure;
|
||
BOOL m_upfUseSmallPackets:1;
|
||
BOOL m_upfSyncTokenRequired:1;
|
||
DWORD m_upLastSDTime;
|
||
DWORD m_upLastOrdersTime;
|
||
DWORD m_upLastTrialTime;
|
||
DWORD m_upDeltaSD;
|
||
DWORD m_upSDAccum;
|
||
DWORD m_upDeltaOrders;
|
||
DWORD m_upOrdersAccum;
|
||
|
||
UINT m_usrSendingBPP;
|
||
HDC m_usrWorkDC;
|
||
|
||
public:
|
||
|
||
//
|
||
// Local host starting
|
||
//
|
||
BOOL HET_HostStarting(ASShare *);
|
||
|
||
BOOL CM_HostStarting(void);
|
||
BOOL OE2_HostStarting(void);
|
||
BOOL PM_HostStarting(void);
|
||
BOOL SBC_HostStarting(void);
|
||
BOOL SSI_HostStarting(void);
|
||
BOOL SWL_HostStarting(void);
|
||
BOOL VIEW_HostStarting(void);
|
||
BOOL USR_HostStarting(void);
|
||
|
||
//
|
||
// Local host ended
|
||
//
|
||
void HET_HostEnded(void);
|
||
|
||
void CA_HostEnded(void);
|
||
void CM_HostEnded(void);
|
||
void OE2_HostEnded(void);
|
||
void PM_HostEnded(void);
|
||
void SBC_HostEnded(void);
|
||
void USR_HostEnded(void);
|
||
|
||
//
|
||
// Syncing, when already hosting and somebody else joins
|
||
//
|
||
void HET_SyncCommon(void);
|
||
|
||
void HET_SyncAlreadyHosting(void);
|
||
void CA_SyncAlreadyHosting(void);
|
||
|
||
void AWC_SyncOutgoing(void);
|
||
void BA_SyncOutgoing(void);
|
||
void CM_SyncOutgoing(void);
|
||
void OA_SyncOutgoing(void);
|
||
void OE2_SyncOutgoing(void);
|
||
void PM_SyncOutgoing(void);
|
||
void SBC_SyncOutgoing(void);
|
||
void SSI_SyncOutgoing(void);
|
||
|
||
//
|
||
// Periodic
|
||
//
|
||
void AWC_Periodic(void);
|
||
void CA_Periodic(void);
|
||
void CM_Periodic(void);
|
||
void SWL_Periodic(void);
|
||
void UP_Periodic(UINT currentTime);
|
||
|
||
|
||
//
|
||
// Component routines - public
|
||
//
|
||
|
||
void AWC_ActivateWindow(HWND hwnd);
|
||
|
||
void BA_AddRect(LPRECT pRect);
|
||
void BA_CopyBounds(LPRECT pRects, LPUINT pNumRects, BOOL fReset);
|
||
void BA_FetchBounds(void);
|
||
UINT BA_QueryAccumulation(void);
|
||
void BA_ReturnBounds(void);
|
||
|
||
UINT CH_CacheData(PCHCACHE pCache, LPBYTE pData,
|
||
UINT cbSize, UINT evictionCategory);
|
||
void CH_ClearCache(PCHCACHE pCache );
|
||
BOOL CH_CreateCache(PCHCACHE * ppCache, UINT cEntries,
|
||
UINT cEvictionCategories, UINT cbNotHashed,
|
||
PFNCACHEDEL pfnCacheDel);
|
||
void CH_DestroyCache(PCHCACHE hCache);
|
||
void CH_RemoveCacheEntry(PCHCACHE pCache, UINT iCacheEntry);
|
||
BOOL CH_SearchAndCacheData(PCHCACHE pCache, LPBYTE pData,
|
||
UINT cbData, UINT evictionCategory, UINT* piEntry);
|
||
BOOL CH_SearchCache(PCHCACHE pCache, LPBYTE pData,
|
||
UINT cbData, UINT evictionCategory, UINT* piEntry);
|
||
void CH_TouchCacheEntry(PCHCACHE pCache, UINT iCacheEntry);
|
||
|
||
void CM_ApplicationMovedCursor(void);
|
||
void CM_Controlled(ASPerson * pasControlledBy);
|
||
void CM_MaybeSendCursorMovedPacket(void);
|
||
|
||
void HET_RepaintAll(void);
|
||
|
||
void OA_FlowControl(UINT newBufferSize);
|
||
LPINT_ORDER OA_GetFirstListOrder(void);
|
||
UINT OA_GetTotalOrderListBytes(void);
|
||
void OA_LocalHostReset(void);
|
||
UINT OA_QueryOrderAccum(void);
|
||
LPINT_ORDER OA_RemoveListOrder(LPINT_ORDER pCondemnedOrder);
|
||
void OA_ResetOrderList(void);
|
||
|
||
BOOL OE_RectIntersectsSDA(LPRECT lpRect);
|
||
|
||
TSHR_UINT16 OE2_EncodeOrder(LPINT_ORDER pIntOrder,
|
||
LPVOID pBuffer, TSHR_UINT16 cbBufferSize);
|
||
BOOL OE2_UseFont(LPSTR pName, TSHR_UINT16 facelength,
|
||
TSHR_UINT16 CodePage, TSHR_UINT16 MaxHeight,
|
||
TSHR_UINT16 Height, TSHR_UINT16 Width,
|
||
TSHR_UINT16 Weight, TSHR_UINT16 flags);
|
||
|
||
void PM_AdjustColorsForBuggedDisplayDrivers(LPTSHR_RGBQUAD pColors,
|
||
UINT cColors);
|
||
BOOL PM_CacheTxColorTable(LPUINT pIndex, LPBOOL pNewEntry,
|
||
UINT cColors, LPTSHR_RGBQUAD pColors);
|
||
HPALETTE PM_GetLocalPalette(void);
|
||
void PM_GetSystemPaletteEntries(LPTSHR_RGBQUAD pColors);
|
||
BOOL PM_MaybeSendPalettePacket(void);
|
||
|
||
void SBC_CacheCleared(void);
|
||
void SBC_CacheEntryRemoved(UINT cache, UINT cacheIndex);
|
||
UINT SBC_CopyPrivateOrderData(LPBYTE pDst,
|
||
LPCOM_ORDER pOrder, UINT cbFree);
|
||
void SBC_OrderSentNotification(LPINT_ORDER pOrder);
|
||
void SBC_PMCacheEntryRemoved(UINT cacheIndex);
|
||
void SBC_ProcessInternalOrder(LPINT_ORDER pOrder);
|
||
BOOL SBC_ProcessMemBltOrder(LPINT_ORDER pOrder,
|
||
LPINT_ORDER * ppNextOrder);
|
||
void SBC_RecreateSendCache(UINT cache, UINT newEntries,
|
||
UINT newCellSize);
|
||
|
||
void SDG_SendScreenDataArea(LPBOOL pBackPressure, UINT * pcPackets);
|
||
|
||
BOOL SWL_IsOurDesktopActive(void);
|
||
void SWL_UpdateCurrentDesktop(void);
|
||
|
||
void UP_FlowControl(UINT newSize);
|
||
BOOL UP_MaybeSendSyncToken(void);
|
||
|
||
protected:
|
||
void CHAvlBalanceTree(PCHCACHE, PCHENTRY);
|
||
void CHAvlDelete(PCHCACHE, PCHENTRY, UINT);
|
||
PCHENTRY CHAvlFind(PCHCACHE, UINT, UINT);
|
||
PCHENTRY CHAvlFindEqual(PCHCACHE, PCHENTRY);
|
||
void CHAvlInsert(PCHCACHE, PCHENTRY);
|
||
LPBYTE CHAvlNext(PCHENTRY);
|
||
LPBYTE CHAvlPrev(PCHENTRY);
|
||
void CHAvlRebalance(PCHENTRY *);
|
||
void CHAvlRotateLeft(PCHENTRY *);
|
||
void CHAvlRotateRight(PCHENTRY *);
|
||
void CHAvlSwapLeftmost(PCHCACHE, PCHENTRY, PCHENTRY);
|
||
void CHAvlSwapRightmost(PCHCACHE, PCHENTRY, PCHENTRY);
|
||
UINT CHCheckSum(LPBYTE pData, UINT cbDataSize);
|
||
int CHCompare(UINT key, UINT cbSize, PCHENTRY pEntry);
|
||
UINT CHEvictCacheEntry(PCHCACHE pCache, UINT iEntry, UINT evictionCategory);
|
||
UINT CHEvictLRUCacheEntry(PCHCACHE pCache, UINT evictionCategory, UINT evictionCount);
|
||
BOOL CHFindFreeCacheEntry(PCHCACHE pCache, UINT* piEntry, UINT* pEvictionCount);
|
||
void CHInitEntry(PCHENTRY);
|
||
void CHRemoveEntry(PCHCACHE pCache, UINT iCacheEntry);
|
||
UINT CHTreeSearch(PCHCACHE pCache, UINT checksum, UINT cbDataSize, LPBYTE pData);
|
||
void CHUpdateMRUList(PCHCACHE pCache, UINT iEntry, UINT evictionCategory);
|
||
|
||
BOOL CMGetColorCursorDetails( LPCM_SHAPE pCursor,
|
||
LPTSHR_UINT16 pcxWidth, LPTSHR_UINT16 pcyHeight,
|
||
LPTSHR_UINT16 pxHotSpot, LPTSHR_UINT16 pyHotSpot,
|
||
LPBYTE pANDMask, LPTSHR_UINT16 pcbANDMask,
|
||
LPBYTE pXORBitmap, LPTSHR_UINT16 pcbXORBitmap );
|
||
BOOL CMGetCursorTagInfo(LPCSTR szTagName);
|
||
void CMRemoveCursorTransform(void);
|
||
BOOL CMSetCursorTransform(LPBYTE pANDMask, LPBITMAPINFO pXORDIB);
|
||
BOOL CMSendBitmapCursor(void);
|
||
BOOL CMSendCachedCursor(UINT iCacheEntry);
|
||
BOOL CMSendColorBitmapCursor(LPCM_SHAPE pCursor,
|
||
UINT iCacheEntry);
|
||
BOOL CMSendCursorShape(LPCM_SHAPE lpCursorShape,
|
||
UINT cbCursorDataSize);
|
||
BOOL CMSendMonoBitmapCursor(LPCM_SHAPE pCursor);
|
||
BOOL CMSendSystemCursor(UINT cursorIDC);
|
||
|
||
void OAFreeAllOrders(LPOA_SHARED_DATA);
|
||
|
||
void OE2EncodeBounds(LPBYTE * ppNextFreeSpace,
|
||
LPTSHR_RECT16 pRect);
|
||
|
||
void PMGetGrays(void);
|
||
BOOL PMSendPalettePacket(LPTSHR_RGBQUAD pColorTable,
|
||
UINT numColors);
|
||
BOOL PMUpdateSystemPaletteColors(void);
|
||
BOOL PMUpdateTxPaletteColors(void);
|
||
|
||
void SBCAddToFastPath(UINT_PTR majorInfo, UINT minorInfo,
|
||
UINT_PTR majorPalette, UINT minorPalette, int srcX,
|
||
int srcY, UINT width, UINT height, UINT cache,
|
||
UINT cacheIndex, UINT colorCacheIndex);
|
||
BOOL SBCCacheBits(LPINT_ORDER pOrder, UINT cbDst,
|
||
LPBYTE pDIBits, UINT bitmapWidth,
|
||
UINT fixedBitmapWidth, UINT bitmapHeight,
|
||
UINT numBytes, UINT * pCache, UINT * pCacheIndex,
|
||
LPBOOL pIsNewEntry);
|
||
BOOL SBCCacheColorTable(LPINT_ORDER pColorTableOrder,
|
||
LPTSHR_RGBQUAD pColorTable, UINT numColors,
|
||
UINT * pCacheIndex, LPBOOL pIsNewEntry);
|
||
BOOL SBCFindInFastPath(UINT_PTR majorInfo, UINT minorInfo,
|
||
UINT_PTR majorPalette, UINT minorPalette, int srcX,
|
||
int srcY, UINT width, UINT height, UINT * pCache,
|
||
UINT * pCacheIndex, UINT * pColorCacheIndex);
|
||
void SBCFreeInternalOrders(void);
|
||
BOOL SBCGetTileData(UINT tileId, LPSBC_TILE_DATA * ppTileData,
|
||
UINT * pTileType);
|
||
void SBCInitCacheStructures(void);
|
||
BOOL SBCInitFastPath(void);
|
||
BOOL SBCInitInternalOrders(void);
|
||
BOOL SBCSelectCache(UINT bitsSize, UINT * pCacheIndex);
|
||
|
||
BOOL SDGSmallBltToNetwork(LPRECT pRect);
|
||
BOOL SDGSplitBltToNetwork(LPRECT pRect, UINT * pcPacket);
|
||
|
||
UINT UPFetchOrdersIntoBuffer(LPBYTE pBuffer,
|
||
LPTSHR_UINT16 pcOrders, LPUINT pcbBufferSize);
|
||
BOOL UPSendOrders(UINT *);
|
||
UINT UPSendUpdates(void);
|
||
|
||
};
|
||
|
||
|
||
void PMCacheCallback(ASHost* pHost, PCHCACHE pCache, UINT iEntry, LPBYTE pData);
|
||
void SBCCacheCallback(ASHost* pHost, PCHCACHE pCache, UINT iEntry, LPBYTE pData);
|
||
|
||
|
||
|
||
|
||
//
|
||
// This is the per-person data we keep to VIEW a host. When this person
|
||
// starts to host, we allocate this structure, and then subblocks as
|
||
// necessary like caches. When this person stops hosting, we free it
|
||
// after freeing the objects contained within.
|
||
//
|
||
// NOTE that for some whacky 2.x compatibility, some things that should
|
||
// be in the ASView structure are actually kept in ASPerson because
|
||
// the information contained within has to stay around when that person
|
||
// isn't hosting. With 3.0 hosts that's not the case. So when 2.x
|
||
// compatibility goes away, move OD2 PM RBC fields here also.
|
||
//
|
||
|
||
class ASView
|
||
{
|
||
public:
|
||
STRUCTURE_STAMP
|
||
|
||
// DS vars
|
||
// For NM 2.x machines only, the offset if their desktop is scrolled over
|
||
POINT m_dsScreenOrigin;
|
||
|
||
// OD vars, for playback of orders from this remote host
|
||
HRGN m_odInvalRgnOrder;
|
||
HRGN m_odInvalRgnTotal;
|
||
UINT m_odInvalTotal;
|
||
|
||
COLORREF m_odLastBkColor;
|
||
COLORREF m_odLastTextColor;
|
||
int m_odLastBkMode;
|
||
int m_odLastROP2;
|
||
UINT m_odLastFillMode;
|
||
UINT m_odLastArcDirection;
|
||
UINT m_odLastPenStyle;
|
||
UINT m_odLastPenWidth;
|
||
COLORREF m_odLastPenColor;
|
||
COLORREF m_odLastForeColor;
|
||
int m_odLastBrushOrgX;
|
||
int m_odLastBrushOrgY;
|
||
COLORREF m_odLastBrushBkColor;
|
||
COLORREF m_odLastBrushTextColor;
|
||
HBITMAP m_odLastBrushPattern;
|
||
UINT m_odLastLogBrushStyle;
|
||
UINT m_odLastLogBrushHatch;
|
||
TSHR_COLOR m_odLastLogBrushColor;
|
||
BYTE m_odLastLogBrushExtra[7];
|
||
int m_odLastCharExtra;
|
||
int m_odLastJustExtra;
|
||
int m_odLastJustCount;
|
||
HFONT m_odLastFontID;
|
||
UINT m_odLastFontCodePage;
|
||
UINT m_odLastFontWidth;
|
||
UINT m_odLastFontHeight;
|
||
UINT m_odLastFontWeight;
|
||
UINT m_odLastFontFlags;
|
||
UINT m_odLastFontFaceLen;
|
||
BYTE m_odLastFaceName[FH_FACESIZE];
|
||
UINT m_odLastBaselineOffset;
|
||
COLORREF m_odLastVGAColor[OD_NUM_COLORS];
|
||
TSHR_COLOR m_odLastVGAResult[OD_NUM_COLORS];
|
||
BOOL m_odRectReset;
|
||
int m_odLastLeft;
|
||
int m_odLastTop;
|
||
int m_odLastRight;
|
||
int m_odLastBottom;
|
||
|
||
// SSI vars
|
||
HDC m_ssiDC;
|
||
HBITMAP m_ssiBitmap; // Bitmap handle
|
||
HBITMAP m_ssiOldBitmap;
|
||
int m_ssiBitmapHeight;
|
||
|
||
// USR vars
|
||
HDC m_usrDC;
|
||
HDC m_usrWorkDC;
|
||
HBITMAP m_usrBitmap;
|
||
HBITMAP m_usrOldBitmap;
|
||
|
||
// VIEW vars
|
||
HWND m_viewFrame; // Frame
|
||
HWND m_viewClient; // Host view
|
||
HWND m_viewStatusBar; // Status bar
|
||
UINT m_viewStatus; // Current status
|
||
HMENU m_viewMenuBar; // Menu bar
|
||
RECT m_viewSavedWindowRect; // When full screen, old pos
|
||
HWND m_viewInformDlg; // Notification message up
|
||
UINT m_viewInformMsg; // Informational message
|
||
|
||
BOOL m_viewFocus:1; // Key strokes are going to this
|
||
BOOL m_viewInMenuMode:1; // In menu mode
|
||
BOOL m_viewFullScreen:1; // Full screen UI
|
||
BOOL m_viewStatusBarOn:1;
|
||
BOOL m_viewSavedStatusBarOn:1;
|
||
BOOL m_viewFullScreenExitTrack:1;
|
||
BOOL m_viewFullScreenExitMove:1;
|
||
|
||
POINT m_viewSavedPos;
|
||
POINT m_viewFullScreenExitStart;
|
||
|
||
UINT m_viewMouseFlags; // For capture
|
||
POINT m_viewMouse; // Mouse pos
|
||
BOOL m_viewMouseOutside; // Mouse is down, outside client
|
||
int m_viewMouseWheelDelta; // Intellimouse wheel insanity
|
||
|
||
//
|
||
// These are kept always in the view's client coords. When the view
|
||
// scrolls over, the shared and obscured regions are adjusted too.
|
||
// When a new SWL packet for the host comes in, these regions are
|
||
// saved accounting for scrolling too.
|
||
//
|
||
HRGN m_viewSharedRgn; // Shared area, not obscured
|
||
HRGN m_viewObscuredRgn; // Shared area, obscured
|
||
HRGN m_viewExtentRgn;
|
||
HRGN m_viewScreenRgn;
|
||
HRGN m_viewPaintRgn;
|
||
HRGN m_viewScratchRgn;
|
||
|
||
POINT m_viewPos; // View scroll pos
|
||
POINT m_viewPage; // View page size
|
||
POINT m_viewPgSize; // Page scroll inc
|
||
POINT m_viewLnSize; // Line scroll inc
|
||
};
|
||
|
||
|
||
|
||
|
||
//
|
||
// This is the per-person data we keep for each person in a conference.
|
||
// We dynamically allocate everybody but ourself (the local dude).
|
||
//
|
||
|
||
|
||
class ASPerson
|
||
{
|
||
public:
|
||
STRUCTURE_STAMP
|
||
|
||
ASPerson * pasNext;
|
||
|
||
// VIEW vars (allocated when this person is hosting that we use to VIEW them)
|
||
ASView * m_pView;
|
||
|
||
// SC vars
|
||
UINT mcsID; // MCS user_id
|
||
char scName[TSHR_MAX_PERSON_NAME_LEN]; // Name
|
||
BYTE scSyncSendStatus[SC_STREAM_COUNT];
|
||
BYTE scSyncRecStatus[SC_STREAM_COUNT];
|
||
|
||
//
|
||
// AWC vars
|
||
// When 2.x compat goes away, move these to AS_VIEW
|
||
//
|
||
TSHR_UINT32 awcActiveWinID;
|
||
|
||
// CA vars
|
||
BOOL m_caAllowControl;
|
||
UINT m_caControlID; // ONLY NODE WE ARE CONTROLLING/CONTROLLED BY
|
||
ASPerson * m_caControlledBy;
|
||
ASPerson * m_caInControlOf;
|
||
|
||
//
|
||
// CM vars
|
||
// When 2.x compat goes away, move most of these to AS_VIEW
|
||
//
|
||
POINT cmPos; // Position of the remote cursor, in his screen coords
|
||
POINT cmHotSpot; // The remote cursor hotspot
|
||
BOOL cmShadowOff;
|
||
HCURSOR cmhRemoteCursor;
|
||
UINT ccmRxCache; // # of entries in cache
|
||
PCACHEDCURSOR acmRxCache; // Cached cursor array
|
||
|
||
// CPC vars
|
||
CPCALLCAPS cpcCaps;
|
||
|
||
// DCS vars
|
||
PGDC_DICTIONARY adcsDict; // POINTER
|
||
|
||
// HET vars
|
||
int hetCount;
|
||
|
||
// OE vars
|
||
UINT oecFonts;
|
||
POEREMOTEFONT poeFontInfo;
|
||
|
||
//
|
||
// NOTE:
|
||
// These are here and not in the HOST data for 2.x compat. 2.x systems
|
||
// don't reset outgoing info if they stay in a share while stopping/
|
||
// restarting hosting. 3.0 systems do (look in HET_HostStarting()).
|
||
// So we must keep the old gunky cache/decode data around for backlevel
|
||
// systems. Therefore we allocate it dynamically still.
|
||
//
|
||
|
||
// OD2 vars
|
||
PPARTYORDERDATA od2Party;
|
||
|
||
// PM vars
|
||
HPALETTE pmPalette;
|
||
UINT pmcColorTable;
|
||
PCOLORTABLECACHE apmColorTable;
|
||
|
||
// RBC vars
|
||
PRBC_HOST_INFO prbcHost;
|
||
|
||
// VIEW vars
|
||
// NOTE: because of bugs in 2.x VD calcs, this is kept around while
|
||
// the person is in the share, whether they are hosting or not.
|
||
POINT viewExtent; // View extent (may be > usrScreenSize for 2.x dudes)
|
||
};
|
||
|
||
|
||
|
||
//
|
||
// Allocated when in a share
|
||
//
|
||
|
||
class ASShare
|
||
{
|
||
public:
|
||
STRUCTURE_STAMP
|
||
|
||
ASHost * m_pHost;
|
||
ASPerson * m_pasLocal; // People list, starting with local person
|
||
|
||
//
|
||
// Bitmap Compressor/Decompressor
|
||
//
|
||
MATCH * m_amatch;
|
||
LPBYTE m_abNormal;
|
||
LPBYTE m_abXor;
|
||
|
||
//
|
||
// Control Arbitrator
|
||
//
|
||
char m_caToggle;
|
||
char m_caPad1;
|
||
short m_caPad2;
|
||
BASEDLIST m_caQueuedMsgs;
|
||
ASPerson * m_caWaitingForReplyFrom;
|
||
UINT m_caWaitingForReplyMsg;
|
||
|
||
HWND m_caQueryDlg;
|
||
CA30PENDING m_caQuery;
|
||
|
||
//
|
||
// Cursor
|
||
//
|
||
UINT m_cmCursorWidth;
|
||
UINT m_cmCursorHeight;
|
||
HCURSOR m_cmArrowCursor;
|
||
POINT m_cmArrowCursorHotSpot;
|
||
HBRUSH m_cmHatchBrush;
|
||
HFONT m_cmCursorTagFont;
|
||
|
||
DWORD m_dcsLastScheduleTime;
|
||
DWORD m_dcsLastFastMiscTime;
|
||
DWORD m_dcsLastIMTime;
|
||
BOOL m_dcsLargePacketCompressionOnly;
|
||
|
||
//
|
||
// PKZIP
|
||
//
|
||
BYTE m_agdcWorkBuf[GDC_WORKBUF_SIZE];
|
||
|
||
//
|
||
// Fonts
|
||
//
|
||
BOOL m_fhLocalInfoSent;
|
||
|
||
//
|
||
// Hosting
|
||
//
|
||
UINT m_hetHostCount;
|
||
BOOL m_hetRetrySendState;
|
||
BOOL m_hetViewers;
|
||
|
||
//
|
||
// Input Manager
|
||
//
|
||
|
||
// GLOBAL (or costly to calc/load and undo repeatedly)
|
||
WORD m_imScanVKLShift;
|
||
WORD m_imScanVKRShift;
|
||
HINSTANCE m_imImmLib;
|
||
IMMGVK m_imImmGVK;
|
||
|
||
// IN CONTROL
|
||
BOOL m_imfInControlEventIsPending:1;
|
||
BOOL m_imfInControlCtrlDown:1;
|
||
BOOL m_imfInControlShiftDown:1;
|
||
BOOL m_imfInControlMenuDown:1;
|
||
BOOL m_imfInControlCapsLock:1;
|
||
BOOL m_imfInControlNumLock:1;
|
||
BOOL m_imfInControlScrollLock:1;
|
||
BOOL m_imfInControlConsumeMenuUp:1;
|
||
BOOL m_imfInControlConsumeEscapeUp:1;
|
||
BOOL m_imfInControlNewEvent:1;
|
||
|
||
IMEVENT m_imInControlPendingEvent;
|
||
IMEVENTQ m_imInControlEventQ;
|
||
BYTE m_aimInControlKeyStates[256];
|
||
int m_imInControlMouseDownCount;
|
||
DWORD m_imInControlMouseDownTime;
|
||
UINT m_imInControlMouseWithhold;
|
||
DWORD m_imInControlMouseSpoilRate;
|
||
UINT m_imInControlNumEventsPending;
|
||
UINT m_imInControlNumEventsReturned;
|
||
UINT m_aimInControlEventsToReturn[15];
|
||
UINT m_imInControlNextHotKeyEntry;
|
||
BYTE m_aimInControlHotKeyArray[4];
|
||
UINT m_imInControlNumDeadKeysDown;
|
||
UINT m_imInControlNumDeadKeys;
|
||
BYTE m_aimInControlDeadKeys[IM_MAX_DEAD_KEYS];
|
||
|
||
// CONTROLLED (only when hosting!)
|
||
BOOL m_imfControlledMouseButtonsReversed:1;
|
||
BOOL m_imfControlledMouseClipped:1;
|
||
BOOL m_imfControlledPaceInjection:1;
|
||
BOOL m_imfControlledNewEvent:1;
|
||
UINT m_imControlledNumEventsPending;
|
||
UINT m_imControlledNumEventsReturned;
|
||
UINT m_aimControlledEventsToReturn[15];
|
||
UINT m_imControlledVKToReplay;
|
||
IMEVENTQ m_imControlledEventQ;
|
||
IMOSQ m_imControlledOSQ;
|
||
BYTE m_aimControlledControllerKeyStates[256];
|
||
BYTE m_aimControlledKeyStates[256];
|
||
BYTE m_aimControlledSavedKeyStates[256];
|
||
DWORD m_imControlledLastLowLevelMouseEventTime;
|
||
DWORD m_imControlledLastMouseRemoteTime;
|
||
DWORD m_imControlledLastMouseLocalTime;
|
||
DWORD m_imControlledLastIncompleteConversion;
|
||
DWORD m_imControlledMouseBacklog;
|
||
POINT m_imControlledLastMousePos;
|
||
|
||
//
|
||
// Order Encoder
|
||
//
|
||
BOOL m_oefSendOrders:1;
|
||
BOOL m_oefTextEnabled:1;
|
||
BOOL m_oefOE2EncodingOn:1;
|
||
BOOL m_oefOE2Negotiable:1;
|
||
BOOL m_oefBaseOE:1;
|
||
BOOL m_oefAlignedOE:1;
|
||
BYTE m_aoeOrderSupported[ORD_NUM_INTERNAL_ORDERS];
|
||
PROTCAPS_ORDERS m_oeCombinedOrderCaps;
|
||
UINT m_oeOE2Flag;
|
||
|
||
//
|
||
// Share Controller
|
||
//
|
||
BOOL m_scfViewSelf:1;
|
||
#ifdef _DEBUG
|
||
BOOL m_scfInSync:1;
|
||
#endif // _DEBUG
|
||
UINT m_scShareVersion;
|
||
int m_ascSynced[SC_STREAM_COUNT];
|
||
LPBYTE m_ascTmpBuffer;
|
||
|
||
POINT m_viewVDSize;
|
||
int m_viewEdgeCX;
|
||
int m_viewEdgeCY;
|
||
HBRUSH m_viewObscuredBrush;
|
||
HICON m_viewFullScreenExitIcon;
|
||
int m_viewFullScreenCX;
|
||
int m_viewFullScreenCY;
|
||
int m_viewItemCX;
|
||
int m_viewItemCY;
|
||
int m_viewItemScrollCX;
|
||
int m_viewItemScrollCY;
|
||
int m_viewStatusBarCY;
|
||
HCURSOR m_viewNotInControl;
|
||
UINT m_viewMouseWheelScrollLines;
|
||
|
||
HBITMAP m_usrBmp16;
|
||
HBITMAP m_usrBmp32;
|
||
HBITMAP m_usrBmp48;
|
||
HBITMAP m_usrBmp64;
|
||
HBITMAP m_usrBmp80;
|
||
HBITMAP m_usrBmp96;
|
||
HBITMAP m_usrBmp112;
|
||
HBITMAP m_usrBmp128;
|
||
HBITMAP m_usrBmp256;
|
||
HBITMAP m_usrBmp1024;
|
||
LPBYTE m_usrPBitmapBuffer;
|
||
BOOL m_usrHatchBitmaps;
|
||
BOOL m_usrHatchScreenData;
|
||
int m_usrHatchColor;
|
||
|
||
public:
|
||
#ifdef _DEBUG
|
||
void ValidatePerson(ASPerson * pasPerson);
|
||
void ValidateView(ASPerson * pasPerson);
|
||
#else
|
||
__inline void ValidatePerson(ASPerson * pasPerson) {}
|
||
__inline void ValidateView(ASPerson * pasPerson) {}
|
||
#endif // _DEBUG
|
||
|
||
|
||
//
|
||
// Share init
|
||
//
|
||
BOOL SC_ShareStarting(void);
|
||
|
||
BOOL BCD_ShareStarting(void);
|
||
BOOL CM_ShareStarting(void);
|
||
BOOL IM_ShareStarting(void);
|
||
BOOL VIEW_ShareStarting(void);
|
||
BOOL USR_ShareStarting(void);
|
||
|
||
//
|
||
// Share term
|
||
//
|
||
void SC_ShareEnded(void);
|
||
|
||
void BCD_ShareEnded(void);
|
||
void CM_ShareEnded(void);
|
||
void IM_ShareEnded(void);
|
||
void VIEW_ShareEnded(void);
|
||
void USR_ShareEnded(void);
|
||
|
||
//
|
||
// Member joining share
|
||
//
|
||
BOOL SC_PartyAdded(UINT mcsID, LPSTR szName, UINT cbCaps, LPVOID pCaps);
|
||
ASPerson * SC_PartyJoiningShare(UINT mcsID, LPSTR szName, UINT cbCaps, LPVOID pCaps);
|
||
BOOL CM_PartyJoiningShare(ASPerson * pasPerson);
|
||
BOOL CPC_PartyJoiningShare(ASPerson * pasPerson, UINT cbCaps, void* pCapsData);
|
||
BOOL DCS_PartyJoiningShare(ASPerson * pasPerson);
|
||
BOOL HET_PartyJoiningShare(ASPerson * pasPerson);
|
||
|
||
//
|
||
// Member leaving share
|
||
//
|
||
void SC_PartyDeleted(UINT mcsID);
|
||
void SC_PartyLeftShare(UINT mcsID);
|
||
void CA_PartyLeftShare(ASPerson * pasPerson);
|
||
void CM_PartyLeftShare(ASPerson * pasPerson);
|
||
void DCS_PartyLeftShare(ASPerson * pasPerson);
|
||
void HET_PartyLeftShare(ASPerson * pasPerson);
|
||
void OD2_PartyLeftShare(ASPerson * pasPerson);
|
||
void OE_PartyLeftShare(ASPerson * pasPerson);
|
||
void PM_PartyLeftShare(ASPerson * pasPerson);
|
||
void RBC_PartyLeftShare(ASPerson * pasPerson);
|
||
void VIEW_PartyLeftShare(ASPerson * pasPerson);
|
||
|
||
|
||
//
|
||
// Recalc caps after somebody joined or left
|
||
//
|
||
void SC_RecalcCaps(BOOL fJoiner);
|
||
|
||
void CM_RecalcCaps(BOOL fJoiner);
|
||
void DCS_RecalcCaps(BOOL fJoiner);
|
||
void OE_RecalcCaps(BOOL fJoiner);
|
||
void PM_RecalcCaps(BOOL fJoiner);
|
||
void SBC_RecalcCaps(BOOL fJoiner);
|
||
void SSI_RecalcCaps(BOOL fJoiner);
|
||
void USR_RecalcCaps(BOOL fJoiner);
|
||
|
||
|
||
//
|
||
// Syncing due to new member joined or reset
|
||
//
|
||
void DCS_SyncOutgoing(void);
|
||
void IM_SyncOutgoing(void);
|
||
void OD2_SyncIncoming(ASPerson * pasPerson);
|
||
void OE_SyncOutgoing(void);
|
||
|
||
|
||
//
|
||
// Starting host view
|
||
//
|
||
BOOL HET_ViewStarting(ASPerson * pasPerson);
|
||
|
||
BOOL CA_ViewStarting(ASPerson * pasPerson);
|
||
BOOL CM_ViewStarting(ASPerson * pasPerson);
|
||
BOOL OD_ViewStarting(ASPerson * pasPerson);
|
||
BOOL OD2_ViewStarting(ASPerson * pasPerson);
|
||
BOOL PM_ViewStarting(ASPerson * pasPErson);
|
||
BOOL RBC_ViewStarting(ASPerson * pasPerson);
|
||
BOOL SSI_ViewStarting(ASPerson * pasPerson);
|
||
BOOL VIEW_ViewStarting(ASPerson * pasPerson);
|
||
BOOL USR_ViewStarting(ASPerson * pasPerson);
|
||
|
||
|
||
//
|
||
// Stopped host view
|
||
//
|
||
void HET_ViewEnded(ASPerson * pasPerson);
|
||
|
||
void CA_ViewEnded(ASPerson * pasPerson);
|
||
void CM_ViewEnded(ASPerson * pasPerson);
|
||
void OD_ViewEnded(ASPerson * pasPerson);
|
||
void OD2_ViewEnded(ASPerson * pasPerson);
|
||
void PM_ViewEnded(ASPerson * pasPerson);
|
||
void RBC_ViewEnded(ASPerson * pasPerson);
|
||
void SSI_ViewEnded(ASPerson * pasPerson);
|
||
void VIEW_ViewEnded(ASPerson * pasPerson);
|
||
void USR_ViewEnded(ASPerson * pasPerson);
|
||
|
||
//
|
||
// Periodic processing when in share, mostly for when hosting
|
||
//
|
||
void SC_Periodic(void);
|
||
|
||
void CA_Periodic(void);
|
||
void HET_Periodic(void);
|
||
void IM_Periodic(void);
|
||
void OE_Periodic(void);
|
||
|
||
//
|
||
// Incoming packet handling
|
||
//
|
||
void SC_ReceivedPacket(PS20DATAPACKET pPacket);
|
||
void AWC_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void CA_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void CA30_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void CM_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void CPC_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void FH_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void HET_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void PM_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void OD_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void SDP_ReceivedPacket(ASPerson * pasPerson, PS20DATAPACKET pPacket);
|
||
void SWL_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
void UP_ReceivedPacket(ASPerson * pasFrom, PS20DATAPACKET pPacket);
|
||
|
||
//
|
||
// Random component routines
|
||
//
|
||
BOOL AWC_SendMsg(UINT userTo, UINT msg, UINT data1, UINT data2);
|
||
|
||
BOOL BC_CompressBitmap( LPBYTE pSrcBitmap,
|
||
LPBYTE pDstBuffer,
|
||
LPUINT pDstBufferSize,
|
||
UINT bitmapWidth,
|
||
UINT bitmapHeight,
|
||
UINT bitmapBitsPerPel,
|
||
LPBOOL pLossy);
|
||
BOOL BD_DecompressBitmap( LPBYTE pCompressedData,
|
||
LPBYTE pDstBitmap,
|
||
UINT srcDataSize,
|
||
UINT bitmapWidth,
|
||
UINT bitmapHeight,
|
||
UINT bitmapBitsPerPel );
|
||
|
||
void CA_TakeControl(ASPerson * pasHost);
|
||
void CA_CancelTakeControl(ASPerson * pasHost, BOOL fPacket);
|
||
void CA_ReleaseControl(ASPerson * pasFrom, BOOL fPacket);
|
||
void CA_PassControl(ASPerson * pasHost, ASPerson * pasViewer);
|
||
|
||
void CA_AllowControl(BOOL fAllow);
|
||
void CA_GiveControl(ASPerson * pasInvite);
|
||
void CA_CancelGiveControl(ASPerson * pasViewer, BOOL fPacket);
|
||
void CA_RevokeControl(ASPerson * pasController, BOOL fPacket);
|
||
|
||
void CA_ClearLocalState(UINT clearFlags, ASPerson * pasRemote, BOOL fPacket);
|
||
BOOL CA_QueryDlgProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
||
void CM_DrawShadowCursor(ASPerson * pasPerson, HDC hdc );
|
||
void CM_UpdateShadowCursor(ASPerson * pasPerson, BOOL fOff,
|
||
int xPosNew, int yPosNew, int xHotNew, int yHotNew);
|
||
|
||
void CPC_UpdatedCaps(PPROTCAPS pCaps);
|
||
|
||
#ifdef _DEBUG
|
||
UINT DCS_CompressAndSendPacket(UINT streamID, UINT nodeID, PS20DATAPACKET pPacket, UINT packetLength);
|
||
#else
|
||
void DCS_CompressAndSendPacket(UINT streamID, UINT nodeID, PS20DATAPACKET pPacket, UINT packetLength);
|
||
#endif // _DEBUG
|
||
void DCS_FlowControl(UINT newBufferSize);
|
||
|
||
void DCS_TakeControl(UINT gccOf);
|
||
void DCS_CancelTakeControl(UINT gccOf);
|
||
void DCS_ReleaseControl(UINT gccOf);
|
||
void DCS_PassControl(UINT gccOf, UINT gccTo);
|
||
void DCS_GiveControl(UINT gccTo);
|
||
void DCS_CancelGiveControl(UINT gccTo);
|
||
void DCS_RevokeControl(UINT gccTo);
|
||
|
||
void FH_ConvertAnyFontIDToLocal(LPCOM_ORDER pOrder, ASPerson * pasPerson);
|
||
void FH_DetermineFontSupport(void);
|
||
void FH_SendLocalFontInfo(void);
|
||
|
||
void HET_CalcViewers(ASPerson * pasLeaving);
|
||
void HET_HandleNewTopLevel(BOOL fShowing);
|
||
void HET_HandleRecountTopLevel(UINT newCount);
|
||
void HET_ShareApp(WPARAM, LPARAM);
|
||
void HET_ShareDesktop(void);
|
||
void HET_UnshareAll(void);
|
||
void HET_UnshareApp(WPARAM, LPARAM);
|
||
BOOL HET_WindowIsHosted(HWND winid);
|
||
|
||
BOOL IM_Controlled(ASPerson * pasControlledBy);
|
||
void IM_InControl(ASPerson * pasInControlOf);
|
||
void IM_OutgoingKeyboardInput(ASPerson * pasHost,
|
||
UINT vkCode, UINT keyData);
|
||
void IM_OutgoingMouseInput(ASPerson * pasHost,
|
||
LPPOINT pMousePos, UINT message, UINT extra);
|
||
void IM_ReceivedPacket(ASPerson * pasPerson, PS20DATAPACKET pPacket);
|
||
void IM_SyncOutgoingKeyboard(void);
|
||
|
||
void OD_ReplayOrder(ASPerson * pasFrom, LPCOM_ORDER pOrder, BOOL fPalRGB);
|
||
void OD_ResetRectRegion(ASPerson * pasPerson);
|
||
void OD_UpdateView(ASPerson * pasHost);
|
||
|
||
void OD2_CalculateBounds(LPCOM_ORDER pOrder, LPRECT pRect,
|
||
BOOL fDecoding, ASPerson * pasPerson);
|
||
void OD2_CalculateTextOutBounds(LPTEXTOUT_ORDER pTextOut,
|
||
LPRECT pRect, BOOL fDecoding, ASPerson * pasPerson);
|
||
LPCOM_ORDER OD2_DecodeOrder(void * pEOrder, LPUINT LengthDecoded,
|
||
ASPerson * pasPerson);
|
||
|
||
void OE_EnableText(BOOL enable);
|
||
BOOL OE_SendAsOrder(DWORD order);
|
||
|
||
BOOL PM_CacheRxColorTable(ASPerson * pasPerson,
|
||
UINT index, UINT cColors, LPTSHR_RGBQUAD pColors);
|
||
BOOL PM_CreatePalette(UINT cEntries, LPTSHR_COLOR pNewEntries,
|
||
HPALETTE* phPal );
|
||
void PM_DeletePalette(HPALETTE palette);
|
||
void PM_GetColorTable(ASPerson * pasPerson, UINT index,
|
||
UINT * pcColors, LPTSHR_RGBQUAD pColors);
|
||
|
||
HBITMAP RBC_MapCacheIDToBitmapHandle(ASPerson * pasPerson,
|
||
UINT cacheIndex, UINT entry, UINT colorTable);
|
||
void RBC_ProcessCacheOrder(ASPerson * pasPerson, LPCOM_ORDER_UA pOrder);
|
||
|
||
PS20DATAPACKET SC_AllocPkt(UINT streamID, UINT nodeID, UINT len);
|
||
ASPerson * SC_PersonAllocate(UINT mcsID, LPSTR szName);
|
||
ASPerson * SC_PersonFromNetID(MCSID mcsID);
|
||
ASPerson * SC_PersonFromGccID(UINT gccID);
|
||
void SC_PersonFree(ASPerson * pasFree);
|
||
BOOL SC_ValidateNetID(MCSID mcsID, ASPerson** pLocal);
|
||
|
||
void SDP_DrawHatchedRect( HDC surface, int x, int y, int width, int height, UINT color);
|
||
|
||
void SSI_SaveBitmap(ASPerson * pasPerson, LPSAVEBITMAP_ORDER pSaveBitmap);
|
||
|
||
BOOL VIEW_DlgProc(HWND, UINT, WPARAM, LPARAM);
|
||
LRESULT VIEW_FrameWindowProc(HWND, UINT, WPARAM, LPARAM);
|
||
LRESULT VIEW_FullScreenExitProc(HWND, UINT, WPARAM, LPARAM);
|
||
void VIEW_HostStateChange(ASPerson * pasHost);
|
||
void VIEW_InControl(ASPerson * pasRemote, BOOL fStart);
|
||
void VIEW_InvalidateRect(ASPerson * pasHost, LPRECT lprc);
|
||
void VIEW_InvalidateRgn(ASPerson * pasHost, HRGN rgnUpdated);
|
||
BOOL VIEW_IsPointShared(ASPerson * pasHost, POINT pt);
|
||
void VIEW_Message(ASPerson * pasHost, UINT ids);
|
||
void VIEW_RecalcExtent(ASPerson * pasHost);
|
||
void VIEW_RecalcVD(void);
|
||
void VIEW_ScreenChanged(ASPerson * pasPerson);
|
||
void VIEW_SetHostRegions(ASPerson * pasHost, HRGN rgnShared, HRGN rgnObscured);
|
||
void VIEW_SyncCursorPos(ASPerson * pasHost, int x, int y);
|
||
void VIEW_UpdateStatus(ASPerson * pasHost, UINT idsStatus);
|
||
LRESULT VIEW_ViewWindowProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
||
|
||
void USR_InitDIBitmapHeader(BITMAPINFOHEADER * pbh, UINT bpp);
|
||
void USR_ScreenChanged(ASPerson * pasPerson);
|
||
void USR_ScrollDesktop(ASPerson * pasPerson, int xNew, int yNew);
|
||
BOOL USR_UseFont(HDC hdc, HFONT* pHFONT,
|
||
LPTEXTMETRIC pMetrics, LPSTR pName, UINT charSet,
|
||
UINT maxHeight, UINT height, UINT width,
|
||
UINT weight, UINT flags);
|
||
|
||
|
||
protected:
|
||
void CAClearRemoteState(ASPerson * pasClear);
|
||
BOOL CAClearHostState(ASPerson * pasHost, ASPerson * pasController);
|
||
void CAStartWaiting(ASPerson * pasWait, UINT msgWait);
|
||
|
||
BOOL CAStartQuery(ASPerson * pasFrom, UINT msg, PCA30P pReq);
|
||
void CAFinishQuery(UINT result);
|
||
void CACancelQuery(ASPerson * pasFrom, BOOL fPacket);
|
||
|
||
void CAHandleRequestTakeControl(ASPerson * pasViewer, PCA_RTC_PACKET pPacket);
|
||
void CACompleteRequestTakeControl(ASPerson * pasFrom, PCA_RTC_PACKET pPacket, UINT result);
|
||
void CAHandleReplyRequestTakeControl(ASPerson * pasHost, PCA_REPLY_RTC_PACKET pPacket);
|
||
|
||
void CAHandleRequestGiveControl(ASPerson * pasHost, PCA_RGC_PACKET pPacket);
|
||
void CACompleteRequestGiveControl(ASPerson * pasFrom, PCA_RGC_PACKET pPacket, UINT result);
|
||
void CAHandleReplyRequestGiveControl(ASPerson * pasViewer, PCA_REPLY_RGC_PACKET pPacket);
|
||
|
||
void CAHandlePreferPassControl(ASPerson * pasController, PCA_PPC_PACKET pPacket);
|
||
void CACompletePreferPassControl(ASPerson * pasViewer, UINT mcsOrg, PCA_PPC_PACKET pPacket, UINT result);
|
||
|
||
void CAHandleInformReleasedControl(ASPerson * pasController, PCA_INFORM_PACKET pPacket);
|
||
void CAHandleInformRevokedControl(ASPerson * pasHost, PCA_INFORM_PACKET pPacket);
|
||
|
||
void CAHandleNewState(ASPerson * pasHost, PCANOTPACKET pPacket);
|
||
void CAStartControlled(ASPerson * pasInControl, UINT controlID);
|
||
void CAStopControlled(void);
|
||
void CAStartInControl(ASPerson * pasControlled, UINT controlID);
|
||
void CAStopInControl(void);
|
||
|
||
BOOL CAFlushOutgoingPackets();
|
||
void CALangToggle(BOOL);
|
||
UINT CANewRequestID(void);
|
||
BOOL CAQueueSendPacket(UINT destID, UINT msg, PCA30P pPacket);
|
||
BOOL CASendPacket(UINT destID, UINT msg, PCA30P pPacket);
|
||
|
||
BOOL CMCreateAbbreviatedName(LPCSTR szTagName, LPSTR szBuf, UINT cbBuf);
|
||
HCURSOR CMCreateColorCursor(UINT xHotSpot, UINT yHotSpot,
|
||
UINT cxWidth, UINT cyHeight, LPBYTE pANDMask,
|
||
LPBYTE pXORBitmap, UINT cbANDMask, UINT cbXORBitmap);
|
||
BOOL CMCreateIncoming(ASPerson * pasPerson);
|
||
HCURSOR CMCreateMonoCursor(UINT xHotSpot, UINT yHotSpot,
|
||
UINT cxWidth, UINT cyHeight, LPBYTE pANDMask,
|
||
LPBYTE pXORBitmap);
|
||
void CMDrawCursorTag(ASPerson * pasPerson, HDC hdc);
|
||
void CMFreeIncoming(ASPerson * pasPerson);
|
||
UINT CMProcessColorCursorPacket( PCMPACKETCOLORBITMAP pCMPacket,
|
||
HCURSOR * phNewCursor, LPPOINT pNewHotSpot );
|
||
void CMProcessCursorIDPacket(PCMPACKETID pCMPacket,
|
||
HCURSOR * phNewCursor, LPPOINT pNewHotSpot);
|
||
UINT CMProcessMonoCursorPacket(PCMPACKETMONOBITMAP pCMPacket,
|
||
HCURSOR * phNewCursor, LPPOINT pNewHotSpot );
|
||
void CMReceivedCursorMovedPacket(ASPerson * pasPerson, PCMPACKETHEADER pCMPacket );
|
||
void CMReceivedCursorShapePacket(ASPerson * pasPerson, PCMPACKETHEADER pCMPacket );
|
||
|
||
BOOL CPCCapabilitiesChange(ASPerson * pasPerson, PPROTCAPS pCaps);
|
||
|
||
ASPerson * DCSGetPerson(UINT gccID, BOOL fNull);
|
||
|
||
UINT FHConsiderRemoteFonts(UINT cCommonFonts, ASPerson * pasPerson);
|
||
UINT FHGetLocalFontHandle(UINT remoteFont, ASPerson * pasPerson);
|
||
void FHMaybeEnableText(void);
|
||
|
||
void HETCheckSharing(BOOL fStartHost);
|
||
BOOL HETStartHosting(BOOL fDesktop);
|
||
void HETStopHosting(BOOL fDesktop);
|
||
void HETSendLocalCount(void);
|
||
void HETUpdateLocalCount(UINT newCount);
|
||
void HETUpdateRemoteCount(ASPerson * pasPerson, UINT newCount);
|
||
|
||
BOOL IMConvertAndSendEvent(ASPerson * pasFor, LPIMEVENT pIMEvent);
|
||
UINT IMConvertIMEventToOSEvent(LPIMEVENT pEvent, LPIMOSEVENT pOSEvent);
|
||
void IMDiscardUnreplayableOSEvents(void);
|
||
void IMGenerateFakeKeyPress(TSHR_UINT16 type,
|
||
TSHR_UINT16 key, TSHR_UINT16 flags);
|
||
BYTE IMGetHighLevelKeyState(UINT vk);
|
||
void IMSendKeyboardState(void);
|
||
BOOL IMTranslateIncoming(LPIMEVENT pIMIn, LPIMEVENT pIMOut);
|
||
BOOL IMTranslateOutgoing(LPIMEVENT pIMIn, LPIMEVENT pIMOut);
|
||
void IMAppendNetEvent(LPIMEVENT pIMEvent);
|
||
|
||
void IMFlushOutgoingEvents(void);
|
||
void IMInject(BOOL fStart);
|
||
BOOL IMInjectEvent(LPIMOSEVENT pEvent);
|
||
BOOL IMInjectingEvents(void);
|
||
UINT IMInsertModifierKeystrokes(BYTE curKBState, BYTE targetKBState,
|
||
LPUINT pEventQueue);
|
||
void IMMaybeAddDeadKey(BYTE vk);
|
||
void IMMaybeInjectEvents(void);
|
||
void IMSpoilEvents(void);
|
||
void IMUpdateAsyncArray(LPBYTE pimKeyStates, LPIMOSEVENT pEvent);
|
||
|
||
void ODAdjustColor(ASPerson * pasPerson, const TSHR_COLOR * pColorIn, LPTSHR_COLOR pColorOut, int type);
|
||
void ODDrawTextOrder(ASPerson * pasPerson, BOOL fExtText, BOOL fPalRGB,
|
||
LPCOMMON_TEXTORDER pCommon, LPSTR pText, UINT cchText,
|
||
LPRECT pExtRect, UINT extOptions, LPINT pExtDx);
|
||
void ODReplayARC(ASPerson * pasFrom, LPARC_ORDER pArc, BOOL fPalRGB);
|
||
void ODReplayCHORD(ASPerson * pasFrom, LPCHORD_ORDER pChord, BOOL fPalRGB);
|
||
void ODReplayDSTBLT(ASPerson * pasFrom, LPDSTBLT_ORDER pDstBlt, BOOL fPalRGB);
|
||
void ODReplayELLIPSE(ASPerson * pasFrom, LPELLIPSE_ORDER pEllipse, BOOL fPalRGB);
|
||
void ODReplayEXTTEXTOUT(ASPerson * pasFrom, LPEXTTEXTOUT_ORDER pExtTextOut, BOOL fPalRGB);
|
||
void ODReplayLINETO(ASPerson * pasFrom, LPLINETO_ORDER pLineTo, BOOL fPalRGB);
|
||
void ODReplayMEM3BLT(ASPerson * pasFrom, LPMEM3BLT_ORDER pMem3Blt, BOOL fPalRGB);
|
||
void ODReplayMEMBLT(ASPerson * pasFrom, LPMEMBLT_ORDER pMemBlt, BOOL fPalRGB);
|
||
void ODReplayOPAQUERECT(ASPerson * pasFrom, LPOPAQUERECT_ORDER pOpaqeRect, BOOL fPalRGB);
|
||
void ODReplayPATBLT(ASPerson * pasFrom, LPPATBLT_ORDER pPatBlt, BOOL fPalRGB);
|
||
void ODReplayPIE(ASPerson * pasFrom, LPPIE_ORDER pPie, BOOL fPalRGB);
|
||
void ODReplayPOLYBEZIER(ASPerson * pasFrom, LPPOLYBEZIER_ORDER pPolyBezier, BOOL fPalRGB);
|
||
void ODReplayPOLYGON(ASPerson * pasFrom, LPPOLYGON_ORDER pPolygon, BOOL fPalRGB);
|
||
void ODReplayRECTANGLE(ASPerson * pasFrom, LPRECTANGLE_ORDER pRectangle, BOOL fPalRGB);
|
||
void ODReplayROUNDRECT(ASPerson * pasFrom, LPROUNDRECT_ORDER pRoundRect, BOOL fPalRGB);
|
||
void ODReplaySCRBLT(ASPerson * pasFrom, LPSCRBLT_ORDER pScrBlt, BOOL fPalRGB);
|
||
void ODReplayTEXTOUT(ASPerson * pasFrom, LPTEXTOUT_ORDER pTextOut, BOOL fPalRGB);
|
||
void ODUseArcDirection(ASPerson * pasPerson, UINT dir);
|
||
void ODUseBkColor(ASPerson * pasPerson, BOOL fPalRGB, TSHR_COLOR color);
|
||
void ODUseBkMode(ASPerson * pasPerson, int mode);
|
||
void ODUseBrush(ASPerson * pasPerson, BOOL fPalRGB,
|
||
int x, int y, UINT Style, UINT Hatch,
|
||
TSHR_COLOR Color, BYTE Extra[7]);
|
||
void ODUseFillMode(ASPerson * pasPerson, UINT mode);
|
||
void ODUseFont(ASPerson * pasPerson, LPSTR pName, UINT cchName,
|
||
UINT codePage, UINT maxHeight, UINT Height,
|
||
UINT Width, UINT Weight, UINT flags);
|
||
void ODUsePen(ASPerson * pasPerson, BOOL fPalRGB,
|
||
UINT style, UINT width, TSHR_COLOR color);
|
||
void ODUseRectRegion(ASPerson * pasPerson, int left,
|
||
int top, int right, int bottom);
|
||
void ODUseROP2(ASPerson * pasPerson, int rop);
|
||
void ODUseTextBkColor(ASPerson * pasPerson, BOOL fPalRGB, TSHR_COLOR color);
|
||
void ODUseTextCharacterExtra(ASPerson * pasPerson, int extra);
|
||
void ODUseTextColor(ASPerson * pasPerson, BOOL fPalRGB, TSHR_COLOR color);
|
||
void ODUseTextJustification(ASPerson * pasPerson, int extra, int count);
|
||
|
||
void OD2CopyFromDeltaCoords(LPTSHR_INT8* ppSrc, LPVOID pDst,
|
||
UINT cbDstField, BOOL fSigned, UINT numElements);
|
||
void OD2DecodeBounds(LPBYTE *ppNextDataToCopy,
|
||
LPTSHR_RECT16 pRect, ASPerson * pasPerson);
|
||
void OD2DecodeField(LPBYTE* ppSrc, LPVOID pDest,
|
||
UINT cbSrcField, UINT cbDstField, BOOL fSigned,
|
||
UINT numElements);
|
||
void OD2FreeIncoming(ASPerson * pasPerson);
|
||
BOOL OD2UseFont(ASPerson * pasPerson, LPSTR pName,
|
||
UINT facelength, UINT codePage, UINT MaxHeight,
|
||
UINT Height, UINT Width, UINT Weight, UINT flags);
|
||
|
||
void OECapabilitiesChanged(void);
|
||
|
||
void PMFreeIncoming(ASPerson * pasPerson);
|
||
|
||
void RBCFreeIncoming(ASPerson * pasPerson);
|
||
void RBCStoreBitsInCacheBitmap(ASPerson * pasPerson,
|
||
UINT cacheID, UINT iCacheEntry, UINT cxSubWidth,
|
||
UINT cxFixedWidth, UINT cySubHeight, UINT bpp,
|
||
LPBYTE pBitmapBits, UINT cbBitmapBits, BOOL fCompressed);
|
||
|
||
BOOL SCSyncStream(UINT streamID);
|
||
|
||
void SDPDrawHatchedRegion(HDC hdc, HRGN region, UINT hatchColor);
|
||
void SDPPlayScreenDataToRDB(ASPerson * pasPerson,
|
||
PSDPACKET pUpdates, LPBYTE pBits, LPRECT pPosition);
|
||
|
||
void VIEWClientAutoScroll(ASPerson *);
|
||
void VIEWClientCaptureStolen(ASPerson *);
|
||
void VIEWClientExtentChange(ASPerson * pasHost, BOOL fRedraw);
|
||
void VIEWClientGetSize(ASPerson * pasHost, LPRECT lprc);
|
||
void VIEWClientMouseDown(ASPerson *, UINT, WPARAM, LPARAM);
|
||
void VIEWClientMouseMove(ASPerson *, UINT, WPARAM, LPARAM);
|
||
void VIEWClientMouseMsg(ASPerson *, UINT, WPARAM, LPARAM);
|
||
void VIEWClientMouseUp(ASPerson *, UINT, WPARAM, LPARAM, BOOL);
|
||
void VIEWClientMouseWheel(ASPerson *, WPARAM, LPARAM);
|
||
void VIEWClientPaint(ASPerson * pasHost);
|
||
BOOL VIEWClientScroll(ASPerson * pasHost, int xNew, int yNew);
|
||
|
||
void VIEWFrameAbout(ASPerson * pasHost);
|
||
void VIEWFrameCommand(ASPerson * pasHost, WPARAM wParam, LPARAM lParam);
|
||
BOOL VIEWFrameCreate(ASPerson * pasHost);
|
||
void VIEWFrameFullScreen(ASPerson * pasHost, BOOL fFull);
|
||
void VIEWFrameGetSize(ASPerson * pasHost, LPRECT lprc);
|
||
void VIEWFrameHelp(ASPerson * pasHost);
|
||
void VIEWFrameInitMenuBar(ASPerson * pasHost);
|
||
void VIEWFrameOnMenuSelect(ASPerson * pasHost, WPARAM wParam, LPARAM lParam);
|
||
void VIEWFrameResize(ASPerson * pasHost);
|
||
void VIEWFrameResizeChanged(ASPerson * pasHost);
|
||
void VIEWFrameSetStatus(ASPerson * pasHost, UINT idsStatus);
|
||
|
||
void VIEWFullScreenExitPaint(ASPerson * pasHost, HWND hwnd);
|
||
|
||
void VIEWStartControlled(BOOL fControlled);
|
||
|
||
BOOL USRCreateRemoteDesktop(ASPerson * pasPerson);
|
||
void USRDeleteRemoteDesktop(ASPerson * pasPerson);
|
||
|
||
};
|
||
|
||
|
||
|
||
|
||
typedef struct tagASSession
|
||
{
|
||
// pasNext someday!
|
||
UINT scState;
|
||
|
||
UINT callID; // ID of call
|
||
MCSID gccID; // GCC node_id
|
||
BOOL fShareCreator;
|
||
|
||
UINT cchLocalName;
|
||
char achLocalName[TSHR_MAX_PERSON_NAME_LEN];
|
||
ASShare * pShare;
|
||
#ifdef _DEBUG
|
||
DWORD scShareTime;
|
||
#endif
|
||
}
|
||
ASSession;
|
||
|
||
|
||
#endif // _H_AS
|
||
|