📄 postdata.cpp
字号:
// POSTDATA.CPP - Implementation file for your Internet Server
// PostData Extension
#include "stdafx.h"
#include "PostData.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;
///////////////////////////////////////////////////////////////////////
// command-parsing map
BEGIN_PARSE_MAP(CPostDataExtension, CHttpServer)
// TODO: insert your ON_PARSE_COMMAND() and
// ON_PARSE_COMMAND_PARAMS() here to hook up your commands.
// For example:
DEFAULT_PARSE_COMMAND(Default, CPostDataExtension)
ON_PARSE_COMMAND(Default, CPostDataExtension, ITS_EMPTY)
DEFAULT_PARSE_COMMAND(FormRequest, CPostDataExtension)
ON_PARSE_COMMAND(FormRequest, CPostDataExtension, ITS_RAW)
END_PARSE_MAP(CPostDataExtension)
///////////////////////////////////////////////////////////////////////
// The one and only CPostDataExtension object
CPostDataExtension theExtension;
///////////////////////////////////////////////////////////////////////
// CPostDataExtension implementation
CPostDataExtension::CPostDataExtension()
{
}
CPostDataExtension::~CPostDataExtension()
{
}
BOOL CPostDataExtension::GetExtensionVersion(HSE_VERSION_INFO* pVer)
{
// Call default implementation for initialization
CHttpServer::GetExtensionVersion(pVer);
// Load description string
TCHAR sz[HSE_MAX_EXT_DLL_NAME_LEN+1];
ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
IDS_SERVER, sz, HSE_MAX_EXT_DLL_NAME_LEN));
_tcscpy(pVer->lpszExtensionDesc, sz);
return TRUE;
}
BOOL CPostDataExtension::TerminateExtension(DWORD dwFlags)
{
// extension is being terminated
//TODO: Clean up any per-instance resources
return TRUE;
}
///////////////////////////////////////////////////////////////////////
// CPostDataExtension command handlers
void CPostDataExtension::Default(CHttpServerContext* pCtxt)
{
//StartContent(pCtxt);
//WriteTitle(pCtxt);
CString str;
if ( !LoadLongResource(str, IDR_HTML_FORM) )
{
//do some log error
*pCtxt << "<h2>LoadLongResource error.</h2><p>" << str;
return;
}
*pCtxt << str;
//EndContent(pCtxt);
}
void CPostDataExtension::WriteServerData(CHttpServerContext* pCtxt)
{
//_______________________________________________________
*pCtxt << "<p><hr><br>";
*pCtxt << "<b>Server Context bulk data :</b><p>";
*pCtxt << pCtxt->m_pECB->lpszPathInfo <<"<br>";
*pCtxt << pCtxt->m_pECB->lpszMethod <<"<br>";
*pCtxt << pCtxt->m_pECB->lpszQueryString <<"<br>";
*pCtxt << pCtxt->m_pECB->lpszPathTranslated <<"<br>";
*pCtxt << pCtxt->m_pECB->lpszContentType <<"<br>";
char rgStatus[4000];
DWORD dwLen = 4000;
pCtxt->GetServerVariable("ALL_HTTP",rgStatus,&dwLen);
rgStatus[dwLen] = '\0';
*pCtxt << rgStatus <<"<br>";
dwLen = 4000;
pCtxt->GetServerVariable("PATH_INFO",rgStatus,&dwLen);
rgStatus[dwLen] = '\0';
*pCtxt << "PATH_INFO : "<<rgStatus <<"<br>";
dwLen = 4000;
pCtxt->GetServerVariable("PATH_TRANSLATED",rgStatus,&dwLen);
rgStatus[dwLen] = '\0';
*pCtxt << "PATH_TRANSLATED : "<<rgStatus <<"<br>";
dwLen = 4000;
pCtxt->GetServerVariable("SCRIPT_NAME",rgStatus,&dwLen);
rgStatus[dwLen] = '\0';
*pCtxt << "SCRIPT_NAME : "<<rgStatus <<"<br>";
dwLen = 4000;
pCtxt->GetServerVariable("SERVER_NAME",rgStatus,&dwLen);
rgStatus[dwLen] = '\0';
*pCtxt << "SERVER_NAME : "<<rgStatus <<"<br>";
//_______________________________________________________
}
void CPostDataExtension::WriteServerVar(CHttpServerContext* pCtxt, TwinVector vecServerCtx)
{
_bstr_t bstrToken;
int index;
MapBstrt2Bstrt map;
TwinVector::iterator itVec;
MapBstrt2Bstrt::iterator itMap;
//______________________________________________________________________________________
//the result vector
*pCtxt << "<p><hr><br>";
*pCtxt << "<b>Server Context Vector search :</b><p>";
for (itVec = vecServerCtx.begin(); itVec != vecServerCtx.end(); itVec++)
{
*pCtxt << itVec->GetName() << " = " << itVec->GetValue() << "<br>";
}
//Finf a value
_bstr_t bstrValue = vecServerCtx.Find(L"Filename");
//______________________________________________________________________________________
//______________________________________________________________________________________
//the result map
*pCtxt << "<p><hr><br>";
*pCtxt << "<b>Server Context Map search :</b><p>";
bstrToken = L"DATA";
index = vecServerCtx.Find(bstrToken);
if (index > -1)
{
map = vecServerCtx[index].GetValueAsMap();
if(!map.empty())
{
for (itMap = map.begin(); itMap != map.end(); itMap++)
{
*pCtxt << (*itMap).first << " = " << (*itMap).second << "<br>";
}
//other way:
*pCtxt << "" << "_____________________" << "<p>";
*pCtxt << "Filename = " << map[L"Filename"] << "<br>";
*pCtxt << "Filedata = " << map[L"Filedata"] << "<br>";
*pCtxt << "PathData = " << map[L"PathData"] << "<br>";
*pCtxt << "password1 = " << map[L"password1"] << "<br>";
//other way:
*pCtxt << "" << "_____________________" << "<p>";
itMap = map.find(L"select1");
*pCtxt << "select1 = " << (*itMap).second << "<br>";
}
}
//______________________________________________________________________________________
}
void CPostDataExtension::FormRequest(CHttpServerContext* pCtxt, void* pVoid, DWORD dwBytes)
{
//demo form request
TwinVector vecServerCtx(pCtxt, (LPTSTR)pVoid);
WriteServerData(pCtxt);
WriteServerVar(pCtxt, vecServerCtx);
}
// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CPostDataExtension, CHttpServer)
//{{AFX_MSG_MAP(CPostDataExtension)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif // 0
//////////////////////////////////////////////////////////////////////
// Helper functions
//////////////////////////////////////////////////////////////////////
BOOL CPostDataExtension::LoadLongResource(CString &str, UINT nID)
{
HRSRC hRes;
BOOL bResult = FALSE;
static const TCHAR szHTMLType[] = "CustomHTML";
CHAR szPath[MAX_PATH];
//GetModuleFileName( GetModuleHandle(NULL) , szPath, sizeof(szPath) );
//str = szPath;
strcpy(szPath, "PostData.dll");
//HINSTANCE hInst = LoadLibrary(szPath);
HINSTANCE hInst = AfxGetResourceHandle();
//hRes = FindResource(hInst, MAKEINTRESOURCE(nID), szHTMLType); //if you want you custom resource type
hRes = FindResource(hInst, MAKEINTRESOURCE(nID), RT_HTML ); //if you want standard html type
if (hRes == NULL)
{
//trace error
str = "Error: Resource could not be found\r\n";
}
else
{
DWORD dwSize = SizeofResource(hInst, hRes);
if (dwSize == 0)
{
str.Empty();
bResult = TRUE;
}
else
{
LPTSTR pszStorage = str.GetBufferSetLength(dwSize);
HGLOBAL hGlob = LoadResource(hInst, hRes);
if (hGlob != NULL)
{
LPVOID lpData = LockResource(hGlob);
if (lpData != NULL)
{
memcpy(pszStorage, lpData, dwSize);
//str = (LPCTSTR)lpData;
bResult = TRUE;
}
FreeResource(hGlob);
}
}
if (!bResult)
str = "Error: Resource could not be load\r\n";
}
return bResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -