void WriteToTmpFile()
{
FILE *f = _tfopen( _T("c://aByFilter.tmp"), _T("wba") );
if( NULL == f )
{
OutputDebugString( _T("ProcessMailContent Err 1") );
return iRet;
}
else;
fwrite( lpBuffers->buf, 1, lpBuffers->len, f );
fclose( f );
OutputDebugString( _T("fwrite over~~") );
}
static int WSPAPI WSPRecv( SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno )
{
OutputDebugString( _T("WSPRecv filter ~~~~~~ vincent") );
BOOL bFirstPackage = FALSE, bContinueSave = FALSE;
char *LengthStart = NULL;
DWORD contentLength = 0;
char szMsg[MAX_PATH] = {0};
static DWORD sdwMaxLen = 0, sdwContentLength = 0;
TCHAR *szWarning = _T("安铁诺提示:该页有毒!");
int iRet = nextproctable.lpWSPRecv( s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno );
if( iRet != 0 )
{
return iRet;
}
else;
DWORD dwLen = *lpNumberOfBytesRecvd;
sprintf(szMsg, "This recv's lenght = %d", dwLen);
OutputDebugStringA(szMsg);
if( dwLen == 0 )
{
return iRet;
}
else;
for (UINT i = 0; i < dwBufferCount; i++)
{
sprintf(szMsg, "lpBuffers[%d]->buf ", i);
OutputDebugStringA(szMsg);
OutputDebugStringA(lpBuffers[i].buf);
}
//转储到文件
if ( strstr(lpBuffers->buf, ("Content-Type: text/html")) )
{
LengthStart = strstr(lpBuffers->buf, ("Content-Length: "));
if (LengthStart == NULL)
{
return iRet;
}
else
{
LengthStart += sizeof("Content-Length:");
if (LengthStart == NULL)
{
return iRet;
}
else;
}
sdwContentLength = atol(LengthStart);
sprintf(szMsg, "Http content's lenght = %d", contentLength);
OutputDebugStringA(szMsg);
if (*lpNumberOfBytesRecvd >= sdwContentLength)//一个包就搞定了
{
WriteToTmpFile();
}
else
{
for (; ;)//循环接收信息,直到一个网页接收完成。
{
if ()
{
return iRet;
}
iRet = nextproctable.lpWSPRecv( s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno );
if( iRet != 0 )
{
return iRet;
}
else;
}
}
}
else
{
}
/*
//转储到文件
if (strstr(lpBuffers->buf, ("Content-Type: text/html")))
{
bFirstPackage = TRUE;
bContinueSave = TRUE;
sdwMaxLen += dwLen;
LengthStart = strstr(lpBuffers->buf, ("Content-Length: "));
if (LengthStart == NULL)
{
return iRet;
}
else
{
LengthStart += sizeof("Content-Length:");
if (LengthStart == NULL)
{
return iRet;
}
else;
}
sdwContentLength = atol(LengthStart);
sprintf(szMsg, "Http content's lenght = %d", contentLength);
OutputDebugStringA(szMsg);
}
else
{
bFirstPackage = FALSE;
sprintf(szMsg, "sdwMaxLen = %d, sdwContentLength = %d", sdwMaxLen, sdwContentLength);
OutputDebugStringA(szMsg);
if (sdwMaxLen < sdwContentLength)
{
bContinueSave = TRUE;
}
else
{
bContinueSave = FALSE;
sdwMaxLen = 0;
sdwContentLength = 0;
}
}
if (bContinueSave)
{
FILE *f = _tfopen( _T("c://aByFilter.tmp"), _T("wba") );
if( NULL == f )
{
OutputDebugString( _T("ProcessMailContent Err 1") );
return iRet;
}
else;
fwrite( lpBuffers->buf, 1, lpBuffers->len, f );
fclose( f );
OutputDebugString( _T("fwrite over~~") );
}
else;
*/
return iRet;
}