Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

180 lines
4.0 KiB

/* htspmui.c -- User Interface (up-call) for Security Protocol Modules. */
/* Jeff Hostetler, Spyglass, Inc., 1994. */
#include "all.h"
#ifdef FEATURE_SPM
static UI_StatusCode x_ca(UI_CA * pca)
{
if (!pca)
return UI_SC_ERROR_BAD_PARAMETER;
pca->abilities = 0x00000000UL;
#if defined(FEATURE_SUPPORT_WRAPPING) && defined(FEATURE_SUPPORT_UNWRAPPING)
pca->abilities |= UI_CA_ENVELOPING;
#endif
#if defined(FEATURE_SUPPORT_SHTTP)
pca->abilities |= UI_CA_SHTTP_URL;
#endif
return UI_SC_STATUS_OK;
}
static UI_StatusCode x_malloc(unsigned long * pulSize, void ** ppvBuffer)
{
void * p;
if (!pulSize || !*pulSize)
return UI_SC_ERROR_BAD_PARAMETER;
if (!ppvBuffer)
return UI_SC_ERROR_BAD_PARAMETER;
p = GTR_MALLOC(*pulSize);
if (!p)
return UI_SC_ERROR_NO_MEMORY;
*ppvBuffer = p;
return UI_SC_STATUS_OK;
}
static UI_StatusCode x_calloc(unsigned long * pulSize, void ** ppvBuffer)
{
/* note: unlike real calloc, we only take one arg and assume
* that the other is 1.
*/
void * p;
if (!pulSize || !*pulSize)
return UI_SC_ERROR_BAD_PARAMETER;
if (!ppvBuffer)
return UI_SC_ERROR_BAD_PARAMETER;
p = GTR_CALLOC(1,*pulSize);
if (!p)
return UI_SC_ERROR_NO_MEMORY;
*ppvBuffer = p;
return UI_SC_STATUS_OK;
}
static UI_StatusCode x_free(void * p)
{
if (p)
GTR_FREE(p);
return UI_SC_STATUS_OK;
}
static UI_StatusCode x_error_message(unsigned char * szMessage)
{
if (szMessage)
ERR_ReportError(NULL, errSpecify,szMessage,NULL);
return UI_SC_STATUS_OK;
}
static UI_StatusCode x_debug_message(unsigned char * szMessage)
{
#ifdef XX_DEBUG
if (XX_Filter(DBG_SPM))
{
XX_DMsg(DBG_SPM,("UI: %s\n",szMessage));
}
#endif /* XX_DEBUG */
return UI_SC_STATUS_OK;
}
static UI_StatusCode x_register_protocol(UI_ProtocolId * pi)
{
if (!pi || !pi->htspm || !pi->szIdentHeader)
return UI_SC_ERROR_BAD_PARAMETER;
return HTSPM_RegisterProtocol(pi);
}
static UI_StatusCode x_window_handle(OpaqueOSData * posd,
unsigned long * pulGet,
void ** pv)
{
UI_WindowHandle ** ppwh = (UI_WindowHandle **)pv;
if (!posd || !posd->tw || !pulGet || !ppwh)
return UI_SC_ERROR_BAD_PARAMETER;
if (*pulGet)
{
*ppwh = GTR_CALLOC(1,sizeof(UI_WindowHandle));
if (!ppwh)
return UI_SC_ERROR_NO_MEMORY;
return HTSPM_OS_GetWindowHandle(posd->tw,*ppwh);
}
else
{
HTSPM_OS_UnGetWindowHandle(posd->tw,*ppwh);
GTR_FREE(*ppwh);
return UI_SC_STATUS_OK;
}
}
static UI_StatusCode x_set_url(OpaqueOSData * posd, UI_SetUrl * psu)
{
if (!posd || !posd->tw || !posd->request)
return UI_SC_ERROR_BAD_PARAMETER;
SPM_set_url(posd->tw,posd->request,psu);
return UI_SC_STATUS_OK;
}
/*********************************************************************
*
* UserInterface call-back from Security Protocol Modules.
*
*/
static UI_StatusCode _cdecl _UI_UserInterface(void * pvOpaqueOS,
UI_ServiceId sid,
void * pvOpaqueInput,
void ** ppvOpaqueOutput)
{
/* pvOpaqueOS contains host-operating-specific information
* (such as a window handle, display, etc.)
*
* sid is the service being requested.
*
* pvOpaqueInput contains sid-specific input.
*
* ppvOpaqueOutput will receive sid-specific output.
*
*/
switch (sid)
{
case UI_SERVICE_CLIENT_ABILITIES: return x_ca(pvOpaqueInput);
case UI_SERVICE_MALLOC: return x_malloc(pvOpaqueInput,ppvOpaqueOutput);
case UI_SERVICE_CALLOC: return x_calloc(pvOpaqueInput,ppvOpaqueOutput);
case UI_SERVICE_FREE: return x_free(pvOpaqueInput);
case UI_SERVICE_ERROR_MESSAGE: return x_error_message(pvOpaqueInput);
case UI_SERVICE_DEBUG_MESSAGE: return x_debug_message(pvOpaqueInput);
case UI_SERVICE_REGISTER_PROTOCOL: return x_register_protocol(pvOpaqueInput);
case UI_SERVICE_WINDOW_HANDLE: return x_window_handle(pvOpaqueOS,pvOpaqueInput,ppvOpaqueOutput);
case UI_SERVICE_SET_URL: return x_set_url(pvOpaqueOS,pvOpaqueInput);
default: return UI_SC_ERROR_UNKNOWN_SERVICE;
}
/*NOTREACHED*/
}
F_UserInterface UI_UserInterface = _UI_UserInterface;
#endif /* FEATURE_SPM */