330 lines
8.3 KiB
C++
330 lines
8.3 KiB
C++
//****************************************************************************
|
|
//
|
|
// Module: ULS.DLL
|
|
// File: ulsprot.cpp
|
|
// Content: This file contains the Protocol object.
|
|
// History:
|
|
// Wed 17-Apr-1996 11:13:54 -by- Viroon Touranachun [viroont]
|
|
//
|
|
// Copyright (c) Microsoft Corporation 1996-1997
|
|
//
|
|
//****************************************************************************
|
|
|
|
#include "ulsp.h"
|
|
#include "ulsprot.h"
|
|
#include "attribs.h"
|
|
|
|
//****************************************************************************
|
|
// CUlsProt::CUlsProt (void)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
CUlsProt::CUlsProt (void)
|
|
{
|
|
cRef = 0;
|
|
szServer = NULL;
|
|
szUser = NULL;
|
|
szApp = NULL;
|
|
szName = NULL;
|
|
szMimeType = NULL;
|
|
uPort = 0;
|
|
pAttrs = NULL;
|
|
|
|
return;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// CUlsProt::~CUlsProt (void)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
CUlsProt::~CUlsProt (void)
|
|
{
|
|
if (szServer != NULL)
|
|
FreeLPTSTR(szServer);
|
|
if (szUser != NULL)
|
|
FreeLPTSTR(szUser);
|
|
if (szApp != NULL)
|
|
FreeLPTSTR(szApp);
|
|
if (szName != NULL)
|
|
FreeLPTSTR(szName);
|
|
if (szMimeType != NULL)
|
|
FreeLPTSTR(szMimeType);
|
|
|
|
// Release attribute object
|
|
//
|
|
if (pAttrs != NULL)
|
|
{
|
|
pAttrs->Release();
|
|
};
|
|
|
|
return;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsProt::Init (LPTSTR szServerName, LPTSTR szUserName,
|
|
// LPTSTR szAppName, PLDAP_PROTINFO ppi)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsProt::Init (LPTSTR szServerName, LPTSTR szUserName,
|
|
LPTSTR szAppName, PLDAP_PROTINFO ppi)
|
|
{
|
|
HRESULT hr;
|
|
|
|
// Validate parameter
|
|
//
|
|
if ((ppi->uSize != sizeof(*ppi)) ||
|
|
(ppi->uPortNumber == 0) ||
|
|
(ppi->uOffsetName == 0) ||
|
|
(ppi->uOffsetMimeType == 0))
|
|
{
|
|
return ULS_E_PARAMETER;
|
|
};
|
|
|
|
if ((ppi->cAttributes != 0) && (ppi->uOffsetAttributes == 0))
|
|
{
|
|
return ULS_E_PARAMETER;
|
|
};
|
|
|
|
// Remember port name
|
|
//
|
|
uPort = ppi->uPortNumber;
|
|
|
|
// Remember the server name
|
|
//
|
|
hr = SetLPTSTR(&szServer, szServerName);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = SetLPTSTR(&szUser, szUserName);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = SetLPTSTR(&szApp, szAppName);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = SetLPTSTR(&szName,
|
|
(LPCTSTR)(((PBYTE)ppi)+ppi->uOffsetName));
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = SetLPTSTR(&szMimeType,
|
|
(LPCTSTR)(((PBYTE)ppi)+ppi->uOffsetMimeType));
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
CAttributes *pNewAttrs;
|
|
|
|
// Build the attribute object
|
|
//
|
|
pNewAttrs = new CAttributes (ULS_ATTRACCESS_NAME_VALUE);
|
|
|
|
if (pNewAttrs != NULL)
|
|
{
|
|
if (ppi->cAttributes != 0)
|
|
{
|
|
hr = pNewAttrs->SetAttributePairs((LPTSTR)(((PBYTE)ppi)+ppi->uOffsetAttributes),
|
|
ppi->cAttributes);
|
|
};
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
pAttrs = pNewAttrs;
|
|
pNewAttrs->AddRef();
|
|
}
|
|
else
|
|
{
|
|
delete pNewAttrs;
|
|
};
|
|
}
|
|
else
|
|
{
|
|
hr = ULS_E_MEMORY;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
return hr;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsProt::QueryInterface (REFIID riid, void **ppv)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsProt::QueryInterface (REFIID riid, void **ppv)
|
|
{
|
|
*ppv = NULL;
|
|
|
|
if (riid == IID_IULSAppProtocol || riid == IID_IUnknown)
|
|
{
|
|
*ppv = (IULSUser *) this;
|
|
};
|
|
|
|
if (*ppv != NULL)
|
|
{
|
|
((LPUNKNOWN)*ppv)->AddRef();
|
|
return S_OK;
|
|
}
|
|
else
|
|
{
|
|
return ULS_E_NO_INTERFACE;
|
|
};
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP_(ULONG)
|
|
// CUlsProt::AddRef (void)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:17 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP_(ULONG)
|
|
CUlsProt::AddRef (void)
|
|
{
|
|
cRef++;
|
|
return cRef;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP_(ULONG)
|
|
// CUlsProt::Release (void)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:26 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP_(ULONG)
|
|
CUlsProt::Release (void)
|
|
{
|
|
cRef--;
|
|
|
|
if (cRef == 0)
|
|
{
|
|
delete this;
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
return cRef;
|
|
};
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsProt::GetID (BSTR *pbstrID)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsProt::GetID (BSTR *pbstrID)
|
|
{
|
|
// Validate parameter
|
|
//
|
|
if (pbstrID == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
return LPTSTR_to_BSTR(pbstrID, szName);
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsProt::GetPortNumber (ULONG *puPortNumber)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsProt::GetPortNumber (ULONG *puPortNumber)
|
|
{
|
|
// Validate parameter
|
|
//
|
|
if (puPortNumber == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
*puPortNumber = uPort;
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsProt::GetMimeType (BSTR *pbstrMimeType)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsProt::GetMimeType (BSTR *pbstrMimeType)
|
|
{
|
|
// Validate parameter
|
|
//
|
|
if (pbstrMimeType == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
return LPTSTR_to_BSTR(pbstrMimeType, szMimeType);
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsProt::GetAttributes (IULSAttributes **ppAttributes)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsProt::GetAttributes (IULSAttributes **ppAttributes)
|
|
{
|
|
// Validate parameter
|
|
//
|
|
if (ppAttributes == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
*ppAttributes = pAttrs;
|
|
pAttrs->AddRef();
|
|
|
|
return NOERROR;
|
|
}
|
|
|