VC++ To PureBasic No
Posted: Wed Nov 21, 2007 11:05 am
Code: Select all
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <httpfilt.h>
BOOL WINAPI __stdcall GetFilterVersion(HTTP_FILTER_VERSION *pVer)
{
pVer->dwFlags = SF_NOTIFY_PREPROC_HEADERS| SF_NOTIFY_URL_MAP | SF_NOTIFY_SEND_RAW_DATA;
pVer->dwFilterVersion=HTTP_FILTER_REVISION;
strcpy(pVer->lpszFilterDesc, ("Chehw's HTTP Filter Sample"));//, SF_MAX_FILTER_DESC_LEN);
return TRUE;
}
DWORD WINAPI __stdcall HttpFilterProc(HTTP_FILTER_CONTEXT *pfc, DWORD NotificationType, void *pvNotification)
{
PHTTP_FILTER_URL_MAP pURLMap;
PHTTP_FILTER_PREPROC_HEADERS pPreHeaders;
char * pszPhysPath;
switch(NotificationType)
{
case SF_NOTIFY_PREPROC_HEADERS:
pPreHeaders=(PHTTP_FILTER_PREPROC_HEADERS)pvNotification;
pfc->ServerSupportFunction(pfc, SF_REQ_SEND_RESPONSE_HEADER, "200 OK",
(ULONG_PTR)"Content-type: text/html\r\n\r\n"
"<html><h1>Hello World!</h1></html>", 0);
pfc->ServerSupportFunction(pfc, SF_REQ_DISABLE_NOTIFICATIONS, NULL,
SF_NOTIFY_URL_MAP | SF_NOTIFY_SEND_RAW_DATA, 0);
return SF_STATUS_REQ_FINISHED;
default:
break;
}
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
Code: Select all
#SF_MAX_FILTER_DESC_LEN = 257
#SF_STATUS_REQ_NEXT_NOTIFICATION = $8000002
#HTTP_FILTER_REVISION = $00040000
#SF_NOTIFY_READ_RAW_DATA = 32768
#SF_NOTIFY_PREPROC_HEADERS = 16384
#SF_NOTIFY_URL_MAP = 4096
#SF_NOTIFY_AUTHENTICATION = 8192
#SF_NOTIFY_AUTH_COMPLETE = 67108864
#SF_NOTIFY_ACCESS_DENIED = 2048
#SF_NOTIFY_SEND_RESPONSE = 64
#SF_NOTIFY_SEND_RAW_DATA = 1024
#SF_NOTIFY_END_OF_REQUEST = 128
#SF_NOTIFY_LOG = 512
#SF_NOTIFY_END_OF_NET_SESSION = 256
#SF_NOTIFY_ORDER_LOW = 131072
#SF_NOTIFY_ORDER_MEDIUM = 262144
#SF_NOTIFY_ORDER_HIGH = 524288
#SF_NOTIFY_ORDER_DEFAULT = #SF_NOTIFY_ORDER_LOW
#SF_NOTIFY_SECURE_PORT = 1
#SF_NOTIFY_NONSECURE_PORT = 2
#SF_REQ_SEND_RESPONSE_HEADER = 0
#SF_REQ_DISABLE_NOTIFICATIONS = 8
#SF_STATUS_REQ_FINISHED = 134217728
#SF_NOTIFY_ORDER_DEFAULT = #SF_NOTIFY_ORDER_LOW
#HSE_REQ_END_RESERVED = 1000
#HSE_REQ_SEND_RESPONSE_HEADER_EX = #HSE_REQ_END_RESERVED+16
Structure HTTP_FILTER_VERSION
dwServerFilterVersion.l
dwFilterVersion.l
lpszFilterDesc.b[#SF_MAX_FILTER_DESC_LEN]
dwFlags.l
EndStructure
Prototype GetServerVariable(ConnID, lpszVariableName.s, *lpvBuffer, *lpdwSizeofBuffer.LONG)
Prototype AddResponseHeaders(ConnID,lpszHeaders.s,dwReserved.s)
Prototype WriteClient(ConnID,*Buffer, *lpdwSizeofBuffer.LONG,dwSync)
Prototype AllocMem(ConnID,cbSize,dwReserved)
Prototype ServerSupportFunction(ConnID, dwServerSupportFunction, *lpvBuffer, *lpdwSizeofBuffer.LONG, *lpdwDataType.LONG)
Structure HTTP_FILTER_CONTEXT
cbSize.l
Revision.l
ServerContext.l
ulReserved.l
fIsSecurePort.l
pFilterContext.l
GetServerVariable.GetServerVariable
AddResponseHeaders.AddResponseHeaders
WriteClient.WriteClient
AllocMem.AllocMem
ServerSupportFunction.ServerSupportFunction
EndStructure
Structure HTTP_FILTER_PREPROC_HEADERS
GetHeader.l
SetHeader.l
AddHeader.l
HttpStatus.l
dwReserved.l
EndStructure
Structure HTTP_FILTER_URL_MAP
pszURL.s
pszPhysicalPath.s
cbPathBuff.l
EndStructure
Declare.l GetFilterVersion(*pVer.HTTP_FILTER_VERSION)
Declare.l HttpFilterProc(*pfc.HTTP_FILTER_CONTEXT,NotificationType,*pvData)
ProcedureDLL.l GetFilterVersion(*pVer.HTTP_FILTER_VERSION)
*pVer\dwFlags = #SF_NOTIFY_PREPROC_HEADERS|#SF_NOTIFY_URL_MAP|#SF_NOTIFY_SEND_RAW_DATA
*pVer\dwFilterVersion = #HTTP_FILTER_REVISION
PokeS(@*pVer\lpszFilterDesc[0],"Chehw's HTTP Filter Sample")
ProcedureReturn #True
EndProcedure
ProcedureDLL.l HttpFilterProc(*pfc.HTTP_FILTER_CONTEXT,NotificationType,*pvData)
pURLMap.HTTP_FILTER_URL_MAP
pPreHeaders.HTTP_FILTER_PREPROC_HEADERS
Select NotificationType
Case #SF_NOTIFY_PREPROC_HEADERS
pPreHeaders = *pvData
a.s = "Content-type: text/html" + #CRLF$ + #CRLF$ + "<html><h1>Hello World!</h1></html>"
b.s = "200 OK"
*pfc\ServerSupportFunction(@*pfc,#SF_REQ_SEND_RESPONSE_HEADER,@b,@a,#Null)
*pfc\ServerSupportFunction(@*pfc,#SF_REQ_DISABLE_NOTIFICATIONS,#Null,#SF_NOTIFY_URL_MAP|#SF_NOTIFY_SEND_RAW_DATA,#Null)
ProcedureReturn #SF_STATUS_REQ_FINISHED
EndSelect
ProcedureReturn #SF_STATUS_REQ_NEXT_NOTIFICATION
EndProcedure