Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

217 lines
9.4 KiB

/**MOD+**********************************************************************/
/* Module: orint.cpp */
/* */
/* Purpose: Output Requestor internal functions */
/* */
/* Copyright(C) Microsoft Corporation 1997 */
/* */
/****************************************************************************/
#include <adcg.h>
extern "C" {
#define TRC_GROUP TRC_GROUP_CORE
#define TRC_FILE "worint"
#include <atrcapi.h>
}
#include "autil.h"
#include "wui.h"
#include "or.h"
#include "sl.h"
/**PROC+*********************************************************************/
/* Name: ORSendRefreshRectanglePDU */
/* */
/* Purpose: Builds and sends a RefreshRectanglePDU */
/* */
/* Returns: Nothing */
/* */
/* Params: None */
/* */
/**PROC-*********************************************************************/
DCVOID DCINTERNAL COR::ORSendRefreshRectanglePDU(DCVOID)
{
PTS_REFRESH_RECT_PDU pSendBuffer;
SL_BUFHND bufHandle;
DC_BEGIN_FN("ORSendRefreshRectanglePDU");
/************************************************************************/
/* If we can't get a buffer, abandon the send */
/************************************************************************/
if (!_pSl->SL_GetBuffer(TS_REFRESH_RECT_PDU_SIZE,
(PPDCUINT8) &pSendBuffer,
&bufHandle))
{
TRC_NRM((TB, _T("Failed to GetBuffer")));
DC_QUIT;
}
TRC_NRM((TB, _T("GetBuffer succeeded")));
/************************************************************************/
/* Fill in the buffer with a RefreshRect PDU */
/************************************************************************/
DC_MEMSET(pSendBuffer, 0, TS_REFRESH_RECT_PDU_SIZE);
pSendBuffer->shareDataHeader.shareControlHeader.pduType =
TS_PROTOCOL_VERSION | TS_PDUTYPE_DATAPDU;
pSendBuffer->shareDataHeader.shareControlHeader.pduSource =
_pUi->UI_GetClientMCSID();
TS_DATAPKT_LEN(pSendBuffer) = TS_REFRESH_RECT_PDU_SIZE;
TS_UNCOMP_LEN(pSendBuffer) = TS_REFRESH_RECT_UNCOMP_LEN;
pSendBuffer->shareDataHeader.shareID = _pUi->UI_GetShareID();
pSendBuffer->shareDataHeader.streamID = TS_STREAM_LOW;
pSendBuffer->shareDataHeader.pduType2 = TS_PDUTYPE2_REFRESH_RECT;
/************************************************************************/
/* Set a single rectangle. */
/************************************************************************/
pSendBuffer->numberOfAreas = 1;
RECT_TO_TS_RECTANGLE16(&(pSendBuffer->areaToRefresh[0]),
&_OR.invalidRect)
/************************************************************************/
/* Now send the buffer */
/************************************************************************/
_pSl->SL_SendPacket((PDCUINT8)pSendBuffer,
TS_REFRESH_RECT_PDU_SIZE,
RNS_SEC_ENCRYPT,
bufHandle,
_pUi->UI_GetClientMCSID(),
_pUi->UI_GetChannelID(),
TS_HIGHPRIORITY);
DC_MEMSET(&_OR.invalidRect, 0, sizeof(RECT));
_OR.invalidRectEmpty = TRUE;
DC_EXIT_POINT:
DC_END_FN();
return;
} /* ORSendRefreshRectanglePDU */
/**PROC+*********************************************************************/
/* Name: ORSendSuppressOutputPDU */
/* */
/* Purpose: Builds and sends a SuppressOutputPDU */
/* */
/* Returns: Nothing */
/* */
/* Params: None */
/* */
/**PROC-*********************************************************************/
DCVOID DCINTERNAL COR::ORSendSuppressOutputPDU(DCVOID)
{
PTS_SUPPRESS_OUTPUT_PDU pSendBuffer;
SL_BUFHND bufHandle;
DCUINT numberOfRectangles;
TS_RECTANGLE16 tsRect;
DCSIZE desktopSize;
DC_BEGIN_FN("ORSendSuppressOutputPDU");
TRC_ASSERT((_OR.pendingSendSuppressOutputPDU),
(TB,_T("Not expecting to send SupressOutput")));
/************************************************************************/
/* If _OR.outputSuppressed is set then the number of rectangles is 0, if */
/* not the number of rectangle is 1 and we should put the desktop area */
/* in the PDU */
/************************************************************************/
if (_OR.outputSuppressed)
{
numberOfRectangles = 0;
// prevent tsRect not initialized warning
tsRect.top = 0;
tsRect.left = 0;
tsRect.bottom = 0;
tsRect.right = 0;
}
else
{
numberOfRectangles = 1;
/********************************************************************/
/* Get the rectangle to send and put it in tsRect */
/********************************************************************/
_pUi->UI_GetDesktopSize(&desktopSize);
tsRect.top = (DCUINT16) 0;
tsRect.left = (DCUINT16) 0;
tsRect.bottom = (DCUINT16) desktopSize.height;
tsRect.right = (DCUINT16) desktopSize.width;
}
/************************************************************************/
/* If we can't get a buffer, abandon the send */
/************************************************************************/
if (!_pSl->SL_GetBuffer( TS_SUPPRESS_OUTPUT_PDU_SIZE(numberOfRectangles),
(PPDCUINT8) &pSendBuffer,
&bufHandle))
{
TRC_NRM((TB, _T("Get Buffer failed")));
DC_QUIT;
}
TRC_NRM((TB, _T("Get Buffer succeeded")));
/************************************************************************/
/* Fill in the buffer with a RefreshRec PDU */
/************************************************************************/
DC_MEMSET(pSendBuffer,
0,
TS_SUPPRESS_OUTPUT_PDU_SIZE(numberOfRectangles));
pSendBuffer->shareDataHeader.shareControlHeader.pduType =
TS_PROTOCOL_VERSION | TS_PDUTYPE_DATAPDU;
pSendBuffer->shareDataHeader.shareControlHeader.pduSource =
_pUi->UI_GetClientMCSID();
TS_DATAPKT_LEN(pSendBuffer)
= (DCUINT16) TS_SUPPRESS_OUTPUT_PDU_SIZE(numberOfRectangles);
TS_UNCOMP_LEN(pSendBuffer)
= (DCUINT16) TS_SUPPRESS_OUTPUT_UNCOMP_LEN(numberOfRectangles);
pSendBuffer->shareDataHeader.shareID = _pUi->UI_GetShareID();
pSendBuffer->shareDataHeader.streamID = TS_STREAM_LOW;
pSendBuffer->shareDataHeader.pduType2 = TS_PDUTYPE2_SUPPRESS_OUTPUT;
pSendBuffer->numberOfRectangles = (DCUINT8) numberOfRectangles;
/************************************************************************/
/* If we have a rectangle to put into the PDU, put it in */
/************************************************************************/
if (numberOfRectangles == 1)
{
DC_MEMCPY(pSendBuffer->includedRectangle,
&tsRect,
sizeof(TS_RECTANGLE16));
}
TRC_NRM((TB, _T("Sending SuppressOutputPDU")));
/************************************************************************/
/* Send the PDU */
/************************************************************************/
_pSl->SL_SendPacket((PDCUINT8)pSendBuffer,
TS_SUPPRESS_OUTPUT_PDU_SIZE(numberOfRectangles),
RNS_SEC_ENCRYPT,
bufHandle,
_pUi->UI_GetClientMCSID(),
_pUi->UI_GetChannelID(),
TS_HIGHPRIORITY);
_OR.pendingSendSuppressOutputPDU = FALSE;
DC_EXIT_POINT:
DC_END_FN();
return;
} /* ORSendSuppressOutputPDU */