|
|
/****************************************************************************/ /* wui.h */ /* */ /* UI class */ /* Serves as the root class of the core. Provides UI functionality. */ /* (windows and scroll bars) */ /* */ /* Copyright(C) Microsoft Corporation 1997-1998 */ /****************************************************************************/
#ifndef _H_WUI
#define _H_WUI
#include <adcgdata.h>
#include <winsock.h>
#if ! defined (OS_WINCE)
#include <ctfutb.h>
#endif
#include "autil.h"
#include "aco.h"
#include "cd.h"
#include "cchan.h"
#include "drapi.h"
#ifdef USE_BBAR
#include "bbar.h"
#endif
#include "arcdlg.h"
class CCLX; class CTD; class CCD; class CUH;
#include "auierr.h"
#include "uidata.h"
#include <wuiids.h>
//
// Disabled feature list (for performance)
//
#include "tsperf.h"
/****************************************************************************/ /* Structure: UI_DATA */ /* */ /* Description: Component data in the User Interface */ /****************************************************************************/
#define UI_FILENAME_MAX_LENGTH 15
typedef enum { DC_LANG_UNKNOWN, DC_LANG_JAPANESE, DC_LANG_KOREAN, DC_LANG_CHINESE_TRADITIONAL, DC_LANG_CHINESE_SIMPLIFIED } DCLANGID;
//
// From auiapi.h
//
#define UI_SHUTDOWN_SUCCESS 1
#define UI_SHUTDOWN_FAILURE 0
#define UI_MAIN_CLASS _T("UIMainClass")
#define UI_CONTAINER_CLASS _T("UIContainerClass")
/****************************************************************************/ /* Constants used to set the 16-bit message queue size. Windows sets a */ /* limit of 120 and has a default of 8. */ /* We try to set to UI_MAX_MESSAGE_Q_SIZE. If this fails we reduce the */ /* requested size by UI_DEFAULT_MESSAGE_Q_SIZE. This continues until the */ /* queue size is set or the requested size drops below */ /* UI_MIN_MESSAGE_Q_SIZE. */ /****************************************************************************/ #define UI_MAX_MESSAGE_Q_SIZE 120
#define UI_MIN_MESSAGE_Q_SIZE 40
#define UI_DEFAULT_MESSAGE_Q_SIZE 8
#define UI_MESSAGE_Q_SIZE_DECREMENT 10
/****************************************************************************/ /* Max size of Window Pos string to be read in */ /****************************************************************************/ #define UI_WINDOW_POSITION_STR_LEN 256
#define UI_FRAME_TITLE_RESOURCE_MAX_LENGTH 256
#define UI_DISCONNECT_RESOURCE_MAX_LENGTH 256
#define UI_BUILDNUMBER_STRING_MAX_LENGTH 256
#define UI_VERSION_STRING_MAX_LENGTH 256
#define UI_DISPLAY_STRING_MAX_LENGTH 256
#define UI_INTEGER_STRING_MAX_LENGTH 10
/****************************************************************************/ /* */ /****************************************************************************/ #define UI_FONT_SIZE 40
#define UI_FONT_WEIGHT FW_BOLD
#define UI_FONT_FACENAME _T("Comic Sans MS")
#define UI_RGB_BLACK RGB(0x00, 0x00, 0x00)
#define UI_RGB_RED RGB(0xFF, 0x00, 0x00)
#define UI_RGB_GREEN RGB(0x00, 0xFF, 0x00)
#define UI_RGB_BLUE RGB(0x00, 0x00, 0xFF)
#define UI_RGB_WHITE RGB(0xFF, 0xFF, 0xFF)
#ifdef DC_DEBUG
#define UI_NUMBER_STRING_MAX_LENGTH ( 18 * sizeof (DCTCHAR) )
#endif /* DC_DEBUG */
/****************************************************************************/ /* UI status constants */ /****************************************************************************/ #define UI_STATUS_INITIALIZING 1
#define UI_STATUS_DISCONNECTED 2
#define UI_STATUS_CONNECT_PENDING_DNS 3
#define UI_STATUS_CONNECT_PENDING 4
#define UI_STATUS_CONNECTED 5
#define UI_STATUS_PENDING_CONNECTENDPOINT 6
/****************************************************************************/ /* Accelerator passthrough constants */ /****************************************************************************/ #define UI_ACCELERATOR_PASSTHROUGH_ENABLED 1
#define UI_ACCELERATOR_PASSTHROUGH_DISABLED 2
/****************************************************************************/ /* Screen mode constants */ /****************************************************************************/ #define UI_WINDOWED 1
#define UI_FULLSCREEN 2
/****************************************************************************/ /* Disconnect dialog return codes */ /****************************************************************************/ #define UI_DISCONNECT_RC_NO 0
#define UI_DISCONNECT_RC_YES 1
/****************************************************************************/ /* Scrollbar constants */ /****************************************************************************/ #define UI_NO_SCROLLBARS 0
#define UI_BOTTOM_SCROLLBAR 1
#define UI_RIGHT_SCROLLBAR 2
#define UI_BOTH_SCROLLBARS 3
/****************************************************************************/ /* Scroll distances. */ /****************************************************************************/ #define UI_SCROLL_HORZ_PAGE_DISTANCE (_UI.mainWindowClientSize.width / 2);
#define UI_SCROLL_VERT_PAGE_DISTANCE (_UI.mainWindowClientSize.height / 2);
#define UI_SCROLL_LINE_DISTANCE 10
#define UI_SMOOTH_SCROLL_STEP 4
/****************************************************************************/ /* Registry default settings */ /****************************************************************************/ #define UI_NUMBER_FIELDS_TO_READ 6
#define UI_WINDOW_POSITION_INI_FORMAT _T("%u,%u,%d,%d,%d,%d")
#define UI_ALT_DOWN_MASK 0x8000
/****************************************************************************/ /* Connection timer ID */ /****************************************************************************/
#define UI_TIMER_OVERALL_CONN 200
#define UI_TIMER_SINGLE_CONN 201
#define UI_TIMER_SHUTDOWN 202
#define UI_TIMER_LICENSING 203
#define UI_TIMER_IDLEINPUTTIMEOUT 204
#define UI_TIMER_BBAR_UNHIDE_TIMERID 205
#define UI_TIMER_DISCONNECT_TIMERID 206
#define UI_WSA_GETHOSTBYNAME (DUC_UI_MESSAGE_BASE + 1)
#define MIN_MINS_TOIDLETIMEOUT 0 // 0 means no timer
#define MAX_MINS_TOIDLETIMEOUT (4*60) // 4 hours maximum
//
// Defines time interval allowed between DeactivateAllPDU and a disconnection
// or reconnection (in milliseconds)
//
// Prevents a minor problem if the server sends a deactivate all but then
// doesn't actually disconnect us (e.g can happen if server is powered down).
// The problem is made serious because while we are deactivated there is no
// way to send network traffic so nothing will cause a network disconnect.
//
// See whistler bug 173679
//
// NOTE: the timeout must be bigger than the shadow timeout as during
// shadow negotiation it is valid for the client to remain in the
// deactivated state for 60 seconds.
//
#define UI_TOTAL_DISCONNECTION_TIMEOUT 75*1000
//
// Placement is important
//
#include "objs.h"
class CUI { public: CUI(); ~CUI();
/****************************************************************************/ /* UI DATA */ /* */ /* Description: Component data in the User Interface */ /****************************************************************************/
UI_DATA _UI;
private: /****************************************************************************/ /* UI Internal functions */ /* */ /* Description: Component data in the User Interface */ /****************************************************************************/ DCSIZE DCINTERNAL UIGetMaximizedWindowSize(DCVOID); void DCINTERNAL UIUpdateSessionInfo(TCHAR *, TCHAR *); static VOID near FastRect(HDC, int, int, int, int); static DWORD near RGB2BGR(DWORD); void DCINTERNAL UIRecalcMaxMainWindowSize(); void DCINTERNAL UIConnectWithCurrentParams(CONNECTIONMODE); void DCINTERNAL UIRecalculateScrollbars(); void DCINTERNAL UIMoveContainerWindow(); unsigned DCINTERNAL UICalculateVisibleScrollBars(unsigned, unsigned); void DCINTERNAL UIUpdateScreenMode(BOOL fGrabFocus); void DCINTERNAL UIShadowBitmapSettingChanged(); void DCINTERNAL UISmoothScrollingSettingChanged(); void DCINTERNAL UISetMinMaxPlacement(); void DCINTERNAL UIInitiateDisconnection(); UINT32 DCINTERNAL UIGetKeyboardLayout(); BOOL DCINTERNAL UIValidateCurrentParams(CONNECTIONMODE connMode); unsigned DCINTERNAL UISetScrollInfo(int, LPSCROLLINFO, BOOL); void DCINTERNAL UISetConnectionStatus(unsigned); void DCINTERNAL UIInitializeDefaultSettings(); void DCINTERNAL UIRedirectConnection();
VOID DCINTERNAL UIStartConnectWithConnectedEndpoint();
void DCINTERNAL UIStartDNSLookup(); void DCINTERNAL UITryNextConnection(); void DCINTERNAL UIGoDisconnected(unsigned disconnectCode, BOOL fFireEvent); BOOL DCINTERNAL UIValidateServerName(TCHAR *); void DCINTERNAL UIFinishDisconnection(); BOOL IsConnectingToOwnAddress(u_long connectAddr); BOOL IsRunningOnPTS(); BOOL InitInputIdleTimer(LONG minsToTimeout); VOID UISetBBarUnhideTimer(LONG x, LONG y); BOOL UIIsTSOnWin2KOrGreater( VOID ); BOOL UIFreeAsyncDNSBuffer();
public: //
// UI API functions
//
// Description: Component data in the User Interface
//
LRESULT CALLBACK UIMainWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK UIStaticMainWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK UIContainerWndProc (HWND hwndContainer, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK UIStaticContainerWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
HRESULT DCAPI UI_Init(HINSTANCE hInstance, HINSTANCE hPrevInstance, HINSTANCE hResInstance, HANDLE hEvtNotifyCoreInit); HRESULT DCAPI UI_Term(DCVOID); DCVOID DCAPI UI_ToggleFullScreenMode(DCVOID); DCVOID DCAPI UI_GoFullScreen(DCVOID); DCVOID DCAPI UI_LeaveFullScreen(DCVOID); DCBOOL DCAPI UI_IsFullScreen(); DCVOID DCAPI UI_ResetState(); HRESULT DCAPI UI_Connect(CONNECTIONMODE); BOOL UI_UserInitiatedDisconnect(UINT discReason); BOOL UI_NotifyAxLayerCoreInit(); BOOL UI_UserRequestedClose(); //
// Decoupled notification callbacks
//
DCVOID DCAPI UI_OnCoreInitialized(ULONG_PTR unused); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnCoreInitialized);
DCVOID DCAPI UI_OnInputFocusGained(ULONG_PTR unused); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnInputFocusGained);
DCVOID DCAPI UI_OnInputFocusLost(ULONG_PTR unused); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnInputFocusLost);
DCVOID DCAPI UI_OnConnected(ULONG_PTR unused); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnConnected); DCVOID DCAPI UI_OnDisconnected(ULONG_PTR disconnectID); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnDisconnected); DCVOID DCAPI UI_OnShutDown(ULONG_PTR failID); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnShutDown);
DCVOID DCAPI UI_OnDeactivateAllPDU(ULONG_PTR reason); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnDeactivateAllPDU); DCVOID DCAPI UI_OnDemandActivePDU(ULONG_PTR reason); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnDemandActivePDU); void DCAPI UI_DisplayBitmapCacheWarning(ULONG_PTR unusedParm); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_DisplayBitmapCacheWarning);
void DCAPI UI_OnSecurityExchangeComplete(ULONG_PTR unused); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnSecurityExchangeComplete);
void DCAPI UI_OnLicensingComplete(ULONG_PTR unused); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_OnLicensingComplete);
void DCAPI UI_SetDisconnectReason(ULONG_PTR reason); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_SetDisconnectReason);
DCVOID DCAPI UI_FatalError(DCINT error); #ifdef OS_WINCE
EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_FatalError); #endif
#ifdef USE_BBAR
void DCAPI UI_OnBBarHotzoneTimerFired(ULONG_PTR unused); #endif
void DCAPI UI_OnDesktopSizeChange(PDCSIZE pDesktopSize); DCVOID DCAPI UI_UpdateSessionInfo(PDCWCHAR pDomain, DCUINT cbDomain, PDCWCHAR pUserName, DCUINT cbUsername, DCUINT32 SessionId); #ifdef DC_DEBUG
DCVOID DCAPI UI_CoreDebugSettingChanged(DCVOID); DCVOID DCAPI UI_SetRandomFailureItem(DCUINT itemID, DCINT percent); DCINT DCAPI UI_GetRandomFailureItem(DCUINT itemID); DCVOID DCAPI UI_SetNetworkThroughput(DCUINT bytesPerSec); DCUINT DCAPI UI_GetNetworkThroughput(); #endif /* DC_DEBUG */
void UI_OnLoginComplete();
//
// Autoreconnection notification
//
void UI_OnAutoReconnecting( LONG discReason, LONG attemptCount, LONG maxAttemptCount, BOOL* pfContinueArc);
#ifdef USE_BBAR
BOOL UI_RequestMinimize(); #endif
#ifndef OS_WINCE
void UI_HideLangBar(); void UI_RestoreLangBar(); #endif
/********************************************************************/ /* Get default langID */ /********************************************************************/ DCLANGID UIGetDefaultLangID(); DCUINT UIGetDefaultIMEFileName(PDCTCHAR imeFileName, DCUINT Size); DCUINT UIGetIMEMappingTableName(PDCTCHAR ImeMappingTableName, DCUINT Size); VOID UIGetIMEFileName(PDCTCHAR imeFileName, DCUINT Size); VOID UIGetIMEFileName16(PDCTCHAR imeFileName, DCUINT Size); VOID DisableIME(HWND hwnd);
int UI_BppToColorDepthID(int bpp); int UI_GetScreenBpp();
#ifdef SMART_SIZING
HRESULT DCAPI UI_SetSmartSizing(BOOL fSmartSizing); #endif // SMART_SIZING
//
// Virtual channel plugins to load
//
BOOL DCAPI UI_SetVChanAddinList(TCHAR *); PDCTCHAR DCAPI UI_GetVChanAddinList() { return _UI.pszVChanAddinDlls; } void UI_InitRdpDrSettings(); void UI_CleanupLBState();
//
// Inline property accessors
//
void DCAPI UI_SetCompress(BOOL); BOOL DCAPI UI_GetCompress();
/****************************************************************************/ /* Name: UI_SetInstanceHandle */ /* */ /* Purpose: Return application hInstance */ /* */ /* Returns: hInstance */ /****************************************************************************/ void DCAPI UI_SetInstanceHandle(HINSTANCE hInstance) { DC_BEGIN_FN("UI_SetInstanceHandle");
TRC_ASSERT((_UI.hInstance == 0), (TB, _T("Set instance handle twice!"))); TRC_ASSERT((hInstance != 0), (TB, _T("invalid (zero) instance handle")));
_UI.hInstance = hInstance;
DC_END_FN(); } /* UI_SetInstanceHandle */
/****************************************************************************/ /* Name: UI_GetInstanceHandle */ /* */ /* Purpose: Return application hInstance */ /****************************************************************************/ HINSTANCE DCAPI UI_GetInstanceHandle() { HINSTANCE rc;
DC_BEGIN_FN("UI_GetInstanceHandle");
TRC_ASSERT((_UI.hInstance != 0), (TB, _T("Instance handle not set"))); rc = _UI.hInstance; TRC_DBG((TB, _T("Return %p"), rc));
DC_END_FN(); return(rc); } /* UI_GetInstanceHandle */
/****************************************************************************/ /* Name: UI_SetUIContainerWnd */ /* */ /* Purpose: Informs UT of the UI Container Window Handle. */ /****************************************************************************/ void DCAPI UI_SetUIContainerWindow(HWND hwndUIContainer) { DC_BEGIN_FN("UI_SetUIContainerWindow");
TRC_ASSERT((hwndUIContainer != NULL), (TB, _T("Invalid (NULL) Container Window"))); TRC_ASSERT((_UI.hwndUIContainer == NULL), (TB, _T("Set container window twice!"))); _UI.hwndUIContainer = hwndUIContainer;
DC_END_FN(); } /* UI_SetUIContainerWnd */
/****************************************************************************/ /* Name: UI_GetUIContainerWindow */ /* */ /* Purpose: Returns the UI Container Window Handle. */ /* */ /* Returns: UI Container Window Handle. */ /****************************************************************************/ HWND DCAPI UI_GetUIContainerWindow() { HWND rc;
DC_BEGIN_FN("UI_GetUIContainerWindow");
TRC_ASSERT((_UI.hwndUIContainer != NULL), (TB, _T("Container Window not set"))); rc = _UI.hwndUIContainer; TRC_DBG((TB, _T("Return %p"), rc));
DC_END_FN(); return rc; } /* UI_GetUIContainerWnd */
/****************************************************************************/ /* Name: UI_SetUIMainWindow */ /* */ /* Purpose: Informs UT of the UI Main Window Handle. */ /****************************************************************************/ void DCAPI UI_SetUIMainWindow(HWND hwndUIMain) { DC_BEGIN_FN("UI_SetUIMainWindow");
TRC_ASSERT((hwndUIMain != NULL), (TB, _T("invalid (zero) Main Window handle"))); TRC_ASSERT((_UI.hwndUIMain == NULL), (TB, _T("Set Main Window twice!")));
_UI.hwndUIMain = hwndUIMain;
DC_END_FN(); } /* UI_SetUIMainWindow */
/****************************************************************************/ /* Name: UI_GetUIMainWindow */ /* */ /* Purpose: Returns the UI Main Window Handle. */ /****************************************************************************/ HWND DCAPI UI_GetUIMainWindow() { HWND rc;
DC_BEGIN_FN("UI_GetUIMainWindow");
TRC_ASSERT((_UI.hwndUIMain != NULL), (TB, _T("Main Window not set"))); rc = _UI.hwndUIMain; TRC_DBG((TB, _T("return %p"), rc));
DC_END_FN(); return rc; } /* UI_GetUIMainWindow */
/****************************************************************************/ /* Name: UI_SetClientMCSID */ /* */ /* Purpose: Set our MCS User ID */ /****************************************************************************/ DCVOID DCAPI UI_SetClientMCSID(DCUINT16 mcsID) { DC_BEGIN_FN("UI_SetClientMCSID");
TRC_ASSERT((( mcsID == 0) || (_UI.clientMCSID == 0)), (TB,_T("Attempting to set Client MCSID twice")));
_UI.clientMCSID = mcsID; TRC_NRM((TB, _T("Client MCSID set to %#hx"), _UI.clientMCSID));
DC_END_FN(); } /* UI_SetClientMCSID */
/****************************************************************************/ /* Name: UI_GetClientMCSID */ /* */ /* Purpose: Return our MCS User ID */ /****************************************************************************/ UINT16 DCAPI UI_GetClientMCSID() { DC_BEGIN_FN("UI_GetClientMCSID");
TRC_ASSERT((_UI.clientMCSID != 0), (TB, _T("Client MCSID not set")));
TRC_DBG((TB, _T("Return client MCSID %#hx"), _UI.clientMCSID));
DC_END_FN(); return _UI.clientMCSID; } /* UI_GetClientMCSID */
/****************************************************************************/ /* Name: UI_SetServerMCSID */ /* */ /* Purpose: Notify UT of the sever's MCS user ID */ /****************************************************************************/ void DCAPI UI_SetServerMCSID(UINT16 mcsID) { DC_BEGIN_FN("UI_SetServerMCSID");
TRC_ASSERT(( ( mcsID == 0) || ( _UI.serverMCSID == 0) || ( _UI.serverMCSID == mcsID )), (TB, _T("Attempting to set Server MCSID twice %#hx->%#hx"), _UI.serverMCSID, mcsID));
_UI.serverMCSID = mcsID; TRC_NRM((TB, _T("Server MCSID set to %#hx"), _UI.serverMCSID));
DC_END_FN(); } /* UI_SetServerMCSID */
/****************************************************************************/ /* Name: UI_GetServerMCSID */ /* */ /* Purpose: Return the server's MCS user ID */ /****************************************************************************/ UINT16 DCAPI UI_GetServerMCSID() { DC_BEGIN_FN("UI_GetServerMCSID");
TRC_ASSERT((_UI.serverMCSID != 0), (TB, _T("Server MCSID not set")));
TRC_DBG((TB, _T("Return server MCSID %#hx"), _UI.serverMCSID));
DC_END_FN(); return _UI.serverMCSID; } /* UI_GetServerMCSID */
/****************************************************************************/ /* Name: UI_SetDesktopSize */ /* */ /* Purpose: Set the current desktop size */ /****************************************************************************/ void DCAPI UI_SetDesktopSize(PDCSIZE pDesktopSize) { DC_BEGIN_FN("UI_SetDesktopSize");
TRC_ASSERT((pDesktopSize->width != 0) && (pDesktopSize->height != 0), (TB,_T("Invalid size; width(%u) height(%u)"), pDesktopSize->width, pDesktopSize->height));
TRC_NRM((TB, _T("New desktop size (%u x %u)"), pDesktopSize->width, pDesktopSize->height)); _UI.desktopSize = *pDesktopSize;
DC_END_FN(); } /* UI_SetDesktopSize */
/****************************************************************************/ /* Name: UI_GetDesktopSize */ /* */ /* Purpose: Return the current desktop size */ /****************************************************************************/ void DCAPI UI_GetDesktopSize(PDCSIZE pDesktopSize) { DC_BEGIN_FN("UI_GetDesktopSize");
*pDesktopSize = _UI.desktopSize;
DC_END_FN(); } /* UI_GetDesktopSize */
#ifdef SMART_SIZING
void UI_NotifyOfDesktopSizeChange(LPARAM size); #endif
/****************************************************************************/ /* Name: UI_SetColorDepth */ /* */ /* Purpose: Set the current color depth */ /* */ /* Params: colorDepth - new color depth */ /****************************************************************************/ BOOL DCAPI UI_SetColorDepth(int colorDepth) { DC_BEGIN_FN("UI_SetColorDepth");
#ifdef DC_HICOLOR
TRC_ASSERT(((colorDepth == 4) || (colorDepth == 8) || (colorDepth == 15) || (colorDepth == 16) || (colorDepth == 24)), (TB,_T("Invalid color depth %d"), colorDepth)); if(!((colorDepth == 4) || (colorDepth == 8) || (colorDepth == 15) || (colorDepth == 16) || (colorDepth == 24))) { return FALSE; } #else
TRC_ASSERT(((colorDepth == 4) || (colorDepth == 8)), (TB,_T("Invalid color depth %d"), colorDepth)); #endif
TRC_NRM((TB, _T("New color depth %d"), colorDepth)); _UI.connectedColorDepth = colorDepth;
DC_END_FN(); return TRUE; } /* UI_SetColorDepth */
/****************************************************************************/ /* Name: UI_GetColorDepth */ /* */ /* Purpose: Return the current color depth */ /****************************************************************************/ int DCAPI UI_GetColorDepth() { DC_BEGIN_FN("UI_GetColorDepth");
DC_END_FN(); return _UI.connectedColorDepth; } /* UI_GetColorDepth */
/****************************************************************************/ /* Name: UI_SetCoreInitialized */ /* */ /* Purpose: Sets _UI.coreInitialized to TRUE */ /****************************************************************************/ void DCAPI UI_SetCoreInitialized() { DC_BEGIN_FN("UI_SetCoreInitialized");
TRC_NRM((TB, _T("Setting _UI.coreInitialized to TRUE"))); _UI.coreInitialized = TRUE;
DC_END_FN(); } /* UI_SetCoreInitialized */
/****************************************************************************/ /* Name: UI_IsCoreInitialized */ /* */ /* Purpose: Informs CO whether the core is initialized */ /****************************************************************************/ BOOL DCAPI UI_IsCoreInitialized() { DC_BEGIN_FN("UI_IsCoreInitialized"); DC_END_FN(); return _UI.coreInitialized; } /* UI_IsCoreInitialized */
/****************************************************************************/ /* Name: UI_SetShareID */ /* */ /* Purpose: Save the share ID */ /****************************************************************************/ void DCAPI UI_SetShareID(UINT32 shareID) { DC_BEGIN_FN("UI_SetShareID");
TRC_NRM((TB, _T("Setting _UI.shareID to 0x%x"), shareID)); _UI.shareID = shareID;
DC_END_FN(); } /* UI_SetShareID */
/****************************************************************************/ /* Name: UI_GetShareID */ /****************************************************************************/ UINT32 DCAPI UI_GetShareID() { DC_BEGIN_FN("UI_GetShareID"); DC_END_FN(); return _UI.shareID; } /* UI_GetShareID */
/****************************************************************************/ /* Name: UI_SetChannelID */ /* */ /* Purpose: Save the channel */ /****************************************************************************/ void DCAPI UI_SetChannelID(unsigned channelID) { DC_BEGIN_FN("UI_SetChannelID");
/************************************************************************/ /* We should only be setting the shareID if currently it has not */ /* been set ( = 0 ) and the new value is valid ( != 0 ) OR */ /* the current value is valid ( != 0) and the new value is not valid */ /* ( =0 ) */ /************************************************************************/ TRC_ASSERT((channelID == 0) || (_UI.channelID == 0), (TB, _T("Already set Channel ID (%#x)"), _UI.channelID));
TRC_NRM((TB, _T("Setting _UI.channelId to %d"), channelID)); _UI.channelID = channelID;
DC_END_FN(); } /* UI_SetChannelID */
/****************************************************************************/ /* Name: UI_GetChannelID */ /* */ /* Purpose: Get the share channel ID */ /****************************************************************************/ unsigned DCAPI UI_GetChannelID() { DC_BEGIN_FN("UI_GetChannelID");
TRC_ASSERT((_UI.channelID != 0), (TB, _T("Channel ID not set yet")));
DC_END_FN(); return _UI.channelID; } /* UI_GetChannelID */
/****************************************************************************/ /* Name: UI_GetOsMinorType */ /* */ /* Purpose: Get the OS type */ /* */ /* Returns: OS type (one of the TS_OSMINORTYPE constants) */ /****************************************************************************/ unsigned DCAPI UI_GetOsMinorType() { unsigned rc;
DC_BEGIN_FN("UI_GetOsMinorType");
rc = _UI.osMinorType;
DC_END_FN(); return rc; } /* UI_GetOsMinorType */
/****************************************************************************/ /* Name: UI_SetDisableCtrlAltDel */ /* */ /* Purpose: Save the fDisableCtrlAltDel flag */ /* */ /* Params: IN fDisableCtrlAltDel */ /****************************************************************************/ void DCAPI UI_SetDisableCtrlAltDel(BOOL fDisableCtrlAltDel) { DC_BEGIN_FN("UI_SetDisableCtrlAltDel");
TRC_NRM((TB, _T("Setting _UI.fDisableCtrlAltDel to %d"), fDisableCtrlAltDel)); _UI.fDisableCtrlAltDel = fDisableCtrlAltDel;
DC_END_FN(); } /* UI_SetDisableCtrlAltDel */
/****************************************************************************/ /* Name: UI_GetDisableCtrlAltDel */ /* */ /* Purpose: Get the fDisableCtrlAltDel flag */ /****************************************************************************/ BOOL DCAPI UI_GetDisableCtrlAltDel() { DC_BEGIN_FN("UI_GetDisableCtrlAltDel"); DC_END_FN(); return _UI.fDisableCtrlAltDel; } /* UI_GetDisableCtrlAltDel */
#ifdef SMART_SIZING
/****************************************************************************/ /* Name: UI_GetSmartSizing
/*
/* Purpose: Get the fSmartSizing flag
/****************************************************************************/ BOOL DCAPI UI_GetSmartSizing() { DC_BEGIN_FN("UI_GetSmartSizing"); DC_END_FN(); return _UI.fSmartSizing; } /* UI_GetSmartSizing */ #endif // SMART_SIZING
/****************************************************************************/ /* Name: UI_SetEnableWindowsKey */ /* */ /* Purpose: Save the fEnableWindowsKey flag */ /****************************************************************************/ void DCAPI UI_SetEnableWindowsKey(BOOL fEnableWindowsKey) { DC_BEGIN_FN("UI_SetEnableWindowsKey");
TRC_NRM((TB, _T("Setting _UI.fEnableWindowsKey to %d"), fEnableWindowsKey)); _UI.fEnableWindowsKey = fEnableWindowsKey;
DC_END_FN(); } /* UI_SetEnableWindowsKey */
/****************************************************************************/ /* Name: UI_GetEnableWindowsKey */ /* */ /* Purpose: Get the fEnableWindowsKey flag */ /* */ /* Returns: Flag state t/f */ /****************************************************************************/ BOOL DCAPI UI_GetEnableWindowsKey() { DC_BEGIN_FN("UI_GetEnableWindowsKey"); DC_END_FN(); return _UI.fEnableWindowsKey; } /* UI_GetEnableWindowsKey */
/****************************************************************************/ /* Name: UI_SetMouse */ /* */ /* Purpose: Save the fMouse flag */ /****************************************************************************/ void DCAPI UI_SetMouse(BOOL fMouse) { DC_BEGIN_FN("UI_SetMouse");
TRC_NRM((TB, _T("Setting _UI.fMouse to %d"), fMouse)); _UI.fMouse = fMouse;
DC_END_FN(); } /* UI_SetMouse */
/****************************************************************************/ /* Name: UI_GetMouse */ /* */ /* Purpose: Get the fMouse flag */ /****************************************************************************/ BOOL DCAPI UI_GetMouse() { DC_BEGIN_FN("UI_GetMouse"); DC_END_FN(); return _UI.fMouse; } /* UI_GetMouse */
/****************************************************************************/ /* Name: UI_SetDoubleClickDetect */ /* */ /* Purpose: Save the fDoubleClickDetect flag */ /* */ /* Params: IN fDoubleClickDetect */ /****************************************************************************/ DCVOID DCAPI UI_SetDoubleClickDetect(DCBOOL fDoubleClickDetect) { DC_BEGIN_FN("UI_SetDoubleClickDetect");
TRC_NRM((TB, _T("Setting _UI.fDoubleClickDetect to %d"), fDoubleClickDetect)); _UI.fDoubleClickDetect = fDoubleClickDetect;
DC_END_FN(); } /* UI_SetDoubleClickDetect */
/****************************************************************************/ /* Name: UI_GetDoubleClickDetect */ /* */ /* Purpose: Get the fDoubleClickDetect flag */ /****************************************************************************/ DCBOOL DCAPI UI_GetDoubleClickDetect(DCVOID) { DCBOOL fDoubleClickDetect;
DC_BEGIN_FN("UI_GetDoubleClickDetect");
fDoubleClickDetect = _UI.fDoubleClickDetect;
DC_END_FN(); return(fDoubleClickDetect); } /* UI_GetDoubleClickDetect */
/****************************************************************************/ /* Name: UI_SetSessionId */ /* */ /* Purpose: Save the SessionId */ /* */ /* Params: IN SessionId */ /****************************************************************************/ DCVOID DCAPI UI_SetSessionId(DCUINT32 SessionId) { DC_BEGIN_FN("UI_SetSessionId");
_UI.SessionId = SessionId;
DC_END_FN(); } /* UI_SetSessionId */
/****************************************************************************/ /* Name: UI_GetSessionId */ /* */ /* Purpose: Get the SessionId */ /* */ /* Returns: SessionId */ /****************************************************************************/ DCUINT32 DCAPI UI_GetSessionId(DCVOID) { DC_BEGIN_FN("UI_GetSessionId");
DC_END_FN(); return _UI.SessionId; } /* UI_GetSessionId */
/****************************************************************************/ /* Name: UI_SetDomain */ /* */ /* Purpose: Save the Domain */ /* */ /* Params: IN Domain */ /****************************************************************************/ HRESULT DCAPI UI_SetDomain(PDCWCHAR Domain) { HRESULT hr; DC_BEGIN_FN("UI_SetDomain");
hr = StringCchCopyW(_UI.Domain, SIZE_TCHARS(_UI.Domain), Domain); if (FAILED(hr)) { TRC_ERR((TB,_T("Error copying domain string: 0x%x"),hr)); }
DC_END_FN(); return hr; } /* UI_SetDomain */
/****************************************************************************/ /* Name: UI_GetDomain */ /* */ /* Purpose: Get the Domain */ /* */ /* Returns: Domain */ /* */ /* Params: OUT buffer to return Domain into */ /* IN size of return buffer */ /****************************************************************************/ DCVOID DCAPI UI_GetDomain(PDCUINT8 Domain, DCUINT size) { DC_BEGIN_FN("UI_GetDomain");
if (sizeof(_UI.Domain) < size) size = sizeof(_UI.Domain); DC_MEMCPY(Domain, _UI.Domain, size-1);
DC_END_FN(); } /* UI_GetDomain */
/****************************************************************************/ /* Name: UI_SetUseRedirectionUserName */ /* */ /* Purpose: Sets the UseRedirectionUserName flag */ /* */ /* Params: IN UserName */ /****************************************************************************/ _inline DCVOID DCAPI UI_SetUseRedirectionUserName(BOOL bVal) { _UI.UseRedirectionUserName = bVal; } /****************************************************************************/ /* Name: UI_GetUseRedirectionUserName */ /* */ /* Purpose: Returns the UseRedirectionUserName flag */ /* */ /****************************************************************************/ _inline BOOL DCAPI UI_GetUseRedirectionUserName() { return _UI.UseRedirectionUserName; }
/****************************************************************************/ /* Name: UI_SetUseSmartcardLogon */ /* */ /* Purpose: Sets the UseSmartcardLogon flag */ /* */ /* Params: IN UseSmartcardLogon */ /****************************************************************************/ _inline DCVOID DCAPI UI_SetUseSmartcardLogon(BOOL bVal) { _UI.fUseSmartcardLogon = bVal; }
/****************************************************************************/ /* Name: UI_GetUseSmartcardLogon */ /* */ /* Purpose: Returns the UseSmartcardLogon flag */ /* */ /****************************************************************************/ _inline BOOL DCAPI UI_GetUseSmartcardLogon() { return _UI.fUseSmartcardLogon; }
/****************************************************************************/ /* Name: UI_SetUserName */ /* */ /* Purpose: Save the UserName */ /* */ /* Params: IN UserName */ /****************************************************************************/ DCVOID DCAPI UI_SetUserName(PDCWCHAR UserName) { HRESULT hr; DC_BEGIN_FN("UI_SetUserName"); UI_SetUseRedirectionUserName(FALSE); hr = StringCchCopyW(_UI.UserName, SIZE_TCHARS(_UI.UserName), UserName); if (FAILED(hr)) { TRC_ERR((TB,_T("Error copying username string: 0x%x"),hr)); }
DC_END_FN(); } /* UI_SetUserName */
/****************************************************************************/ /* Name: UI_GetUserName */ /* */ /* Purpose: Get the UserName */ /* */ /* Returns: UserName */ /* */ /* Params: OUT buffer to return UserName into */ /* IN size of return buffer */ /****************************************************************************/ DCVOID DCAPI UI_GetUserName(PDCUINT8 UserName, DCUINT size) { DC_BEGIN_FN("UI_GetUserName");
if (sizeof(_UI.UserName) < size) size = sizeof(_UI.UserName); DC_MEMCPY(UserName, _UI.UserName, size-1);
DC_END_FN(); } /* UI_GetUserName */
/****************************************************************************/ /* Name: UI_SetRedirectionUserName */ /* */ /* Purpose: Save the RedirectionUserName */ /* */ /* Params: IN RedirectionUserName */ /****************************************************************************/ DCVOID DCAPI UI_SetRedirectionUserName(PDCWCHAR RedirectionUserName) { HRESULT hr; DC_BEGIN_FN("UI_SetRedirectionUserName"); UI_SetUseRedirectionUserName(TRUE); hr = StringCchCopyW(_UI.RedirectionUserName, SIZE_TCHARS(_UI.RedirectionUserName), RedirectionUserName); if (FAILED(hr)) { TRC_ERR((TB,_T("Error copying username string: 0x%x"),hr)); }
DC_END_FN(); } /* UI_SetRedirectionUserName */
/****************************************************************************/ /* Name: UI_GetRedirectionUserName */ /* */ /* Purpose: Get the RedirectionUserName */ /* */ /* Returns: RedirectionUserName */ /* */ /* Params: OUT buffer to return RedirectionUserName into */ /* IN size of return buffer */ /****************************************************************************/ DCVOID DCAPI UI_GetRedirectionUserName(PDCUINT8 RedirectionUserName, DCUINT size) { DC_BEGIN_FN("UI_GetRedirectionUserName");
if (sizeof(_UI.RedirectionUserName) < size) size = sizeof(_UI.RedirectionUserName); DC_MEMCPY(RedirectionUserName, _UI.RedirectionUserName, size-1);
DC_END_FN(); } /* UI_GetRedirectionUserName */
/****************************************************************************/ /* Set and get load balance info, check if redirected */ /****************************************************************************/ BOOL DCAPI UI_SetLBInfo(PBYTE, unsigned); BSTR DCAPI UI_GetLBInfo() { return _UI.bstrScriptedLBInfo; }
BOOL DCAPI UI_IsClientRedirected() { return _UI.ClientIsRedirected; }
BSTR DCAPI UI_GetRedirectedLBInfo() { return _UI.bstrRedirectionLBInfo; }
/****************************************************************************/ /* Set and get to inform activeX control about TS public key */ /****************************************************************************/ DCBOOL DCAPI UI_GetNotifyTSPublicKey() { #ifdef REDIST_CONTROL
return FALSE; #else
return _UI.fNotifyTSPublicKey; #endif
}
VOID DCAPI UI_SetNotifyTSPublicKey(BOOL fNotify) { #ifndef REDIST_CONTROL
_UI.fNotifyTSPublicKey = fNotify; #endif
return; } /****************************************************************************/ /* Name: UI_GetUserName */ /* */ /* Purpose: Instruct UI to connect with already connected socket */ /* go thru normal connect sequence */ /* */ /* Returns: TRUE/FALSE */ /* */ /* Params: tdSocket : Valid connected socket or INVALID_SOCKET */ /* */ /* NOTE : Salem specific call */ /****************************************************************************/ DCBOOL DCAPI SetConnectWithEndpoint( SOCKET tdSocket ) {
#if REDIST_CONTROL
return FALSE;
#else
DCBOOL fStatus = TRUE; DC_BEGIN_FN("SetConnectWithEndpoint");
//
// Salem pass connected socket before actually invoke
// connect(), at that point connectionStatus is
// UI_STATUS_INITIALIZING
//
if( _UI.connectionStatus == UI_STATUS_INITIALIZING || _UI.connectionStatus == UI_STATUS_DISCONNECTED ) { if( INVALID_SOCKET == tdSocket ) { // reset back to default.
UI_SetConnectionMode( CONNECTIONMODE_INITIATE ); } else { UI_SetConnectionMode( CONNECTIONMODE_CONNECTEDENDPOINT ); _UI.TDSocket = tdSocket; } } else { fStatus = FALSE; }
DC_END_FN(); return fStatus;
#endif
}
/****************************************************************************/ /* Name: UI_GetConnectionMode */ /* */ /* Purpose: Set current connecting mode */ /****************************************************************************/ _inline CONNECTIONMODE DCAPI UI_GetConnectionMode() { CONNECTIONMODE connMode;
DC_BEGIN_FN("UI_GetConnectMode"); connMode = _UI.ConnectMode; DC_END_FN(); return connMode; } /* UI_SetConnectMode */
/****************************************************************************/ /* Name: UI_SetConnectMode */ /* */ /* Purpose: Set current connecting mode */ /****************************************************************************/ _inline DCVOID DCAPI UI_SetConnectionMode(CONNECTIONMODE connMode) { DC_BEGIN_FN("UI_SetConnectionMode"); _UI.ConnectMode = connMode; DC_END_FN(); } /* UI_SetConnectMode */
/****************************************************************************/ /* Name: UI_SetPassword */ /* */ /* Purpose: Save the Password */ /* */ /* Params: IN Password */ /****************************************************************************/ DCVOID DCAPI UI_SetPassword(PDCUINT8 Password) { DC_BEGIN_FN("UI_SetPassword");
DC_MEMCPY(_UI.Password, Password, sizeof(_UI.Password));
DC_END_FN(); } /* UI_SetPassword */
/****************************************************************************/ /* Name: UI_GetPassword */ /* */ /* Purpose: Get the Password */ /* */ /* Returns: Password */ /* */ /* Params: OUT buffer to return Password into */ /* IN size of return buffer */ /****************************************************************************/ DCVOID DCAPI UI_GetPassword(PDCUINT8 Password, DCUINT size) { DC_BEGIN_FN("UI_GetPassword");
if (sizeof(_UI.Password) < size) size = sizeof(_UI.Password); DC_MEMCPY(Password, _UI.Password, size);
DC_END_FN(); } /* UI_GetPassword */
/****************************************************************************/ /* Name: UI_SetSalt */ /* */ /* Purpose: Save the Salt */ /* */ /* Params: IN Salt */ /****************************************************************************/ DCVOID DCAPI UI_SetSalt(PDCUINT8 Salt) { DC_BEGIN_FN("UI_SetSalt");
DC_MEMCPY(_UI.Salt, Salt, sizeof(_UI.Salt));
DC_END_FN(); } /* UI_SetSalt */
/****************************************************************************/ /* Name: UI_GetSalt */ /* */ /* Purpose: Get the Salt */ /* */ /* Returns: Salt */ /* */ /* Params: OUT buffer to return Salt into */ /* IN size of return buffer */ /* */ /****************************************************************************/ DCVOID DCAPI UI_GetSalt(PDCUINT8 Salt, DCUINT size) { DC_BEGIN_FN("UI_GetSalt");
if (sizeof(_UI.Salt) < size) size = sizeof(_UI.Salt); DC_MEMCPY(Salt, _UI.Salt, size);
DC_END_FN(); } /* UI_GetSalt */
/****************************************************************************/ /* Name: UI_SetAlternateShell */ /* */ /* Purpose: Save the AlternateShell */ /* */ /* Params: IN AlternateShell */ /****************************************************************************/ HRESULT DCAPI UI_SetAlternateShell(PDCWCHAR AlternateShell) { HRESULT hr; DC_BEGIN_FN("UI_SetAlternateShell");
hr = StringCchCopyW(_UI.AlternateShell, SIZE_TCHARS(_UI.AlternateShell), AlternateShell); if (FAILED(hr)) { TRC_ERR((TB,_T("Error copying alternate shell string: 0x%x"),hr)); }
DC_END_FN(); return hr; } /* UI_SetAlternateShell */
/****************************************************************************/ /* Name: UI_GetAlternateShell */ /* */ /* Purpose: Get the AlternateShell */ /* */ /* Returns: AlternateShell */ /* */ /* Params: OUT buffer to return AlternateShell into */ /* IN size of return buffer */ /****************************************************************************/ DCVOID DCAPI UI_GetAlternateShell(PDCUINT8 AlternateShell, DCUINT size) { DC_BEGIN_FN("UI_GetAlternateShell");
if (sizeof(_UI.AlternateShell) < size) size = sizeof(_UI.AlternateShell); DC_MEMCPY(AlternateShell, _UI.AlternateShell, size-1);
DC_END_FN(); } /* UI_GetAlternateShell */
/****************************************************************************/ /* Name: UI_SetWorkingDir */ /* */ /* Purpose: Save the WorkingDir */ /****************************************************************************/ HRESULT DCAPI UI_SetWorkingDir(PDCWCHAR WorkingDir) { HRESULT hr; DC_BEGIN_FN("UI_SetWorkingDir");
hr = StringCchCopyW(_UI.WorkingDir, SIZE_TCHARS(_UI.WorkingDir), WorkingDir); if (FAILED(hr)) { TRC_ERR((TB,_T("Error copying WorkingDir string: 0x%x"),hr)); }
DC_END_FN(); return hr; } /* UI_SetWorkingDir */
/****************************************************************************/ /* Name: UI_GetWorkingDir */ /* */ /* Purpose: Get the WorkingDir */ /* */ /* Returns: WorkingDir */ /* */ /* Params: OUT buffer to return WorkingDir into */ /* IN size of return buffer */ /****************************************************************************/ DCVOID DCAPI UI_GetWorkingDir(PDCUINT8 WorkingDir, DCUINT size) { DC_BEGIN_FN("UI_GetWorkingDir");
if (sizeof(_UI.WorkingDir) < size) size = sizeof(_UI.WorkingDir);
DC_MEMCPY(WorkingDir, _UI.WorkingDir, size-1);
DC_END_FN(); } /* UI_GetWorkingDir */
/****************************************************************************/ /* Name: UI_SetAutoLogon */ /* */ /* Purpose: Save whether we automatically logon */ /****************************************************************************/ DCVOID DCAPI UI_SetAutoLogon(DCUINT AutoLogon) { DC_BEGIN_FN("UI_SetAutoLogon");
TRC_NRM((TB, _T("Setting _UI.AutoLogon to %d"), AutoLogon)); _UI.fAutoLogon = AutoLogon;
DC_END_FN(); } /* UI_SetAutoLogon */
/****************************************************************************/ /* Name: UI_GetAutoLogon */ /* */ /* Purpose: Get whether we automatically logon */ /* */ /* Returns: autlogon flag */ /****************************************************************************/ DCUINT DCAPI UI_GetAutoLogon(DCVOID) { DCUINT rc;
DC_BEGIN_FN("UI_GetAutoLogon");
rc = _UI.fAutoLogon;
DC_END_FN(); return(rc); } /* UI_GetAutoLogon */
/****************************************************************************/ /* Name: UI_SetMaximizeShell */ /* */ /* Purpose: Save whether we Maximize the shell application */ /* */ /* Params: IN MaximizeShell */ /****************************************************************************/ DCVOID DCAPI UI_SetMaximizeShell(DCUINT MaximizeShell) { DC_BEGIN_FN("UI_SetMaximizeShell");
TRC_NRM((TB, _T("Setting _UI.fMaximizeShell to %d"), MaximizeShell)); _UI.fMaximizeShell = MaximizeShell;
DC_END_FN(); } /* UI_SetMaximizeShell */
/****************************************************************************/ /* Name: UI_GetMaximizeShell */ /* */ /* Purpose: Get whether we Maximize the shell application */ /* */ /* Returns: MaximizeShell flag */ /****************************************************************************/ DCUINT DCAPI UI_GetMaximizeShell(DCVOID) { DCUINT rc;
DC_BEGIN_FN("UI_GetMaximizeShell");
rc = _UI.fMaximizeShell;
DC_END_FN(); return(rc); } /* UI_GetMaximizeShell */
/****************************************************************************/ /* Name: UI_SetBitmapPersistence */ /* */ /* Purpose: Save the fBitmapPersistence flag */ /* */ /* Params: IN fBitmapPersistence */ /****************************************************************************/ DCVOID DCAPI UI_SetBitmapPersistence(DCBOOL fBitmapPersistence) { DC_BEGIN_FN("UI_SetBitmapPersistence");
TRC_NRM((TB, _T("Setting _UI.fBitmapPersistence to %d"), fBitmapPersistence)); _UI.fBitmapPersistence = fBitmapPersistence;
DC_END_FN(); } /* UI_SetBitmapPersistence */
/****************************************************************************/ /* Name: UI_GetBitmapPersistence */ /* */ /* Purpose: Get the fBitmapPersistence */ /****************************************************************************/ DCBOOL DCAPI UI_GetBitmapPersistence(DCVOID) { DC_BEGIN_FN("UI_GetBitmapPersistence");
DC_END_FN(); return _UI.fBitmapPersistence; } /* UI_GetBitmapPersistence */
/****************************************************************************/ /* Name: UI_SetMCSPort */ /* */ /* Purpose: Set the MCSPort */ /* */ /* Params: IN MCSPort */ /****************************************************************************/ DCVOID DCAPI UI_SetMCSPort(DCUINT16 MCSPort) { DC_BEGIN_FN("UI_SetMCSPort");
TRC_NRM((TB, _T("Setting _UI.MCSPort to %d"), MCSPort));
_UI.MCSPort = MCSPort;
DC_END_FN(); } /* UI_SetMCSPort */
/****************************************************************************/ /* Name: UI_GetMCSPort */ /* */ /* Purpose: Get the MCSPort */ /****************************************************************************/ UINT16 DCAPI UI_GetMCSPort(void) { UINT16 MCSPort;
DC_BEGIN_FN("UI_GetMCSPort");
MCSPort = _UI.MCSPort;
DC_END_FN(); return(MCSPort); } /* UI_GetMCSPort */
/****************************************************************************/ /* Name: UI_SetServerName */ /* */ /* Purpose: Save name of currently connected Server */ /****************************************************************************/ HRESULT DCAPI UI_SetServerName(LPTSTR pName) { HRESULT hr; DC_BEGIN_FN("UI_SetServerName");
hr = StringCchCopy(_UI.strAddress, SIZE_TCHARS(_UI.strAddress), pName);
if (FAILED(hr)) { TRC_ERR((TB,_T("Error copying straddress string: 0x%x"),hr)); }
DC_END_FN(); return hr; } /* UI_SetServerName */
/****************************************************************************/ /* Name: UI_GetServerName */ /* */ /* Purpose: Return name of currently connected Server */ /* */ /* Params: pName (returned) - name of Server */ /****************************************************************************/ HRESULT UI_GetServerName(LPTSTR pszName, UINT cchName) { HRESULT hr; DC_BEGIN_FN("UI_GetServerName");
hr = StringCchCopy(pszName, cchName, pszName);
DC_END_FN(); return hr; } /* UI_GetServerName */
/****************************************************************************/ /* Name: UI_SetTDSocket */ /* */ /* Purpose: Save the connection socket for this session */ /****************************************************************************/ _inline DCVOID DCAPI UI_SetTDSocket(SOCKET TDSock) { DC_BEGIN_FN("UI_SetSocket");
TRC_NRM((TB, _T("Save TD socket handle %p"), TDSock)); _UI.TDSocket = TDSock;
DC_END_FN(); }
/****************************************************************************/ /* Name: UI_GetTDSocket */ /* */ /* Purpose: Return the connection socket for this session */ /****************************************************************************/ _inline SOCKET DCAPI UI_GetTDSocket(void) { DC_BEGIN_FN("UI_GetTDSocket");
DC_END_FN(); return _UI.TDSocket; }
void UI_SetContainerHandledFullScreen(BOOL fContHandlesFScr) { _UI.fContainerHandlesFullScreenToggle = fContHandlesFScr; }
BOOL UI_GetContainerHandledFullScreen() { return _UI.fContainerHandlesFullScreenToggle; }
/****************************************************************************/ // SetServerRedirectionInfo
//
// Used on receipt of a TS_SERVER_REDIRECT_PDU to store the info needed to
// redirect the client to a new server. Sets the DoRedirection flag as well
// to indicate these data members are set and ready for use. Also sets the
// ClientIsRedirected flag, which is longer-lived than the DoRedirection
// flag and is used to send the correct cookie when redirected.
/****************************************************************************/ HRESULT UI_SetServerRedirectionInfo( UINT32 SessionID, LPTSTR pszServerAddress, PBYTE LBInfo, unsigned LBInfoSize, BOOL fNeedRedirect );
/****************************************************************************/ // UI_GetDoRedirection
/****************************************************************************/ BOOL UI_GetDoRedirection() { DC_BEGIN_FN("UI_GetDoRedirection"); DC_END_FN(); return _UI.DoRedirection; }
/****************************************************************************/ // UI_ClearDoRedirection
/****************************************************************************/ void UI_ClearDoRedirection() { DC_BEGIN_FN("UI_GetDoRedirection"); _UI.DoRedirection = FALSE; DC_END_FN(); }
/****************************************************************************/ // UI_GetRedirectionSessionID
/****************************************************************************/ UINT32 UI_GetRedirectionSessionID() { DC_BEGIN_FN("UI_GetRedirectionSessionID"); DC_END_FN(); return _UI.RedirectionSessionID; }
DCUINT UI_GetAudioRedirectionMode(); VOID UI_SetAudioRedirectionMode(DCUINT audioMode);
BOOL UI_GetDriveRedirectionEnabled(); VOID UI_SetDriveRedirectionEnabled(BOOL fEnable);
BOOL UI_GetPrinterRedirectionEnabled(); VOID UI_SetPrinterRedirectionEnabled(BOOL fEnable);
BOOL UI_GetPortRedirectionEnabled(); VOID UI_SetPortRedirectionEnabled(BOOL fEnable);
BOOL UI_GetSCardRedirectionEnabled(); VOID UI_SetSCardRedirectionEnabled(BOOL fEnable);
VOID UI_OnDeviceChange(WPARAM wParam, LPARAM lParam);
PRDPDR_DATA UI_GetRdpDrInitData() {return &_drInitData;}
VOID UI_SetConnectToServerConsole(BOOL fConnectToServerConsole) { _UI.fConnectToServerConsole = fConnectToServerConsole; }
BOOL UI_GetConnectToServerConsole() { return _UI.fConnectToServerConsole; }
VOID UI_SetfUseFIPS(BOOL fUseFIPS) { _UI.fUseFIPS = fUseFIPS; }
HWND UI_GetInputWndHandle();
BOOL UI_InjectVKeys(/*[in]*/ LONG numKeys, /*[in]*/ short* pfArrayKeyUp, /*[in]*/ LONG* plKeyData);
BOOL UI_SetMinsToIdleTimeout(LONG minsToTimeout); LONG UI_GetMinsToIdleTimeout();
DCVOID DCAPI UI_SetServerErrorInfo(ULONG_PTR errInfo); EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_SetServerErrorInfo);
UINT32 UI_GetServerErrorInfo();
VOID UI_SetEnableBBar(BOOL b) {_UI.fBBarEnabled = b;} BOOL UI_GetEnableBBar() {return _UI.fBBarEnabled;}
VOID UI_SetBBarPinned(BOOL b); BOOL UI_GetBBarPinned();
VOID UI_SetBBarShowMinimize(BOOL b) {_UI.fBBarShowMinimizeButton = b;} BOOL UI_GetBBarShowMinimize() {return _UI.fBBarShowMinimizeButton;} VOID UI_SetBBarShowRestore(BOOL b) {_UI.fBBarShowRestoreButton = b;} BOOL UI_GetBBarShowRestore() {return _UI.fBBarShowRestoreButton;}
VOID UI_SetGrabFocusOnConnect(BOOL b) {_UI.fGrabFocusOnConnect = b;} BOOL UI_GetGrabFocusOnConnect() {return _UI.fGrabFocusOnConnect;}
BOOL UI_GetLocalSessionId(PDCUINT32 pSessionId); HWND UI_GetBmpCacheMonitorHandle();
#ifdef DISABLE_SHADOW_IN_FULLSCREEN
#ifdef USE_BBAR
DCVOID DCAPI UI_GetBBarState(ULONG_PTR pData) { int *pstate = (int *)pData;
if (_pBBar) { *pstate = _pBBar->GetState(); } else { *pstate = CBBar::bbarNotInit; } } EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_GetBBarState);
DCVOID DCAPI UI_GetBBarLowerAspect(ULONG_PTR pData) { RECT *prect = (RECT *)pData;
if (_pBBar) { _pBBar->GetBBarLoweredAspect(prect); } else { prect->left = 0; prect->top = 0; prect->right = 0; prect->bottom = 0; } } EXPOSE_CD_SIMPLE_NOTIFICATION_FN(CUI, UI_GetBBarLowerAspect);
DCVOID UI_OnNotifyBBarRectChange(RECT *prect); DCVOID UI_OnNotifyBBarVisibleChange(int BBarVisible); #endif
#endif // DISABLE_SHADOW_IN_FULLSCREEN
BOOL UI_GetStartFullScreen() {return _UI.fStartFullScreen;} VOID UI_SetStartFullScreen(BOOL f) {_UI.fStartFullScreen = f;}
//
// Performance flags are currently a disabled feature list
// that is sent up to the server to selectively enable/disable
// certain features to optimize bandwidth
//
DWORD UI_GetPerformanceFlags() {return _UI.dwPerformanceFlags;} VOID UI_SetPerformanceFlags(DWORD dw) {_UI.dwPerformanceFlags = dw;}
VOID UI_SetControlInstance(IUnknown* pUnkControl); IUnknown* UI_GetControlInstance();
BOOL UI_GetEnableAutoReconnect() {return _UI.fEnableAutoReconnect;} VOID UI_SetEnableAutoReconnect(BOOL b) {_UI.fEnableAutoReconnect = b;}
ULONG UI_GetAutoReconnectCookieLen() {return _UI.cbAutoReconnectCookieLen;} PBYTE UI_GetAutoReconnectCookie() {return _UI.pAutoReconnectCookie;} BOOL UI_SetAutoReconnectCookie(PBYTE pCookie, ULONG cbLen); BOOL UI_CanAutoReconnect();
LONG UI_GetMaxArcAttempts() {return _UI.MaxAutoReconnectionAttempts;} VOID UI_SetMaxArcAttempts(LONG l) {_UI.MaxAutoReconnectionAttempts = l;}
//
// Built-in ARC UI functions
//
BOOL UI_StartAutoReconnectDlg(); BOOL UI_StopAutoReconnectDlg(); BOOL UI_IsAutoReconnecting() {return _pArcUI ? TRUE : FALSE;}
//
// Received autoreconenct status from the server
//
VOID UI_OnReceivedArcStatus(LONG arcStatus); VOID UI_OnAutoReconnectStopped();
private: //
// Class pointers to callee's
//
CCO* _pCo; CCLX* _clx; CUT* _pUt; CTD* _pTd; CIH* _pIh; CCD* _pCd; COP* _pOp; CChan* _pCChan; CUH* _pUh;
#ifdef USE_BBAR
CBBar* _pBBar; #endif
//
// Struct handed off to winsock
// for hostname lookup
//
PBYTE _pHostData;
#ifdef USE_BBAR
//
// Last mouse pos used for bbar hotzone tracking
//
BOOL _fBBarUnhideTimerActive; POINT _ptBBarLastMousePos; #endif
// Handling recursive WM_SIZE for scrollbars
BOOL _fRecursiveScrollBarMsg;
//RDPDR internal plugin initialization data
RDPDR_DATA _drInitData;
BOOL _fRecursiveSizeMsg;
BOOL _fIhHasFocus;
#ifndef OS_WINCE
ITfLangBarMgr *_pITLBM; BOOL _fLangBarWasHidden; DWORD _dwLangBarFlags; BOOL _fLangBarStateSaved;
//
// We use the shell taskbar API to ensure the taskbar
// hides itself when we go fullscreen in control-handled
// fullscreen
//
//Cached interface pointer to shell task bar
ITaskbarList2* _pTaskBarList2; //Flag indicaticating we already tried to get the TaskBarList2
//so we shouldn't bother trying again
BOOL _fQueriedForTaskBarList2; #endif
BOOL _fTerminating;
//
// Autoreconnect dialog
//
CAutoReconnectUI* _pArcUI;
public: //
// Bucket to all the objects for this client instance
//
CObjs _Objects; }; #endif // _H_WUI
|