RT
解决方案 »
- 关于overlapped,发现个很奇怪的问题
- 如何在通过采集过来视频流实现录像功能,并且是一边显示实时视频,一边保存实时录像,保存的格式无所谓,但最好是压缩后的。
- 关于CPtrArray:成员与成员函数不关联
- 这个对话框的实现
- 如何改变WS_DISABLED 窗体风格
- 为什么单文档多视图切换实现不了?
- 在VB中简单调用, 让我晕倒的问题, 虾哥请进!!
- 什么情况下会出现Runtime error ?
- 在windows下怎样写类似于PV操作的函数,需要用到那些API?
- MFC的AppWizard真是害死人
- 有关更改按钮的标题的问题
- 如何禁止用户访问c,d,e等硬盘分区?不但隐藏,而且要不能访问。
if(lstrcmpi(pecb->lpszMethod, "POST")==0)
{
LPHSE_EXEC_URL_ENTITY_INFO pEntityInfo=NULL;
FilterPostData(pecb, &pEntityInfo);
ExecUrlInfo.pEntity=pEntityInfo;
}pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_EXEC_URL, &ExecUrlInfo, ...);
\
“主目录” - “配置” -“通配符应用程序映射(执行次序)” - “添加”
然后在 HttpExtensionProc 回调函数里添加 //检查POST数据
if( ( _stricmp(pECB->lpszMethod,"post") == 0 ) &&
CConfig::GetInstance().m_bDebugCheckPost
)
{
DWORD dwReturn = CheckPostData(pECB,pUrl);//处理POST数据包
if( dwReturn > 0 )
{
if ( pUrl )
{
LocalFree( pUrl );
pUrl = NULL;
}
return dwReturn;
} }
LPCTSTR DEFAULT_HEADER=TEXT("Content-Type:text/html\r\n\r\n");
LPCTSTR DEFAULT_STATUS=TEXT("200 OK");VOID WINAPI HseIoCompletionProc(EXTENSION_CONTROL_BLOCK *pecb, LPVOID lpContext, DWORD cbIO, DWORD cbError);
BOOL SendResponseHeaders(EXTENSION_CONTROL_BLOCK *pecb, LPCTSTR lpszStatus, LPCTSTR lpszHeader, BOOL fKeepConn=FALSE);
BOOL ProcessPostData(LPHSE_EXEC_URL_ENTITY_INFO *ppEntityInfo);const CHAR szPostData[]="postcontent=test&username=aa&userpass=md5hash";BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer)
{
lstrcpy(pVer->lpszExtensionDesc, "ExecUrl Test Sample");
pVer->dwExtensionVersion=MAKELONG(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);
return TRUE;
}DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pecb)
{
DWORD dwStatus=HSE_STATUS_ERROR;
BOOL rc;
HSE_EXEC_URL_INFO ExecUrlInfo={0};
HSE_EXEC_URL_ENTITY_INFO *pEntity=NULL; rc=ProcessPostData(&pEntity);
ExecUrlInfo.pEntity = pEntity;
ExecUrlInfo.dwExecUrlFlags = HSE_EXEC_URL_IGNORE_CURRENT_INTERCEPTOR; rc=pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_IO_COMPLETION, HseIoCompletionProc, NULL, (LPDWORD)pEntity);
if(!rc) goto Failed;
rc=pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_EXEC_URL, &ExecUrlInfo, NULL, NULL);
if(!rc) goto Failed;
return HSE_STATUS_PENDING;
Failed:
if(dwStatus!=HSE_STATUS_PENDING)
{
if(NULL!=pEntity)
{
LocalFree(pEntity);
pEntity=NULL;
}
}// SendResponseHeaders(pecb, NULL, "Content-Type:text/html\r\n\r\nHello World2!", FALSE);
OutputDebugString("ExecUrl Error!");
return dwStatus;
}BOOL WINAPI TerminateExtension(DWORD dwFlags)
{
return TRUE;
}
BOOL ProcessPostData(LPHSE_EXEC_URL_ENTITY_INFO *ppEntityInfo)
{
if(NULL==ppEntityInfo) return FALSE;
*ppEntityInfo=(LPHSE_EXEC_URL_ENTITY_INFO)LocalAlloc(LPTR, sizeof(HSE_EXEC_URL_ENTITY_INFO));
if(NULL==*ppEntityInfo) return FALSE;
(*ppEntityInfo)->lpbData=(LPVOID)szPostData;
(*ppEntityInfo)->cbAvailable=sizeof(szPostData)-1;
return TRUE;
}BOOL SendResponseHeaders(EXTENSION_CONTROL_BLOCK *pecb, LPCTSTR lpszStatus, LPCTSTR lpszHeader, BOOL fKeepConn)
{
HSE_SEND_HEADER_EX_INFO HeaderEx;
if(NULL==lpszStatus) lpszStatus=DEFAULT_STATUS;
if(NULL==lpszHeader) lpszHeader=DEFAULT_HEADER;
HeaderEx.pszHeader=lpszHeader;
HeaderEx.pszStatus=lpszStatus;
HeaderEx.cchHeader=lstrlen(lpszHeader);
HeaderEx.cchStatus=lstrlen(lpszStatus);
HeaderEx.fKeepConn=fKeepConn;
return pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX, &HeaderEx, NULL, NULL);}VOID WINAPI HseIoCompletionProc(EXTENSION_CONTROL_BLOCK *pecb, LPVOID lpContext, DWORD cbIO, DWORD cbError)
{
HSE_EXEC_URL_STATUS ExecUrlStatus={0};
BOOL rc;
LPHSE_EXEC_URL_ENTITY_INFO pEntity=(LPHSE_EXEC_URL_ENTITY_INFO)lpContext;
rc=pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_GET_EXEC_URL_STATUS, &ExecUrlStatus, NULL, NULL);
if(rc)
{
// log status
}
if(NULL!=pEntity)
{
LocalFree(pEntity);
}
pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_DONE_WITH_SESSION, NULL, NULL, NULL);
}
令pEntity->lpbData=MyBuffer;
pEntity->cbAvailable=cbBuffer;
再设一下pecb->cbTotayBytes=pEntity->cbAvailable就可以了。
OnPreprocHeaders(CHttpFilterContext* pfc, PHTTP_FILTER_PREPROC_HEADERS pHeaders)
事件中响应:
char szMethod[32]={0};
DWORD cbUrl = sizeof(szMethod);
pHeaders->GetHeader(pfc->m_pFC, "method",szMethod,&cbMethod);
...
OnPreprocHeaders(CHttpFilterContext* pfc, PHTTP_FILTER_PREPROC_HEADERS pHeaders)
事件中响应:
char szMethod[32]={0};
DWORD cbMethod = sizeof(szMethod);
pHeaders->GetHeader(pfc->m_pFC, "method",szMethod,&cbMethod);
...
ok1234567老兄,你能在OnPreprocHeaders方法里获取到客户端提交的POST数据吗?你上面的只能获得POST请求的类型吧?你能不能详细实现一下?