Программирование в IIS




Пример 5.2


// HelloWorld.cpp : Defines the entry point for

//the DLL application.

#include //for ISAPI classes and structures

// tell the compiler to shut up about using STL

#pragma warning(disable:4786)

#include //to build response to send back to user

using namespace std;

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Name:GetExtensionVersion

In: pVer - Pointer to ISAPI structure HSE_VERSION_INFO.

Out: Returns true if you want IIS to use the extension, otherwise

if another value is returned, IIS will not use the extension

Purpose:

Called when the extension is loaded into IIS. The member

variables of HSE_VERSION_INFO, dwExtensionVersion and

lpszExtensionDesc should be filled with the extension

version and description.

Other initialization functionality could be called from this

function to set up the server to use this extension.

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer)

{

//ISAPI version

const DWORD VERSION_NUMBER = 0.9;

const char* VERSION_NAME = "Hello World";

pVer->dwExtensionVersion = VERSION_NUMBER;

strncpy( pVer->lpszExtensionDesc,

VERSION_NAME,

HSE_MAX_EXT_DLL_NAME_LEN);

return TRUE;

}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Name:HttpExtensionProc

In: pECB - pointer to the Extension control block structure

Out: DWORD - HSE status code

Purpose:

main entry point for HTTP request

the possible return codes are:

HSE_STATUS_SUCCESS - everything worked great

HSE_STATUS_SUCCESS_AND_KEEP_CONN - same as HSE_STATUS_SUCCESS

since IIS 4

HSE_STATUS_PENDING - wait until effort completed

HSE_STATUS_ERROR - sends a 500 error code

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pECB)

{

//HTTP headers

const char* BASIC_HEADER = "Content-type: text/html\r\n\r\n";

//output values

const DWORD BUFFER_LENGTH = 4096;

TCHAR szTempBuffer[BUFFER_LENGTH];

DWORD dwBufferSize = BUFFER_LENGTH;

string sResponse;

//start our HTML document

sResponse = "

";

sResponse += "Hi! Hello World";

sResponse += "

";

// set content-type header

strcpy(szTempBuffer, BASIC_HEADER);

DWORD dwHeaderSize = strlen(szTempBuffer);

pECB->ServerSupportFunction(pECB->ConnID,

HSE_REQ_SEND_RESPONSE_HEADER,

NULL,

&dwHeaderSize,

(LPDWORD) szTempBuffer);

//write value to http response

DWORD dwLength=sResponse.length();

pECB->WriteClient( pECB->ConnID,

(PVOID)sResponse.c_str(),

&dwLength,

0);

//return a success code

return HSE_STATUS_SUCCESS;

}




Содержание  Назад  Вперед