/**INC+**********************************************************************/ /* */ /* ClxApi.h */ /* */ /* Client extension header file */ /* */ /* Copyright(c) Microsoft 1997-1999 */ /* */ /* Notes: */ /* */ /* CLINFO_VERSION */ /* 1 Initial version */ /* 2 hwndMain added to CLINFO struct */ /* */ /****************************************************************************/ #ifndef _H_CLX_ #define _H_CLX_ extern "C" { #include } #include "objs.h" #define CLINFO_VERSION 2 #define CLX_DISCONNECT_LOCAL 1 #define CLX_DISCONNECT_BY_USER 2 #define CLX_DISCONNECT_BY_SERVER 3 #define CLX_DISCONNECT_NL_ERROR 4 #define CLX_DISCONNECT_SL_ERROR 5 #define CLX_DISCONNECT_UNKNOWN 6 typedef struct _tag_CLINFO { DWORD cbSize; // Size of CLINFO structure (bytes) DWORD dwVersion; // CLINFO_VERSION //CLX expects ANSI strings here LPSTR pszServer; // Test server name / address LPSTR pszCmdLine; // /clxcmdline= switch data HWND hwndMain; // Main window handle } CLINFO, *PCLINFO; #define VLADIMIS_NEW_CHANGE typedef enum { CLX_EVENT_CONNECT, // Connect event CLX_EVENT_DISCONNECT, // Disconnect event CLX_EVENT_LOGON, // Logon event CLX_EVENT_SHADOWBITMAP, // Shadow bitmap created CLX_EVENT_SHADOWBITMAPDC, // -- " -- CLX_EVENT_PALETTE, // new color palette } CLXEVENT; #ifndef PVOID typedef void * PVOID; typedef unsigned long ULONG; typedef char *PCHAR, *PCH, *LPSTR; #endif #ifndef DWORD typedef unsigned long DWORD; typedef char *LPSTR; #endif #ifndef IN #define IN #endif #define CLX_INITIALIZE CE_WIDETEXT("ClxInitialize") #define CLX_CONNECT CE_WIDETEXT("ClxConnect") #define CLX_EVENT CE_WIDETEXT("ClxEvent") #define CLX_DISCONNECT CE_WIDETEXT("ClxDisconnect") #define CLX_TERMINATE CE_WIDETEXT("ClxTerminate") #define CLX_TEXTOUT CE_WIDETEXT("ClxTextOut") #define CLX_TEXTPOSOUT CE_WIDETEXT("ClxTextAndPosOut") #define CLX_OFFSCROUT CE_WIDETEXT("ClxOffscrOut") #define CLX_GLYPHOUT CE_WIDETEXT("ClxGlyphOut") #define CLX_BITMAP CE_WIDETEXT("ClxBitmap") #define CLX_DIALOG CE_WIDETEXT("ClxDialog") #define CLX_PKTDRAWN CE_WIDETEXT("ClxPktDrawn") #define CLX_REDIRECTNOTIFY CE_WIDETEXT("ClxRedirectNotify") #define CLX_CONNECT_EX CE_WIDETEXT("ClxConnectEx") #define CLXSERVER _T("CLXSERVER") #define CLXDLL _T("CLXDLL") #define CLXCMDLINE _T("CLXCMDLINE") #ifdef ASSERT #undef ASSERT #endif // ASSERT #ifdef ASSERTMSG #undef ASSERTMSG #endif // ASSERTMSG #if DBG && WIN32 ///////////////////////////////////////////////////////////// extern "C" { NTSYSAPI VOID NTAPI RtlAssert( PVOID FailedAssertion, PVOID FileName, ULONG LineNumber, PCHAR Message ); ULONG _cdecl DbgPrint( PCH Format, ... ); } //extern c #ifdef OS_WINCE #define KdPrint(_x_) \ NKDbgPrintfW _x_ #else // !OS_WINCE #define KdPrint(_x_) \ DbgPrint _x_ #endif // OS_WINCE #define ASSERT(exp) \ if (!(exp)) \ RtlAssert(#exp, __FILE__, __LINE__, NULL) #define ASSERTMSG(msg, exp) \ if (!(exp)) \ RtlAssert(#exp, __FILE__, __LINE__, msg) #else #define KdPrint(_x_) #define ASSERT(exp) #define ASSERTMSG(msg, exp) #endif // DBG typedef BOOL (WINAPI * PCLX_INITIALIZE)(PCLINFO, PVOID); typedef BOOL (WINAPI * PCLX_CONNECT)(PVOID, LPTSTR); typedef VOID (WINAPI * PCLX_EVENT)(PVOID, CLXEVENT, LPARAM); typedef VOID (WINAPI * PCLX_DISCONNECT)(PVOID); typedef VOID (WINAPI * PCLX_TERMINATE)(PVOID); typedef VOID (WINAPI * PCLX_TEXTOUT)(PVOID, PVOID, int); typedef VOID (WINAPI * PCLX_TEXTPOSOUT)(PVOID, PVOID, int, PRECT, HANDLE); typedef VOID (WINAPI * PCLX_OFFSCROUT)(PVOID, HANDLE, int, int); typedef VOID (WINAPI * PCLX_GLYPHOUT)(PVOID, UINT, UINT, PVOID); typedef VOID (WINAPI * PCLX_BITMAP)(PVOID, UINT, UINT, PVOID, UINT, PVOID); typedef VOID (WINAPI * PCLX_DIALOG)(PVOID, HWND); typedef VOID (WINAPI * PCLX_PKTDRAWN)(PVOID); typedef VOID (WINAPI * PCLX_REDIRECTNOTIFY)( RDP_SERVER_REDIRECTION_PACKET UNALIGNED *pRedirPacket, UINT dataLen ); typedef BOOL (WINAPI * PCLX_CONNECT_EX)( LPTSTR szConnectAddress, BOOL fAutoReconnecting, BOOL fIsConnectedToCluster, BSTR RedirectedLBInfo ); typedef struct _tag_CLEXTENSION { LPTSTR pszClxServer; LPTSTR pszClxDll; LPTSTR pszClxCmdLine; HINSTANCE hInstance; PCLX_INITIALIZE pClxInitialize; PCLX_CONNECT pClxConnect; PCLX_EVENT pClxEvent; PCLX_DISCONNECT pClxDisconnect; PCLX_TERMINATE pClxTerminate; PCLX_TEXTOUT pClxTextOut; PCLX_TEXTPOSOUT pClxTextPosOut; PCLX_OFFSCROUT pClxOffscrOut; PCLX_GLYPHOUT pClxGlyphOut; PCLX_BITMAP pClxBitmap; PCLX_DIALOG pClxDialog; PCLX_PKTDRAWN pClxPktDrawn; PCLX_REDIRECTNOTIFY pClxRedirectNotify; PCLX_CONNECT_EX pClxConnectEx; PVOID pvClxContext; } CLEXTENSION, *PCLEXTENSION; class CCLX { public: CCLX(CObjs* objs); ~CCLX(); public: // // API // PVOID CLX_Alloc(IN DWORD dwSize); VOID CLX_Free(IN PVOID lpMemory); VOID CLX_OnConnected(VOID); VOID CLX_OnDisconnected(UINT uResult); // // Internal functions // LPTSTR CLX_SkipWhite(LPTSTR lpszCmdParam); LPTSTR CLX_SkipNonWhite(LPTSTR lpszCmdParam); PCLEXTENSION CLX_GetClx(VOID); BOOL CLX_LoadProcs(VOID); UINT CLX_GetSwitch_CLXSERVER(LPTSTR lpszCmdParam); UINT CLX_GetSwitch_CLXCMDLINE(LPTSTR lpszCmdParam); BOOL CLX_Init(HWND hwndMain, LPTSTR szCmdLine); VOID CLX_Term(VOID); BOOL CLX_ClxConnect(VOID); VOID CLX_ClxEvent(CLXEVENT ClxEvent, LPARAM lParam); VOID CLX_ClxDisconnect(VOID); VOID CLX_ClxTerminate(VOID); VOID CLX_ClxDialog(HWND hwnd); BOOL CLX_Loaded(void); PCLEXTENSION _pClx; //************************************************************* // // CLX_ClxOffscrOut() // // Purpose: Notifies clx dll that an offscreen bitmap // was drawn and specifies the position // // Parameters: IN [hBitmap] - handle of the bitmap that was drawn // IN [left] - left drawing position // IN [top] - top drawing position // // Return: void // // History: 04-15-01 CostinH Created // //************************************************************* __inline VOID CLX_ClxOffscrOut(HANDLE hBitmap, int left, int top) { if (_pClx && _pClx->pClxOffscrOut) { _pClx->pClxOffscrOut(_pClx->pvClxContext, hBitmap, left, top); } } //************************************************************* // // CLX_ClxTextOut() // // Purpose: Let the clx dll have a look-see at all // test out orders // // Parameters: IN [pText] - ptr to text // IN [textLength] - text length // IN [hBitmap] - handle of the offscreen bitmap // IN [left] - text position // IN [right] - on the client screen // IN [top] - // IN [bottom] - // // // Return: void // // History: 09-30-97 BrianTa Created // //************************************************************* __inline VOID CLX_ClxTextOut(PVOID pText, int textLength, HANDLE hBitmap, LONG left, LONG right, LONG top, LONG bottom) { if (_pClx) { if (_pClx->pClxTextPosOut) { RECT r; r.left = left; r.right = right; r.top = top; r.bottom = bottom; _pClx->pClxTextPosOut(_pClx->pvClxContext, pText, textLength, &r, hBitmap); } else if (_pClx->pClxTextOut) { _pClx->pClxTextOut(_pClx->pvClxContext, pText, textLength); } } } //************************************************************* // // CLX_ClxGlyphOut() // // Purpose: Let the clx dll have a look-see at all // glyph out orders // // Parameters: IN [cxBits, cyBits] - Size of mono bitmap // IN [pBitmap] - ptr to the bitmap data // // Return: void // // History: 5-01-98 VLADIMIS Created // //************************************************************* __inline VOID CLX_ClxGlyphOut(UINT cxBits, UINT cyBits, PVOID pBitmap) { if (_pClx && _pClx->pClxGlyphOut) _pClx->pClxGlyphOut(_pClx->pvClxContext, cxBits, cyBits, pBitmap); } //************************************************************* // // CLX_ClxBitmap() // // Purpose: Let the clx dll have a look-see at all // MemBlt orders // // Parameters: IN [cxSize, cySize] - Size of the bitmap // IN [pBitmap] - ptr to the bitmap data // IN [bmiSize] - size of pBmi // IN [pBmi] - ptr to the bitmap info // // Return: void // // History: 5-01-98 VLADIMIS Created // //************************************************************* __inline VOID CLX_ClxBitmap(UINT cxSize, UINT cySize, PVOID pBitmap, UINT bmiSize, PVOID pBmi) { if (_pClx && _pClx->pClxBitmap) _pClx->pClxBitmap(_pClx->pvClxContext, cxSize, cySize, pBitmap, bmiSize, pBmi); } //************************************************************* // // CLX_ClxPktDrawn() // // Purpose: Notifies the clx dll that a new received packet // was drawn // // Return: void // // History: 5-14-01 COSTINH Created // //************************************************************* __inline VOID CLX_ClxPktDrawn() { if (_pClx && _pClx->pClxPktDrawn) _pClx->pClxPktDrawn(_pClx->pvClxContext); } // // Redirect notify - notify the CLX of the receipt of an SD // redirection packet // __inline VOID CLX_RedirectNotify( RDP_SERVER_REDIRECTION_PACKET UNALIGNED *pRedirPacket, UINT dataLen ) { if (_pClx && _pClx->pClxRedirectNotify) { _pClx->pClxRedirectNotify(pRedirPacket, dataLen); } } // // ConnectEx - notify clx at connection time // // szConnectAddress - exact address we're connecting to, // in redirect case this is redirection IP // fAutoReconnecting - TRUE if this is an AutoReconnection // fIsConnectedToCluster - TRUE if the connection is in response // to a redirection request // RedirectedLBInfo - Redirected LB info (cookie) // __inline VOID CLX_ConnectEx( LPTSTR szConnectAddress, BOOL fAutoReconnecting, BOOL fIsConnectedToCluster, BSTR RedirectedLBInfo ) { if (_pClx && _pClx->pClxConnectEx) { _pClx->pClxConnectEx( szConnectAddress, fAutoReconnecting, fIsConnectedToCluster, RedirectedLBInfo ); } } private: #ifdef UNICODE CHAR _szAnsiClxServer[100]; CHAR _szAnsiClxCmdLine[MAX_PATH]; #endif CObjs* _pClientObjects; }; #endif // _H_CLX_