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.
|
|
//--------------------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation, 1996
//
// Description:
//
// Microsoft Internet LDAP Client Xaction Data class
//
//
// History
// davidsan 04-29-96 Created
//
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//
// INCLUDES
//
//--------------------------------------------------------------------------------------------
#include "ldappch.h"
#include "lclilist.h"
#include "lclixd.h"
//--------------------------------------------------------------------------------------------
//
// PROTOTYPES
//
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//
// GLOBALS
//
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//
// FUNCTIONS
//
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//
// CLASSES
//
//--------------------------------------------------------------------------------------------
CXactionData::CXactionData() { ::InitializeCriticalSection(&m_cs);
m_hsemSignal = NULL; m_pxb = NULL; m_xid = 0; m_xtype = xtypeNil; m_fCancelled = FALSE; m_fOOM = FALSE; m_pxdNext = NULL; }
CXactionData::~CXactionData() { ::DeleteCriticalSection(&m_cs);
if (m_hsemSignal) CloseHandle(m_hsemSignal);
if (m_pxb) this->DeletePxbChain(m_pxb); }
void CXactionData::DeletePxbChain(PXB pxb) { PXB pxbNext;
while (pxb) { pxbNext = pxb->pxbNext; delete [] pxb->pbData; delete pxb; pxb = pxbNext; } }
BOOL CXactionData::FInit(XID xid, DWORD xtype) { ::EnterCriticalSection(&m_cs); m_xid = xid; m_xtype = xtype; m_hsemSignal = CreateSemaphore(NULL, 0, 64000, NULL); m_pxb = NULL; m_pxdNext = NULL; m_fCancelled = FALSE; m_fOOM = FALSE; ::LeaveCriticalSection(&m_cs); return TRUE; }
BOOL CXactionData::FAddBuffer(BYTE *pb, int cb) { BOOL fRet = FALSE; PXB pxb; PXB pxbPrev;
::EnterCriticalSection(&m_cs); pxb = new XB; if (!pxb) goto LBail; pxb->pbData = new BYTE[cb]; if (!pxb->pbData) { delete pxb; goto LBail; } pxb->cbData = cb; CopyMemory(pxb->pbData, pb, cb); pxb->pxbNext = NULL; fRet = TRUE;
if (m_pxb) { pxbPrev = m_pxb; while (pxbPrev->pxbNext) pxbPrev = pxbPrev->pxbNext; pxbPrev->pxbNext = pxb; } else { m_pxb = pxb; } LBail: ::LeaveCriticalSection(&m_cs); return fRet; }
BOOL CXactionData::FGetBuffer(BYTE **ppb, int *pcb) { BOOL fRet = FALSE; PXB pxb; ::EnterCriticalSection(&m_cs);
if (!m_pxb) { goto LBail; }
if (!m_pxb->pbData) { goto LBail; } pxb = m_pxb; m_pxb = m_pxb->pxbNext; *ppb = pxb->pbData; *pcb = pxb->cbData; delete pxb; fRet = TRUE; LBail: ::LeaveCriticalSection(&m_cs); return fRet; }
BOOL CXactionData::FHasData() { BOOL fRet; ::EnterCriticalSection(&m_cs); fRet = m_pxb && m_pxb->pbData; ::LeaveCriticalSection(&m_cs); return fRet; }
|