int OpenBayes() { char bayesdb_fullpath[MAX_PATH]; char *bayesdb_fullpath_utf8; char *errmsg, *tmp; sqlite3_stmt *stmt; if (hBayesFolder) { FoldersGetCustomPath(hBayesFolder, bayesdb_fullpath, MAX_PATH, ""); } else { tmp = Utils_ReplaceVars("%miranda_userdata%"); if (tmp[mir_strlen(tmp)-1] == '\\') tmp[mir_strlen(tmp)-1] = 0; mir_strcpy(bayesdb_fullpath, tmp); mir_strcat(bayesdb_fullpath, "\\" BAYESDB_PATH); mir_free(tmp); } CreateDirectoryTree(bayesdb_fullpath); mir_strcat(bayesdb_fullpath, "\\" BAYESDB_FILENAME); bayesdb_fullpath_utf8 = mir_utf8encode(bayesdb_fullpath); if (sqlite3_open(bayesdb_fullpath_utf8, &bayesdb) == SQLITE_OK) { sqlite3_exec(bayesdb, "CREATE TABLE IF NOT EXISTS spam (token blob(16), num int)", NULL, NULL, &errmsg); sqlite3_exec(bayesdb, "CREATE TABLE IF NOT EXISTS ham (token blob(16), num int)", NULL, NULL, &errmsg); sqlite3_exec(bayesdb, "CREATE TABLE IF NOT EXISTS stats (key varchar(32), value int)", NULL, NULL, &errmsg); sqlite3_exec(bayesdb, "CREATE TABLE IF NOT EXISTS queue (contact int, msgtime int, message text)", NULL, NULL, &errmsg); sqlite3_prepare_v2(bayesdb, "SELECT count(1) FROM stats WHERE key='spam_msgcount' OR key='ham_msgcount'", -1, &stmt, NULL); if (sqlite3_step(stmt) == SQLITE_ROW) if (sqlite3_column_int(stmt, 0) != 2) { sqlite3_exec(bayesdb, "INSERT INTO stats VALUES ('spam_msgcount', 0)", NULL, NULL, NULL); sqlite3_exec(bayesdb, "INSERT INTO stats VALUES ('ham_msgcount', 0)", NULL, NULL, NULL); } } else { MessageBoxA(NULL, bayesdb_fullpath_utf8, "Can't open database", MB_OK); } mir_free(bayesdb_fullpath_utf8); #ifdef _DEBUG tmp = Utils_ReplaceVars("%miranda_userdata%"); if (tmp[mir_strlen(tmp)-1] == '\\') tmp[mir_strlen(tmp)-1] = 0; mir_snprintf(bayesdb_fullpath, "%s\\%s\\%s", tmp, BAYESDB_PATH, BAYESDBG_FILENAME); mir_free(tmp); bayesdb_fullpath_utf8 = mir_utf8encode(bayesdb_fullpath); if (sqlite3_open(bayesdb_fullpath_utf8, &bayesdbg) == SQLITE_OK) { sqlite3_exec(bayesdbg, "CREATE TABLE spam (token varchar(50), num int)", NULL, NULL, &errmsg); sqlite3_exec(bayesdbg, "CREATE TABLE ham (token varchar(50), num int)", NULL, NULL, &errmsg); } mir_free(bayesdb_fullpath_utf8); #endif return 0; }
static void verToStr(char *szStr, int v) { char szVer[64]; makeClientVersion(szVer, "", (v >> 24) & 0x7F, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF); mir_strcat(szStr, szVer); if (v & 0x80000000) mir_strcat(szStr, " alpha"); }
static LONG RestoreRegTree(HKEY hKey,const char *pszSubKey,const char *pszDbPrefix) { char **ppszSettings,*pszSuffix; int nSettingsCount,i; char *pslash=NULL,*pnext,*pkeys; char *pszValName; WCHAR *pwszValName; HKEY hSubKey; DWORD dwType,cbData; BYTE *pData; int nDbPrefixLen = (int)mir_strlen(pszDbPrefix); int nPrefixWithSubKeyLen = nDbPrefixLen + (int)mir_strlen(pszSubKey) + 1; char *pszPrefixWithSubKey = (char*)mir_alloc(nPrefixWithSubKeyLen+1); if (pszPrefixWithSubKey == NULL) return ERROR_OUTOFMEMORY; mir_strcat(mir_strcat(mir_strcpy(pszPrefixWithSubKey,pszDbPrefix),pszSubKey),"\\"); /* buffer safe */ LONG res=ERROR_NO_MORE_ITEMS; if (pszPrefixWithSubKey!=NULL) { if (EnumDbPrefixSettings("AssocMgr",pszPrefixWithSubKey,&ppszSettings,&nSettingsCount)) { for(i=0;i<nSettingsCount;++i) { pszSuffix=&ppszSettings[i][nDbPrefixLen]; /* key hierachy */ pkeys=mir_strcpy((char*)_alloca(mir_strlen(pszSuffix)+1),pszSuffix); pnext=pkeys; while((pnext=strchr(pnext+1,_T('\\')))!=NULL) pslash=pnext; if (pslash!=NULL) { /* create subkey */ *(pslash++)=0; hSubKey=hKey; if (pslash!=pkeys+1) if ((res=RegCreateKeyExA(hKey,pkeys,0,NULL,0,KEY_SET_VALUE,NULL,&hSubKey,NULL))!=ERROR_SUCCESS) break; pszValName=pslash; /* read data */ if (ReadDbBackupData(ppszSettings[i],&dwType,&pData,&cbData)) { /* set value */ if (!(dwType®F_ANSI)) { pwszValName=a2u(pszValName,FALSE); if (pwszValName!=NULL) res=RegSetValueExW(hSubKey,pwszValName,0,dwType,pData,cbData); else res=ERROR_NOT_ENOUGH_MEMORY; mir_free(pwszValName); /* does NULL check */ } else res=RegSetValueExA(hSubKey,pszValName,0,dwType&~REGF_ANSI,pData,cbData); mir_free(pData); } else res=ERROR_INVALID_DATA; if (res) break; db_unset(NULL,"AssocMgr",ppszSettings[i]); if (hSubKey!=hKey) RegCloseKey(hSubKey); } mir_free(ppszSettings[i]); } mir_free(ppszSettings); } mir_free(pszPrefixWithSubKey); } return res; }
char* BuildSetting(int historyLast) { static char setting[15]; static char sztemp[15]; *setting = '\0'; mir_strcat(setting, "History_"); mir_strcat(setting, _itoa(historyLast, sztemp, 10)); return setting; }
void InitIcqFiles(void) { char szService[MAX_PATH + 32]; mir_strcat(mir_strcpy(szService, gpszICQProtoName), "OpenFile"); hServiceOpenFile = CreateServiceFunction(szService, IcqOpenFile); hHookModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, IcqFilesModulesLoaded); }
int Log(char *format, ...) { #ifdef _DEBUG char str[4096]; va_list vararg; int tBytes; FILE *fout = fopen(LOG_FILE, "at"); if (!fout) return -1; time_t tNow = time(NULL); struct tm *now = localtime(&tNow); strftime(str, sizeof(str), "%d %b %Y @ %H:%M:%S: ", now); fputs(str, fout); va_start(vararg, format); tBytes = mir_vsnprintf(str, sizeof(str), format, vararg); if (tBytes > 0) str[tBytes] = 0; va_end(vararg); if (str[mir_strlen(str) - 1] != '\n') mir_strcat(str, "\n"); fputs(str, fout); fclose(fout); #endif return 0; }
int BrowseForFolder(HWND hwnd, char *szPath) { int result = 0; LPMALLOC pMalloc; if (SUCCEEDED(CoGetMalloc(1, &pMalloc))) { ptrT tszPath(mir_a2t(szPath)); BROWSEINFO bi = { 0 }; bi.hwndOwner = hwnd; bi.pszDisplayName = tszPath; bi.lpszTitle = TranslateT("Select Folder"); bi.ulFlags = BIF_EDITBOX | BIF_RETURNONLYFSDIRS; // Use this combo instead of BIF_USENEWUI bi.lParam = (LPARAM)szPath; ITEMIDLIST *pidlResult = SHBrowseForFolder(&bi); if (pidlResult) { SHGetPathFromIDListA(pidlResult, szPath); mir_strcat(szPath, "\\"); result = 1; } pMalloc->Free(pidlResult); pMalloc->Release(); } return result; }
int CheckBayes() { char bayesdb_fullpath[MAX_PATH]; char bayesdb_tmp[MAX_PATH]; char* tmp = Utils_ReplaceVars("%miranda_userdata%"); if (tmp[mir_strlen(tmp)-1] == '\\') tmp[mir_strlen(tmp)-1] = 0; mir_snprintf(bayesdb_tmp, "%s\\%s", tmp, BAYESDB_PATH); mir_free(tmp); if (ServiceExists(MS_FOLDERS_REGISTER_PATH)) { hBayesFolder = FoldersRegisterCustomPath(PLUGIN_NAME, Translate("Bayes database path"), bayesdb_tmp); } else hBayesFolder = 0; if (hBayesFolder) FoldersGetCustomPath(hBayesFolder, bayesdb_fullpath, MAX_PATH, bayesdb_tmp); else strncpy_s(bayesdb_fullpath, bayesdb_tmp, _TRUNCATE); mir_strcat(bayesdb_fullpath, "\\" BAYESDB_FILENAME); if (_access(bayesdb_fullpath,0) == 0) return 1; return 0; }
// ANSIz + ANSIz = ANSIz char* m_ustrcat(LPCSTR strA, LPCSTR strB) { SAFE_FREE(m_string); m_string = (LPSTR)mir_alloc(mir_strlen(strA) + mir_strlen(strB) + 1); mir_strcpy(m_string, strA); mir_strcat(m_string, strB); return m_string; }
int Log(char *format, ...) { char str[4096]; va_list vararg; int tBytes; FILE *fout = fopen("IEHistory.log", "at"); if (!fout) { // MessageBox(0, "can't open file", NULL, MB_OK); } va_start(vararg, format); tBytes = _vsnprintf(str, sizeof(str), format, vararg); if (tBytes > 0) { str[tBytes] = 0; } va_end(vararg); if (str[mir_strlen(str) - 1] != '\n') { mir_strcat(str, "\n"); } fputs(str, fout); fclose(fout); return 0; }
HANDLE CSametimeProto::AcceptFileTransfer(MCONTACT hContact, HANDLE hFt, char* save_path) { mwFileTransfer* ft = (mwFileTransfer*)hFt; CSametimeProto* proto = getProtoFromMwFileTransfer(ft); debugLog(_T("CSametimeProto::AcceptFileTransfer() start")); FileTransferClientData* ftcd = new FileTransferClientData; memset(ftcd, 0, sizeof(FileTransferClientData)); ftcd->ft = ft; ftcd->sending = false; ftcd->hFt = hFt; if (save_path) // save path ftcd->save_path = _strdup(save_path); else ftcd->save_path = 0; mwFileTransfer_setClientData(ft, (gpointer)ftcd, 0); char fp[MAX_PATH]; char* fn = strrchr((char*)mwFileTransfer_getFileName(ft), '\\'); if (fn) fn++; if (ftcd->save_path) mir_strcpy(fp, ftcd->save_path); else fp[0] = 0; if (fn) mir_strcat(fp, fn); else mir_strcat(fp, mwFileTransfer_getFileName(ft)); ftcd->hFile = CreateFileA(fp, GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_ALWAYS, 0, 0); if (ftcd->hFile == INVALID_HANDLE_VALUE) { debugLog(_T("CSametimeProto::AcceptFileTransfer() INVALID_HANDLE_VALUE")); mwFileTransfer_close(ft, mwFileTransfer_ERROR); return 0; } ftcd->hContact = hContact; mwFileTransfer_setClientData(ft, (gpointer)ftcd, 0); mwFileTransfer_accept(ft); return hFt; }
static void DeleteRegTreeBackup(const char *pszSubKey,const char *pszDbPrefix) { char **ppszSettings; int nSettingsCount,i; char *pszPrefixWithSubKey=(char*)mir_alloc(mir_strlen(pszDbPrefix)+mir_strlen(pszSubKey)+2); if (pszPrefixWithSubKey==NULL) return; mir_strcat(mir_strcat(mir_strcpy(pszPrefixWithSubKey,pszDbPrefix),pszSubKey),"\\"); /* buffer safe */ if (pszPrefixWithSubKey!=NULL) { if (EnumDbPrefixSettings("AssocMgr",pszPrefixWithSubKey,&ppszSettings,&nSettingsCount)) { for(i=0;i<nSettingsCount;++i) { db_unset(NULL,"AssocMgr",ppszSettings[i]); mir_free(ppszSettings[i]); } mir_free(ppszSettings); } mir_free(pszPrefixWithSubKey); } }
// ANSIz + ANSIz = ANSIzUCS2z char* m_aastrcat(LPCSTR strA, LPCSTR strB) { int lenA = (int)mir_strlen(strA); int lenB = (int)mir_strlen(strB); LPSTR str = (LPSTR)mir_alloc((lenA + lenB + 1)*(sizeof(WCHAR) + 1)); mir_strcpy(str, strA); mir_strcat(str, strB); MultiByteToWideChar(CP_ACP, 0, str, -1, (LPWSTR)(str + lenA + lenB + 1), (lenA + lenB + 1)*sizeof(WCHAR)); return str; }
static INT_PTR CALLBACK WarnIniChangeDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) { static warnSettingChangeInfo_t *warnInfo; switch(message) { case WM_INITDIALOG: { char szSettingName[256]; const TCHAR *pszSecurityInfo; warnInfo = (warnSettingChangeInfo_t*)lParam; TranslateDialogDefault(hwndDlg); SetDlgItemText(hwndDlg, IDC_ININAME, warnInfo->szIniPath); mir_strcpy(szSettingName, warnInfo->szSection); mir_strcat(szSettingName, " / "); mir_strcat(szSettingName, warnInfo->szName); SetDlgItemTextA(hwndDlg, IDC_SETTINGNAME, szSettingName); SetDlgItemTextA(hwndDlg, IDC_NEWVALUE, warnInfo->szValue); if (IsInSpaceSeparatedList(warnInfo->szSection, warnInfo->szSafeSections)) pszSecurityInfo = LPGENT("This change is known to be safe."); else if (IsInSpaceSeparatedList(warnInfo->szSection, warnInfo->szUnsafeSections)) pszSecurityInfo = LPGENT("This change is known to be potentially hazardous."); else pszSecurityInfo = LPGENT("This change is not known to be safe."); SetDlgItemText(hwndDlg, IDC_SECURITYINFO, TranslateTS(pszSecurityInfo)); } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: warnInfo->cancel = 1; // fall through case IDYES: case IDNO: warnInfo->warnNoMore = IsDlgButtonChecked(hwndDlg, IDC_WARNNOMORE); EndDialog(hwndDlg, LOWORD(wParam)); break; } break; } return FALSE; }
static int IcqFilesModulesLoaded(WPARAM wParam, LPARAM lParam) { char szService[MAX_PATH + 32]; UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(lParam); mir_strcat(mir_strcpy(szService, gpszICQProtoName), "OpenFile"); /* .icq files are not used, just by the ProtoLink plugin */ //AssocMgr_AddNewFileTypeT(".icq","application/x-icq",TranslateT("ICQ link shortcut"),TranslateT("&Add to contact list..."),hInst,IDI_ICQ,szService,FTDF_BROWSERAUTOOPEN|FTDF_ISTEXT|FTDF_ISSHORTCUT|FTDF_DEFAULTDISABLED); AssocMgr_AddNewFileTypeT(".uin", "application/x-icq", TranslateT("ICQ link shortcut"), TranslateT("&Add to contact list..."), hInst, IDI_ICQ, szService, FTDF_BROWSERAUTOOPEN | FTDF_ISTEXT | FTDF_ISSHORTCUT); return 0; }
static char* MirandaVersionToStringEx(char* szStr, int bUnicode, const char* szPlug, int v, int m) { if (!v) // this is not Miranda return NULL; mir_strcpy(szStr, "Miranda IM "); if (!m && v == 1) verToStr(szStr, 0x80010200); else if (!m && (v & 0x7FFFFFFF) <= 0x030301) verToStr(szStr, v); else { if (m) { verToStr(szStr, m); mir_strcat(szStr, " "); } if (bUnicode) mir_strcat(szStr, "Unicode "); mir_strcat(szStr, "("); mir_strcat(szStr, szPlug); mir_strcat(szStr, " v"); verToStr(szStr, v); mir_strcat(szStr, ")"); } return szStr; }
int ParsePage(char *page, resultLink *prst) { char *str_head; char *str_tail; char name[64], title[64]; int num = 0; wchar_t str[64]; prst->next = NULL; if (strstr(page, "Unauthorized")) return -1; if (!(str_head = strstr(page, "<entry>"))) return 0; while (str_head = strstr(str_head, "<title>")) { prst = prst->next = (resultLink *)malloc(sizeof(resultLink)); str_head += 7; str_tail = strstr(str_head, "</title>"); *str_tail = '\0'; mir_strncpy(title, str_head, 41); if (mir_strlen(title) == 40) mir_strcat(title, "..."); *str_tail = ' '; str_head = strstr(str_head, "<name>") + 6; str_tail = strstr(str_head, "</name>"); *str_tail = '\0'; mir_strncpy(name, str_head, 11); mir_strcat(name, ": "); *str_tail = ' '; mir_strcpy(prst->content, name); mir_strcat(prst->content, title); MultiByteToWideChar(CP_UTF8, 0, prst->content, -1, str, 64); WideCharToMultiByte(CP_ACP, 0, str, -1, prst->content, 64, NULL, NULL); num++; } prst->next = NULL; return num; }
int IsResidentSetting(const char *module, const char *setting) { if (!m_lResidentSettings.getCount()) return 0; if (m_lResidentModules.getIndex((char*)module) == -1) return 0; if (!setting) return 1; char str[2*FLD_SIZE]; mir_strncpy(str, module, _countof(str)-1); mir_strcat(str, "/"); mir_strncat(str, setting, _countof(str)); return m_lResidentSettings.getIndex(str) != -1; }
char* MirandaModToString(char* szStr, capstr* capId, int bUnicode, const char* szModName) { // decode icqj mod version DWORD mver = (*capId)[0x4] << 0x18 | (*capId)[0x5] << 0x10 | (*capId)[0x6] << 8 | (*capId)[0x7]; DWORD iver = (*capId)[0x8] << 0x18 | (*capId)[0x9] << 0x10 | (*capId)[0xA] << 8 | (*capId)[0xB]; DWORD scode = (*capId)[0xC] << 0x18 | (*capId)[0xD] << 0x10 | (*capId)[0xE] << 8 | (*capId)[0xF]; char *szClient = MirandaVersionToStringEx(szStr, bUnicode, szModName, iver, mver); if (scode == 0x5AFEC0DE) mir_strcat(szClient, " + SecureIM"); return szClient; }
const char* CIcqProto::detectUserClient( MCONTACT hContact, int nIsICQ, WORD wUserClass, DWORD dwOnlineSince, const char *szCurrentClient, WORD wVersion, DWORD dwFT1, DWORD dwFT2, DWORD dwFT3, DWORD dwDirectCookie, DWORD dwWebPort, /* ICQ specific */ BYTE *caps, size_t wLen, /* Client capabilities */ BYTE *bClientId, /* Output: detected client-type */ char *szClientBuf) { LPCSTR szClient = NULL; int bMirandaIM = FALSE; *bClientId = CLID_ALTERNATIVE; // Most clients does not tick as MsgIDs // Is this a Miranda IM client? if (dwFT1 == 0xffffffff) { if (dwFT2 == 0xffffffff) // This is Gaim not Miranda szClient = "Gaim"; else if (!dwFT2 && wVersion == 7) // This is WebICQ not Miranda szClient = "WebICQ"; else if (!dwFT2 && dwFT3 == 0x3B7248ED) // And this is most probably Spam Bot szClient = cliSpamBot; else { // Yes this is most probably Miranda, get the version info szClient = MirandaVersionToStringEx(szClientBuf, 0, "ICQ", dwFT2, 0); *bClientId = CLID_MIRANDA; bMirandaIM = TRUE; } } else if (dwFT1 == 0x7fffffff) { // This is Miranda with unicode core szClient = MirandaVersionToStringEx(szClientBuf, 1, "ICQ", dwFT2, 0); *bClientId = CLID_MIRANDA; bMirandaIM = TRUE; } else if ((dwFT1 & 0xFF7F0000) == 0x7D000000) { // This is probably an Licq client DWORD ver = dwFT1 & 0xFFFF; szClient = makeClientVersion(szClientBuf, cliLicqVer, ver / 1000, (ver / 10) % 100, ver % 10, 0); if (dwFT1 & 0x00800000) mir_strcat(szClientBuf, "/SSL"); } else if (dwFT1 == 0xffffff8f) szClient = "StrICQ"; else if (dwFT1 == 0xffffff42) szClient = "mICQ"; else if (dwFT1 == 0xffffffbe) { unsigned ver1 = (dwFT2 >> 24) & 0xFF; unsigned ver2 = (dwFT2 >> 16) & 0xFF; unsigned ver3 = (dwFT2 >> 8) & 0xFF; szClient = makeClientVersion(szClientBuf, "Alicq ", ver1, ver2, ver3, 0); }
char *StringFromBlob(BYTE *blob, WORD len) { int j; char tmp[16]; char *data = (char*)mir_alloc(3 * (len + 2)); data[0] = 0; for (j = 0; j < len; j++) { mir_snprintf(tmp, "%02X ", blob[j]); mir_strcat(data, tmp); } return data; }
bool bWriteConfigurationFile() { CLFileShareListAccess clCritSection; char szBuf[1000]; mir_strcpy(szBuf, szPluginPath); mir_strcat(szBuf, szConfigFile); HANDLE hFile = CreateFile(szBuf, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { TCHAR temp[200]; mir_sntprintf(temp, _T("%s%s"), TranslateT("Failed to open or create file "), _T(szConfigFile)); MessageBox(NULL, temp, MSG_BOX_TITEL, MB_OK); return false; } DWORD dwBytesWriten = 0; if (!WriteFile(hFile, szXmlHeader, sizeof(szXmlHeader) - 1, &dwBytesWriten, NULL)) { TCHAR temp[200]; mir_sntprintf(temp, _T("%s%s"), TranslateT("Failed to write xml header to file "), _T(szConfigFile)); MessageBox(NULL, temp, MSG_BOX_TITEL, MB_OK); } else { CLFileShareNode * pclCur = pclFirstNode; while (pclCur) { DWORD dwBytesToWrite = mir_snprintf(szBuf, szXmlData, pclCur->st.pszSrvPath, pclCur->pszOrigRealPath, pclCur->st.nMaxDownloads, SplitIpAddress(pclCur->st.dwAllowedIP), SplitIpAddress(pclCur->st.dwAllowedMask)); if (!WriteFile(hFile, szBuf, dwBytesToWrite, &dwBytesWriten, NULL)) { TCHAR temp[200]; mir_sntprintf(temp, _T("%s%s"), TranslateT("Failed to write xml data to file "), _T(szConfigFile)); MessageBox(NULL, temp, MSG_BOX_TITEL, MB_OK); break; } pclCur = pclCur->pclNext; } if (!WriteFile(hFile, szXmlTail, sizeof(szXmlTail) - 1, &dwBytesWriten, NULL)) { TCHAR temp[200]; mir_sntprintf(temp, _T("%s%s"), TranslateT("Failed to write xml tail to file "), _T(szConfigFile)); MessageBox(NULL, temp, MSG_BOX_TITEL, MB_OK); } } SetEndOfFile(hFile); CloseHandle(hFile); return true; }
char* multiReplaceA(const char *value, const char *search, const char *replace, int cs) { int slen = (int)mir_strlen(search); int rlen = (int)mir_strlen(replace); int vlen = (int)mir_strlen(value); int ci = slen ? cs : 1; // on empty string strstr() returns full string while StrStrI() returns NULL // let's try to calculate maximum length for result string int newlen = (!slen) ? rlen + 1 : ( ( rlen <= slen ) ? vlen + 1 : vlen * rlen / slen + 1 ); char *head; char *in = (char*)value; char *out = (char*)mir_alloc(newlen * sizeof(char)); out[0] = 0; while (head = ci ? strstr(in, search) : StrStrIA(in, search)) { if (head != in) mir_strncat(out, in, head - in + 1); in = head + slen; mir_strcat(out, replace); } mir_strcat(out, in); return out; }
char* copyReplaceString(char* oldStr, char* newStr, char* findStr, char* replaceWithStr) { int i = 0; while (oldStr[i] != '\0') { // msg(&oldStr[i],""); if (!strncmp(&oldStr[i], findStr, mir_strlen(findStr))) { mir_strcat(newStr, replaceWithStr); i += (int)mir_strlen(findStr); } else { strncat(newStr, &oldStr[i], 1); i++; } } return newStr; }
static INT_PTR SendEMailCommand(WPARAM hContact, LPARAM lParam) { DBVARIANT dbv; char *szProto = GetContactProto(hContact); if (szProto == NULL || db_get_s(hContact, szProto, "e-mail", &dbv)) { if (db_get_s(hContact, "UserInfo", "Mye-mail0", &dbv)) { MessageBox((HWND)lParam, TranslateT("User has not registered an e-mail address"), TranslateT("Send e-mail"), MB_OK); return 1; } } char *szUrl = (char*)mir_alloc(mir_strlen(dbv.pszVal)+8); mir_strcpy(szUrl, "mailto:"); mir_strcat(szUrl, dbv.pszVal); mir_free(dbv.pszVal); mir_forkthread(SendEmailThread, szUrl); return 0; }
extern "C" int __declspec(dllexport) Load() { mir_getLP(&pluginInfo); char *strTmp; CMenuItem mi; SET_UID(mi, 0x2f9f21df, 0xf33c, 0x4640, 0xb9, 0x63, 0xd3, 0x26, 0x8a, 0xb8, 0xb1, 0xf0); mi.position = -0x7FFFFFFF; mi.hIcolibItem = Skin_LoadIcon(SKINICON_OTHER_MIRANDA); mi.name.a = LPGEN("Remove Personal Settings..."); mi.pszService="RemovePersonalSettings/RemoveAll"; Menu_AddMainMenuItem(&mi); CreateServiceFunction(mi.pszService, RemoveAllService); // Get ini file name gMirandaDir[0] = '\0'; GetModuleFileNameA(GetModuleHandle(NULL),gMirandaDir,sizeof(gMirandaDir)); // Remove last name strTmp = strrchr(gMirandaDir,'\\'); if(strTmp != NULL) *strTmp = '\0'; // Set vars mir_strcat(gMirandaDir, "\\"); mir_strcpy(gIniFile, gMirandaDir); // Store last pos strTmp = &gIniFile[mir_strlen(gIniFile)]; // Lets try fist name mir_strcpy(strTmp, INI_FILE_NAME); if (_access(gIniFile, 4) != 0) { // Not found, lets try the other aproach mir_strcpy(strTmp, "plugins\\" INI_FILE_NAME); if (_access(gIniFile, 4) != 0) { // Not found :( gIniFile[0] = '\0'; } } return 0; }
static char *StatusModeToDbSetting(int status, const char *suffix) { char *prefix; static char str[64]; switch (status) { case ID_STATUS_AWAY: prefix = "Away"; break; case ID_STATUS_NA: prefix = "Na"; break; case ID_STATUS_DND: prefix = "Dnd"; break; case ID_STATUS_OCCUPIED: prefix = "Occupied"; break; case ID_STATUS_FREECHAT: prefix = "FreeChat"; break; case ID_STATUS_ONLINE: prefix = "On"; break; case ID_STATUS_OFFLINE: prefix = "Off"; break; case ID_STATUS_INVISIBLE: prefix = "Inv"; break; case ID_STATUS_ONTHEPHONE: prefix = "Otp"; break; case ID_STATUS_OUTTOLUNCH: prefix = "Otl"; break; case ID_STATUS_IDLE: prefix = "Idl"; break; default: return NULL; } mir_strcpy(str, prefix); mir_strcat(str, suffix); return str; }
static void BackupRegTree_Worker(HKEY hKey,const char *pszSubKey,struct BackupRegTreeParam *param) { LONG res; DWORD nMaxSubKeyLen,nMaxValNameLen,nMaxValSize; DWORD index,cchName,dwType,cbData; BYTE *pData; char *pszName; register TCHAR *ptszName; DWORD nDbPrefixLen; if ((res=RegOpenKeyExA(hKey,pszSubKey,0,KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS,&hKey))==ERROR_SUCCESS) { if ((res=RegQueryInfoKey(hKey,NULL,NULL,NULL,NULL,&nMaxSubKeyLen,NULL,NULL,&nMaxValNameLen,&nMaxValSize,NULL,NULL))==ERROR_SUCCESS) { if (nMaxSubKeyLen>nMaxValNameLen) nMaxValNameLen=nMaxSubKeyLen; /* prepare buffer */ nDbPrefixLen = (DWORD)(mir_strlen(*param->ppszDbPrefix) + mir_strlen(pszSubKey) + 1); cchName = nDbPrefixLen + nMaxValNameLen + 3; if (cchName>*param->pdwDbPrefixSize) { pszName=(char*)mir_realloc(*param->ppszDbPrefix,cchName); if (pszName==NULL) return; *param->ppszDbPrefix=pszName; *param->pdwDbPrefixSize=cchName; } mir_strcat(mir_strcat(*param->ppszDbPrefix,pszSubKey),"\\"); /* buffer safe */ /* enum values */ pszName=(char*)mir_alloc(nMaxValNameLen+1); if (nMaxValSize==0) nMaxValSize=1; pData=(BYTE*)mir_alloc(nMaxValSize); if (pszName!=NULL && pData!=NULL) { index=0; while(!res) { cchName=nMaxValNameLen+1; cbData=nMaxValSize; if ((res=RegEnumValueA(hKey,index++,pszName,&cchName,NULL,NULL,NULL,NULL))==ERROR_SUCCESS) { (*param->ppszDbPrefix)[nDbPrefixLen]=0; mir_strcat(*param->ppszDbPrefix,pszName); /* buffer safe */ ptszName=a2t(pszName); if (ptszName!=NULL) { if (!RegQueryValueEx(hKey,ptszName,NULL,&dwType,pData,&cbData)) { WriteDbBackupData(*param->ppszDbPrefix,dwType,pData,cbData); } mir_free(ptszName); } } } if (res==ERROR_NO_MORE_ITEMS) res=ERROR_SUCCESS; } mir_free(pData); /* does NULL check */ /* enum subkeys */ if (param->level<32 && pszName!=NULL) { ++param->level; /* can be max 32 levels deep (after prefix), restriction of RegCreateKeyEx() */ index=0; while(!res) { cchName=nMaxSubKeyLen+1; if ((res=RegEnumKeyExA(hKey,index++,pszName,&cchName,NULL,NULL,NULL,NULL))==ERROR_SUCCESS) { (*param->ppszDbPrefix)[nDbPrefixLen]=0; BackupRegTree_Worker(hKey,pszName,param); /* recursion */ } } } if (res==ERROR_NO_MORE_ITEMS) res=ERROR_SUCCESS; mir_free(pszName); /* does NULL check */ } RegCloseKey(hKey); } }
// previously saved in DB resident settings are unaccessible. // so let's find them and delete from DB int fixResidentSettings() { if (!m_lResidentSettings.getCount() || fixing) return 0; ModuleSettingLL ModuleList, SettingList; ModSetLinkLinkItem *module, *setting; MCONTACT hContact = 0; int NULLContactDone = 0; char str[2*FLD_SIZE]; int cnt = 0; if (!EnumModules(&ModuleList)) return 0; fixing = 1; while (hwnd2mainWindow) { if (!hContact) { if (NULLContactDone) break; else { NULLContactDone = 1; hContact = db_find_first(); } } else hContact = db_find_next(hContact); for (module = ModuleList.first; module; module = module->next) { if (IsModuleEmpty(hContact, module->name) || m_lResidentModules.getIndex(module->name) == -1) continue; if (!EnumSettings(hContact, module->name, &SettingList)) continue; for (setting = SettingList.first; setting; setting = setting->next) { mir_strncpy(str, module->name, _countof(str)-1); mir_strcat(str, "/"); mir_strncat(str, setting->name, _countof(str)); int idx = m_lResidentSettings.getIndex(str); if (idx == -1) continue; g_db->SetSettingResident(0, str); db_unset(hContact, module->name, setting->name); g_db->SetSettingResident(1, str); cnt++; } // for(setting) FreeModuleSettingLL(&SettingList); } // for(module) } FreeModuleSettingLL(&ModuleList); fixing = 0; return cnt; }
void CheckMailInbox(Account *curAcc) { // internet connection handle // internet request handle HINTERNET hHTTPConnection = 0, hHTTPRequest = 0; DBVARIANT dbv; static char *contentType = "Content-Type: application/x-www-form-urlencoded"; char requestBuffer[256] = "continue=https%3A%2F%2Fmail.google.com%2Fa%2F"; char fileBuffer[_MAX_DOWN_BUFFER] = ""; char *tail; char str[64]; char temp[_MAX_DOWN_BUFFER] = ""; unsigned long bufferLength; if (curAcc->IsChecking) return; curAcc->IsChecking = TRUE; if (!db_get_s(curAcc->hContact, "CList", "MyHandle", &dbv)) { mir_strcpy(curAcc->results.content, dbv.pszVal); db_free(&dbv); } else mir_strcpy(curAcc->results.content, curAcc->name); tail = strstr(curAcc->results.content, " ["); if (tail) *tail = '\0'; mir_strcat(curAcc->results.content, " ["); mir_strcpy(str, curAcc->results.content); mir_strcat(str, Translate("Checking...")); mir_strcat(str, "]"); db_set_s(curAcc->hContact, "CList", "MyHandle", str); // internet open handle HINTERNET hHTTPOpen = InternetOpenA("", INTERNET_OPEN_TYPE_PRECONFIG, "", "", 0); if (!hHTTPOpen) { mir_strcat(curAcc->results.content, Translate("Can't open Internet!")); goto error_handle; } if (curAcc->hosted[0]) { hHTTPConnection = InternetConnectA(hHTTPOpen, "www.google.com", INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); if (!hHTTPConnection) { mir_strcat(curAcc->results.content, Translate("Can't reach server!")); goto error_handle; } mir_strcpy(str, "/a/"); mir_strcat(str, curAcc->hosted); mir_strcat(str, "/LoginAction"); hHTTPRequest = HttpOpenRequestA(hHTTPConnection, "POST", str, HTTP_VERSIONA, NULL, NULL, INTERNET_FLAG_SECURE, 0); mir_strcat(requestBuffer, curAcc->hosted); mir_strcat(requestBuffer, "%2Ffeed%2Fatom&service=mail&userName="******"&password="******"Can't send account data!")); goto error_handle; } InternetCloseHandle(hHTTPConnection); InternetCloseHandle(hHTTPRequest); hHTTPRequest = 0; } hHTTPConnection = InternetConnectA(hHTTPOpen, "mail.google.com", INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); if (!hHTTPConnection) { mir_strcat(curAcc->results.content, Translate("Can't reach server!")); goto error_handle; } if (curAcc->hosted[0]) { mir_strcpy(str, "/a/"); mir_strcat(str, curAcc->hosted); mir_strcat(str, "/feed/atom"); } else mir_strcpy(str, "/mail/feed/atom"); hHTTPRequest = HttpOpenRequest(hHTTPConnection, _T("GET"), _A2T(str), NULL, NULL, NULL, INTERNET_FLAG_SECURE | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_RELOAD, 0); InternetSetOption(hHTTPRequest, INTERNET_OPTION_USERNAME, _A2T(curAcc->name), (int)mir_strlen(curAcc->name) + 1); InternetSetOption(hHTTPRequest, INTERNET_OPTION_PASSWORD, _A2T(curAcc->pass), (int)mir_strlen(curAcc->pass) + 1); if (!HttpSendRequest(hHTTPRequest, NULL, 0, NULL, 0)) { mir_strcat(curAcc->results.content, Translate("Can't get RSS feed!")); goto error_handle; } while (InternetReadFile(hHTTPRequest, temp, _MAX_DOWN_BUFFER, &bufferLength) && bufferLength > 0) { temp[bufferLength] = '\0'; mir_strcat(fileBuffer, temp); } fileBuffer[_MAX_DOWN_BUFFER - 1] = '\0'; curAcc->results_num = ParsePage(fileBuffer, &curAcc->results); if (curAcc->results_num == -1) { mir_strcat(curAcc->results.content, Translate("Wrong name or password!")); goto error_handle; } InternetCloseHandle(hHTTPOpen); InternetCloseHandle(hHTTPConnection); InternetCloseHandle(hHTTPRequest); mir_strcat(curAcc->results.content, _itoa(curAcc->results_num, str, 10)); mir_strcat(curAcc->results.content, "]"); curAcc->IsChecking = FALSE; return; error_handle: curAcc->results_num = -1; InternetCloseHandle(hHTTPOpen); InternetCloseHandle(hHTTPConnection); InternetCloseHandle(hHTTPRequest); mir_strcat(curAcc->results.content, "]"); curAcc->IsChecking = FALSE; }