ISAPI HTTP Filter
HejJeg sidder og roder med et ISAPI filter i C++. Det filtret gør er at kalde en HTTP forspørgsel også lægge denne ned i en variabel f.eks. HTTP_Path.
Denne variabel kan jeg så kalde fra en asp side - Request("HTTP_Path").
Problemet er at jeg gerne vil have mit filter til at ignorere forspørgsler hvor der f.eks indgår et punktum "."
Jeg har ikke så meget styr på koden fordi at den hovedsageligt er generet af en Wizard. Så hvis der er nogle der kan hjælp vil det være super fedt - og spørg endelig hvis der er noget der uklart.
Koden kommer her:
-------------------------------------------------------
#include "stdafx.h"
#include "Request Http Filter.h"
///////////////////////////////////////////////////////////////////////
// The one and only CWinApp object
// NOTE: You may remove this object if you alter your project to no
// longer use MFC in a DLL.
CWinApp theApp;
///////////////////////////////////////////////////////////////////////
// The one and only CRequestHttpFilter object
CRequestHttpFilterFilter theFilter;
///////////////////////////////////////////////////////////////////////
// CRequestHttpFilterFilter implementation
CRequestHttpFilterFilter::CRequestHttpFilterFilter()
{
}
CRequestHttpFilterFilter::~CRequestHttpFilterFilter()
{
}
BOOL CRequestHttpFilterFilter::GetFilterVersion(PHTTP_FILTER_VERSION pVer)
{
// Call default implementation for initialization
CHttpFilter::GetFilterVersion(pVer);
// Clear the flags set by base class
pVer->dwFlags &= ~SF_NOTIFY_ORDER_MASK;
// Set the flags we are interested in
pVer->dwFlags |= SF_NOTIFY_ORDER_HIGH | SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT
| SF_NOTIFY_PREPROC_HEADERS;
// Load description string
TCHAR sz[SF_MAX_FILTER_DESC_LEN+1];
ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
IDS_FILTER, sz, SF_MAX_FILTER_DESC_LEN));
_tcscpy(pVer->lpszFilterDesc, sz);
return TRUE;
}
DWORD CRequestHttpFilterFilter::OnPreprocHeaders(CHttpFilterContext* pCtxt,
PHTTP_FILTER_PREPROC_HEADERS pHeaderInfo)
{
char inbuf[2048], buf[2048];
DWORD szinbuf = sizeof(inbuf);
pHeaderInfo->GetHeader(pCtxt->m_pFC,"url",inbuf,&szinbuf);
if (*(inbuf+1)=='_') return SF_STATUS_REQ_NEXT_NOTIFICATION;
sprintf(buf,"/default.asp?HTTP_Path=%s",inbuf);
pHeaderInfo->SetHeader(pCtxt->m_pFC,"url",buf);
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CRequestHttpFilter, CHttpFilter)
//{{AFX_MSG_MAP(CRequestHttpFilter)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif // 0
///////////////////////////////////////////////////////////////////////
// If your extension will not use MFC, you'll need this code to make
// sure the extension objects can find the resource handle for the
// module. If you convert your extension to not be dependent on MFC,
// remove the comments arounn the following AfxGetResourceHandle()
// and DllMain() functions, as well as the g_hInstance global.
/****
static HINSTANCE g_hInstance;
HINSTANCE AFXISAPI AfxGetResourceHandle()
{
return g_hInstance;
}
BOOL WINAPI DllMain(HINSTANCE hInst, ULONG ulReason,
LPVOID lpReserved)
{
if (ulReason == DLL_PROCESS_ATTACH)
{
g_hInstance = hInst;
}
return TRUE;
}
****/