#include "StdAfx.h"
|
#include "HttpServerListenerImpl.h"
|
|
|
CHttpServerListenerImpl::CHttpServerListenerImpl(void)
|
{
|
|
}
|
|
|
CHttpServerListenerImpl::~CHttpServerListenerImpl(void)
|
{
|
}
|
|
|
EnHandleResult CHttpServerListenerImpl::OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
|
{
|
return HR_OK;
|
}
|
|
// ÇëÇóÍê³É
|
EnHttpParseResult CHttpServerListenerImpl::OnHeadersComplete(IHttpServer* pSender, CONNID dwConnID)
|
{
|
|
return HPR_OK;
|
}
|
|
EnHttpParseResult CHttpServerListenerImpl::OnBody(IHttpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
|
{
|
return HPR_OK;
|
}
|
|
EnHttpParseResult CHttpServerListenerImpl::OnMessageComplete(IHttpServer* pSender, CONNID dwConnID)
|
{
|
CString strFileName,
|
strFileType;
|
CStringA strMethodA,strPathA;
|
|
LPCSTR lpMethod = pSender->GetMethod(dwConnID);
|
LPCSTR lpPath = pSender->GetUrlField(dwConnID, HUF_PATH);
|
|
strPathA.Format("%s",lpPath);
|
strMethodA.Format("%s",lpMethod);
|
strFileName = m_strListenPath;
|
strFileName += strPathA;
|
|
strFileType = GetFileType( strFileName );
|
|
if( strMethodA.MakeLower() == _T("get") )
|
{
|
THeader header[2] = {};
|
|
if( strFileType.MakeLower() == _T(".js") )
|
{
|
header[0].name = "Content-Type";
|
header[0].value = "text/js";
|
}
|
else if( strFileType.MakeLower() == _T(".css") )
|
{
|
header[0].name = "Content-Type";
|
header[0].value = "text/css";
|
}
|
else if( strFileType.MakeLower() == _T(".html") )
|
{
|
header[0].name = "Content-Type";
|
header[0].value = "text/html";
|
}else if(strFileType.MakeLower() == _T(".png"))
|
{
|
header[0].name = "Content-Type";
|
header[0].value = "application/x-plt";
|
}
|
else{
|
header[0].name = "Content-Type";
|
header[0].value = "text/plain";
|
}
|
CStringA strBody = GetFileContent( strFileName );
|
|
int iBodyLength = strBody.GetLength();
|
|
CStringA strContentLength;
|
strContentLength.Format("%u", iBodyLength);
|
|
|
header[1].name = "Content-Length";
|
header[1].value = strContentLength;
|
|
int iHeaderCount = sizeof(header) / sizeof(THeader);
|
|
pSender->SendResponse( dwConnID,
|
HSC_OK,
|
"HP Http Server OK",
|
header, iHeaderCount,
|
(const BYTE*)(LPCSTR)strBody,
|
iBodyLength);
|
|
if(!pSender->IsKeepAlive(dwConnID))
|
pSender->Release(dwConnID);
|
}// end if( strMethodA.MakeLower() == _T("get") )
|
|
return HPR_OK;
|
}
|
|
EnHttpParseResult CHttpServerListenerImpl::OnParseError(IHttpServer* pSender, CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc)
|
{
|
|
return HPR_OK;
|
}
|
|
void CHttpServerListenerImpl::SetListenPath( CString strListenPath )
|
{
|
m_strListenPath = strListenPath;
|
}
|
|
CString CHttpServerListenerImpl::GetFileType( CString &strFileName )
|
{
|
int n = strFileName.ReverseFind('.');
|
if( -1 == n )
|
return _T("");
|
return strFileName.Right(strFileName.GetLength() - n);
|
}
|
|
CStringA CHttpServerListenerImpl::GetFileContent( CString &strFileName )
|
{
|
if(!IsExist(strFileName))
|
{
|
return "";
|
}
|
CFile file(strFileName,CFile::modeRead|CFile::typeBinary);
|
file.SeekToBegin();
|
char *buf;
|
int len=file.GetLength();
|
buf=new char[len+1];
|
file.Read(buf,len);
|
buf[len]=0;
|
CStringA resStr= buf;
|
delete buf;
|
|
file.Close();
|
|
return resStr;
|
}
|
|
|
// ÅжÏÎļþÊÇ·ñ´æÔÚ
|
bool CHttpServerListenerImpl::IsExist( CString strFile)
|
{
|
DWORD dwAttrib = GetFileAttributes(strFile);
|
return INVALID_FILE_ATTRIBUTES != dwAttrib && 0 == (dwAttrib & FILE_ATTRIBUTE_DIRECTORY);
|
}
|