⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfcucase.cpp

📁 一个网络监听程序
💻 CPP
字号:
// mfcucase.cpp : implements the filter class
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

// Note that your filters probably won't have an #ifdef like this one.
// The project file for this sample allows you to build the sample as
// a statically linked regular MFC DLL (that is, with _AFXDLL defined)
// or as a DLL that doesn't use MFC classes aside from the ISAPI
// support classes (that is, without _AFXDLL defined).

#ifdef _AFXDLL
#include <afx.h>
#include <afxwin.h>
#endif

#include <afxisapi.h>
#include "mfcucase.h"
#include "resource.h"


///////////////////////////////////////////////////////////////////////
// The one and only CUpCaseFilter object

CUpCaseFilter theFilter;


///////////////////////////////////////////////////////////////////////
// CUpCaseFilter implementation

CUpCaseFilter::CUpCaseFilter()
{
}

CUpCaseFilter::~CUpCaseFilter()
{
}


///////////////////////////////////////////////////////////////////////
// CUpCaseFilter object

BOOL CUpCaseFilter::GetFilterVersion(PHTTP_FILTER_VERSION pVer)
{
	// call default implmentation to initialize
	CHttpFilter::GetFilterVersion(pVer);

	// set flags that interest us
	pVer->dwFlags |=
		(SF_NOTIFY_NONSECURE_PORT |
		 SF_NOTIFY_URL_MAP | SF_NOTIFY_SEND_RAW_DATA);

	// load description string
	TCHAR sz[SF_MAX_FILTER_DESC_LEN+1];
	ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
		IDS_MFCUCASE_FILTER, sz, SF_MAX_FILTER_DESC_LEN));
	pVer->lpszFilterDesc[SF_MAX_FILTER_DESC_LEN] = '\0';
	_tcsncpy(pVer->lpszFilterDesc, sz, SF_MAX_FILTER_DESC_LEN);
	if (pVer->lpszFilterDesc[SF_MAX_FILTER_DESC_LEN] != '\0')
		return FALSE;
	return TRUE;
}

DWORD CUpCaseFilter::OnSendRawData(CHttpFilterContext* pCtxt,
	PHTTP_FILTER_RAW_DATA pRawData)
{
	LPTSTR  pstrIn;
	DWORD   cbBuffer;
	DWORD   cbTemp;

	// if we previously identified the data requested as being
	// interesting, let's try to parse it

	if (pCtxt->m_pFC->pFilterContext != NULL)
	{
		// gain a pointer to the actual data
		pstrIn = (LPTSTR) pRawData->pvInData;
		cbBuffer = 0;
		cbTemp = 0;

		// are we waiting for the header?

		if (pCtxt->m_pFC->pFilterContext == (VOID *) 1)
		{
			// rip through the header to the end
			while (cbBuffer < pRawData->cbInData)
			{
				if (pstrIn[cbBuffer] == '\n' &&
					pstrIn[cbBuffer+2] == '\n')
				{
					cbBuffer += 3;
					break;
				}
				cbBuffer++;
			}

			// does the header identify HTML content?
			while (cbTemp < cbBuffer)
			{
				if (pstrIn[cbTemp] == '/' && pstrIn[cbTemp+1] == 'h' &&
					pstrIn[cbTemp+2] == 't' && pstrIn[cbTemp+3] == 'm')
				{
					// yes, it's HTML, set our flag
					pCtxt->m_pFC->pFilterContext = (VOID*) 2;
					break;
				}

				cbTemp++;
			}

			// if it wasn't HTML--clear the flag
			if (cbTemp == cbBuffer)
				pCtxt->m_pFC->pFilterContext = NULL;
		}

		// if there's anything else left in the buffer,
		// convert it all to upper case!
		if (pCtxt->m_pFC->pFilterContext != NULL)
		{
			while (cbBuffer < pRawData->cbInData)
			{
				if (isleadbyte(pstrIn[cbBuffer]))
					cbBuffer += 2;
				else
				{
#pragma warning(disable : 4244)
					pstrIn[cbBuffer] = _totupper(pstrIn[cbBuffer]);
#pragma warning(default : 4244)
					cbBuffer++;
				}
			}
		}
	}

	return SF_STATUS_REQ_NEXT_NOTIFICATION;
}

DWORD CUpCaseFilter::OnUrlMap(CHttpFilterContext* pCtxt,
	PHTTP_FILTER_URL_MAP pUrlMap)
{
	LPTSTR pstrPhysPath = pUrlMap->pszPhysicalPath;
	pCtxt->m_pFC->pFilterContext = NULL;

	// if we get a URL, try to see if it has the string "\UC\"
	while (*pstrPhysPath != '\0')
	{
		if (pstrPhysPath[0] == '\\' &&
			(pstrPhysPath[1] == 'u' || pstrPhysPath[1] == 'U') &&
			(pstrPhysPath[2] == 'c' || pstrPhysPath[2] == 'C') &&
			pstrPhysPath[3] == '\\')
		{
			// we found a "\UC\", so the user wants
			// upper case.  remove the "\UC\" substring
			// so the server can find the real path

			while (pstrPhysPath[3] != '\0')
			{
				pstrPhysPath[0] = pstrPhysPath[3];
				pstrPhysPath = _tcsinc(pstrPhysPath);
			}
			pstrPhysPath[0] = '\0';

			// set a flag to remind us to try and uppercase
			pCtxt->m_pFC->pFilterContext = (VOID*) 1;
			break;
		}

		pstrPhysPath = _tcsinc(pstrPhysPath);
	}

	return SF_STATUS_REQ_NEXT_NOTIFICATION;
}

// If you're building a filter that doesn't use any MFC classes, you'll
// need to implement your own version of AfxGetResourceHandle() so that
// the MFC ISAPI support classes can find resources they may need.
// If you're using MFC classes besides the ISAPI support classes, you'll
// automatically get the normal MFC implementation of
// AfxGetResourceHandle() and won't need this code.

#ifndef _AFXDLL

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;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -