/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
Simple.cpp
Abstract:
This module shows the basic functions needed for ISAPI extension
--*/
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <httpext.h>
BOOL WINAPI
DllMain(
IN HINSTANCE hinstDll,
IN DWORD dwReason,
IN LPVOID lpvContext
)
/*++
Function : DllMain
Description:
The initialization function for this DLL.
Arguments:
hinstDll - Instance handle of the DLL
dwReason - Reason why NT called this DLL
lpvContext - Reserved parameter for future use
Return Value:
Returns TRUE if successfull; otherwise FALSE.
--*/
{
// Note that appropriate initialization and termination code
// would be written within the switch statement below. Because
// this example is very simple, none is currently needed.
switch( dwReason ) {
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return(TRUE);
}
BOOL WINAPI
GetExtensionVersion(
OUT HSE_VERSION_INFO * pVer
)
/*++
Purpose:
The first function called after IIS successfully
loads the DLL. The function should use the
version structure provided by IIS to set the ISAPI
architectural version number of this extension.
A simple text-string is also set so that
administrators can identify the DLL.
Note that HSE_VERSION_MINOR and HSE_VERSION_MAJOR
are constants defined in httpext.h.
Arguments:
pVer - points to extension version structure
Return Value:
TRUE if successful; FALSE otherwise.
--*/
{
pVer->dwExtensionVersion = MAKELONG( HSE_VERSION_MINOR,
HSE_VERSION_MAJOR );
strcpy( pVer->lpszExtensionDesc,
"IIS SDK Simple ISAPI Extension" );
return TRUE;
}
DWORD WINAPI
HttpExtensionProc(
IN EXTENSION_CONTROL_BLOCK * pECB
)
/*++
Purpose:
Function called by the IIS Server when a request
for the ISAPI dll arrives. The HttpExtensionProc
function processes the request and outputs the
appropriate response to the web client using
WriteClient().
Argument:
pECB - pointer to extention control block.
Return Value:
HSE_STATUS_SUCCESS
--*/
{
static char szMessage[] =
"<HTML>"
"<HEAD><TITLE> Simple ISAPI Extension DLL </TITLE>"
"</HEAD>\r\n"
"<BODY>"
"<P>Hello from Simple ISAPI Extension DLL!</P>\r\n"
"</BODY></HTML>\r\n\r\n";
HSE_SEND_HEADER_EX_INFO HeaderExInfo;
//
// prepare headers
//
HeaderExInfo.pszStatus = "200 OK";
HeaderExInfo.pszHeader = "Content-type: text/html\r\n\r\n";
HeaderExInfo.cchStatus = strlen( HeaderExInfo.pszStatus );
HeaderExInfo.cchHeader = strlen( HeaderExInfo.pszHeader );
HeaderExInfo.fKeepConn = FALSE;
//
// send headers using IIS-provided callback
// (note - if we needed to keep connection open,
// we would set fKeepConn to TRUE *and* we would
// need to provide correct Content-Length: header)
pECB->ServerSupportFunction(
pECB->ConnID,
HSE_REQ_SEND_RESPONSE_HEADER_EX,
&HeaderExInfo,
NULL,
NULL
);
//
// Calculate length of string to output to client
//
DWORD dwBytesToWrite = strlen( szMessage );
//
// send text using IIS-provied callback
//
pECB->WriteClient( pECB->ConnID, szMessage, &dwBytesToWrite, 0 );
//
// Indicate that the call to HttpExtensionProc was successful
//
return HSE_STATUS_SUCCESS;
}
BOOL WINAPI
TerminateExtension(
IN DWORD dwFlags
)
/*++
Routine Description:
This function is called when the WWW service is shutdown
Arguments:
dwFlags - HSE_TERM_ADVISORY_UNLOAD or HSE_TERM_MUST_UNLOAD
Return Value:
TRUE if extension is ready to be unloaded,
FALSE otherwise
--*/
{
// Note: We must not agree to be unloaded if we have
// any pending requests.
return TRUE;
}