void CopyPopupDataToClipboard(HWND hList, int selection) { if (!selection) { return; } if (!GetOpenClipboardWindow()) { if (OpenClipboard(hList)) { TCHAR buffer[2048]; buffer[0] = _T('\0'); TCHAR *clipboard; int i; int found = 0; int count = ListView_GetItemCount(hList); int textType; #ifdef _UNICODE textType = CF_UNICODETEXT; #else textType = CF_TEXT; #endif for (i = 0; i < count; i++) { if (ListView_GetItemState(hList, i, LVIS_SELECTED)) { ListView_GetItemText(hList, i, selection - 100, buffer, 2048); found = 1; break; } } if (found) { EmptyClipboard(); int len = (int)_tcslen(buffer); HANDLE hData = GlobalAlloc(GMEM_MOVEABLE, (len + 2) * sizeof(TCHAR)); clipboard = (TCHAR *) GlobalLock(hData); _tcsncpy(clipboard, buffer, len); clipboard[len] = _T('\0'); GlobalUnlock(hData); if (!SetClipboardData(textType, hData)) { PUShowMessage("Could not set clipboard data", SM_WARNING); } } CloseClipboard(); } else{ PUShowMessage("Could not open clipboard", SM_WARNING); } } else{ PUShowMessage("The clipboard is not available", SM_WARNING); } }
INT_PTR CheckForUpdatesTrgr(WPARAM wParam, LPARAM lParam) { if(wParam & ACT_PERFORM) { #ifdef DEBUG_POPUPS PUShowMessage("Updater: triggered check", SM_NOTIFY); #endif CallService(MS_UPDATE_CHECKFORUPDATES, (WPARAM)(is_idle && options.no_conf_idle), 0); } return 0; }
int MyPUShowMessage(char *lpzText, BYTE kind) { if (ServiceExists(MS_POPUP_SHOWMESSAGE)) { return PUShowMessage(lpzText, kind); } else{ char *title = (kind == SM_NOTIFY) ? Translate("Notify") : Translate("Warning"); return MessageBox(NULL, lpzText, title, MB_OK | (kind == SM_NOTIFY) ? MB_ICONINFORMATION : MB_ICONEXCLAMATION); } }
bool ICMP::ping(char *host, ICMP_ECHO_REPLY &reply) { if (!functions_loaded) return false; HOSTENT *rec; IP_OPTION_INFORMATION ipoi; unsigned long address = inet_addr(host); if (address == INADDR_NONE) { rec = gethostbyname(host); if (rec != NULL) address = *(unsigned long *)(*rec->h_addr_list); else return false; } ipoi.Ttl = 255; ipoi.Tos = 0; ipoi.Flags = 0; ipoi.OptionsSize = 0; ipoi.OptionsData = 0; reply.Status = 0; hIP = IcmpCreateFile(); if (hIP == INVALID_HANDLE_VALUE) return false; DWORD rep_cnt = IcmpSendEcho2(hIP, 0, 0, 0, address, data, sizeof(data), 0, buff, BUFFER_SIZE, timeout); if (rep_cnt == 0) { DWORD code = GetLastError(); if (code != 11010) { char winmsg[512], msg[1024]; FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, code, 0, winmsg, 512, 0); mir_snprintf(msg, 1024, "Ping error (%d): %s", code, winmsg); PUShowMessage(msg, SM_NOTIFY); return false; } } memcpy(&reply, buff, sizeof(ICMP_ECHO_REPLY)); IcmpCloseHandle(hIP); return (reply.Status == 0); }
void RestoreStatus() { //NotifyEventHooks(hStartupDone, 0, 0); // do this in a seperate thread, in case we're called from an event hook to prevent double-lock on core hook critical section (csHooks) CallFunctionAsync(sttNotifyStartup, NULL); if(options.start_offline) { // restore global status - only works on startup since we remove the SavedGlobalStatus parameter WORD clist_status = DBGetContactSettingWord(0, "CList", "Status", ID_STATUS_OFFLINE), saved_global_status = DBGetContactSettingWord(0, MODULE, "SavedGlobalStatus", clist_status); if(clist_status == ID_STATUS_OFFLINE && saved_global_status != clist_status) { #ifdef DEBUG_POPUPS PUShowMessage("Updater: restoring status", SM_NOTIFY); #endif CallService(MS_CLIST_SETSTATUSMODE, (WPARAM)saved_global_status, 0); } } DBDeleteContactSetting(0, MODULE, "SavedGlobalStatus"); }
int PrebuildContactMenu(WPARAM wParam, LPARAM lParam) { HANDLE hContact = (HANDLE)wParam; CLISTMENUITEM mi = {0}; mi.cbSize = sizeof(CLISTMENUITEM); if(MetaEnabled()) { if(IsSubcontact(hContact)) { mi.flags = CMIM_FLAGS | CMIF_HIDDEN; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuAdd, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuConvert, (LPARAM)&mi); mi.flags = CMIM_FLAGS; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuDefault, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuRemove, (LPARAM)&mi); } else if(IsMetacontact(hContact)) { GetCursorPos(&menuMousePoint); mi.flags = CMIM_FLAGS | CMIF_HIDDEN; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuAdd, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuConvert, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuDefault, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuRemove, (LPARAM)&mi); if(!metaMap.exists(hContact)) { PUShowMessage("No such meta!", SM_WARNING); return 0; } // show subcontact menu items mi.flags = CMIM_FLAGS | CMIM_NAME | CMIM_ICON | CMIF_TCHAR; HIMAGELIST il = (HIMAGELIST)CallService(MS_CLIST_GETICONSIMAGELIST, 0, 0); SubcontactList::Iterator i = metaMap[hContact].start(); int count = 0; TCHAR buff[31]; while(i.has_val()) { // limit names to 30 chars mir_sntprintf(buff, 31, _T("%s"), ContactName(i.val().handle())); mi.ptszName = buff; mi.hIcon = ImageList_GetIcon(il, (int)CallService(MS_CLIST_GETCONTACTICON, (WPARAM)i.val().handle(), 0), 0); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuContact[count], (LPARAM)&mi); i.next(); count++; } mi.flags = CMIM_FLAGS | CMIF_HIDDEN; for(;count < MAX_SUBCONTACTS; count++) CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuContact[count], (LPARAM)&mi); // show hide nudge menu item // wParam = char *szProto // lParam = BOOL show #define MS_NUDGE_SHOWMENU "NudgeShowMenu" { char serviceFunc[256]; hContact = Meta_GetActive((HANDLE)wParam); mir_snprintf(serviceFunc, 256, "%s/SendNudge", ContactProto(hContact)); CallService(MS_NUDGE_SHOWMENU, (WPARAM)MODULE, (LPARAM)ServiceExists(serviceFunc)); } } else { mi.flags = CMIM_FLAGS; if(metaMap.size()) CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuAdd, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuConvert, (LPARAM)&mi); mi.flags = CMIM_FLAGS | CMIF_HIDDEN; if(!metaMap.size()) CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuAdd, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuRemove, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuDefault, (LPARAM)&mi); } } else { mi.flags = CMIM_FLAGS | CMIF_HIDDEN; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuAdd, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuConvert, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuDefault, (LPARAM)&mi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuRemove, (LPARAM)&mi); } return 0; }
bool UpdateXMLData(const Category cat, const char *redirect_url /*= 0*/, int recurse_count /*=0*/) { if(recurse_count > MAX_REDIRECT_RECURSE) { PUShowMessageT(TranslateT("Updater: Error getting data - too many redirects"), SM_WARNING); return false; } NETLIBHTTPREQUEST req = {0}; NETLIBHTTPHEADER etag_hdr = {0}; if(OldXMLDataExists(cat)) { // ensure backend not checked more than once every MIN_XMLDATA_AGE hours long age = OldXMLDataAge(cat); if(age >= 0 && age < MIN_XMLDATA_AGE) { // get it only if our file is at least 8 hours old #ifdef DEBUG_HTTP_POPUPS char buff[512]; sprintf(buff, "XML Data is recent (%d hours old) - not downloading, using local copy", age); PUShowMessage(buff, SM_NOTIFY); #endif return LoadOldXMLData(cat, false); } // add ETag header for conditional get DBCONTACTGETSETTING cgs; DBVARIANT dbv; cgs.szModule = MODULE; char buff[256]; strcpy(buff, "DataETag_"); strcat(buff, category_files[cat]); cgs.szSetting = buff; cgs.pValue = &dbv; if(!CallService(MS_DB_CONTACT_GETSETTING, 0, (LPARAM)&cgs)) { req.headersCount = 1; req.headers = &etag_hdr; etag_hdr.szName = "If-None-Match"; etag_hdr.szValue = _strdup(dbv.pszVal); DBFreeVariant(&dbv); } } req.cbSize = sizeof(req); req.requestType = REQUEST_GET; char URL[MAX_PATH]; if(!redirect_url) { strcpy(URL, MIM_BACKEND_URL_PREFIX); strcat(URL, category_files[cat]); strcat(URL, ".bz2"); } else { strcpy(URL, redirect_url); } req.szUrl = URL; req.flags = NLHRF_HTTP11; req.nlc = hNetlibHttp; if (CallService(MS_SYSTEM_GETVERSION, 0, 0) >= PLUGIN_MAKE_VERSION(0,9,0,5)) req.flags |= NLHRF_PERSISTENT | NLHRF_REDIRECT; NETLIBHTTPREQUEST *resp = (NETLIBHTTPREQUEST *)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser, (LPARAM)&req); free(etag_hdr.szValue); if (!resp) { hNetlibHttp = NULL; if (!Miranda_Terminated()) { int err = GetLastError(); if (err) { TCHAR buff[512]; int len = mir_sntprintf(buff, SIZEOF(buff), TranslateT("Failed to download XML data: ")); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, err, 0, buff + len, 512 - len, 0); ShowError(buff); //MessageBox(0, buff + len, TranslateT("Updater: Error Downloading XML Data"), MB_OK | MB_ICONWARNING); } else { ShowError(TranslateT("Failed to download XML data - Response is NULL")); //MessageBox(0, TranslateT("Error downloading XML data...\nResponse is NULL"), TranslateT("Updater Error"), MB_OK | MB_ICONWARNING); NLog("Failed to download XML data - Response is NULL"); } } return LoadOldXMLData(cat, false); } else if (resp->resultCode == 304) { // 'Not Modified' response hNetlibHttp = resp->nlc; CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); resp = 0; #ifdef DEBUG_HTTP_POPUPS PUShowMessage("XML Data unchanged - using local copy", SM_NOTIFY); #endif // mark data as current return LoadOldXMLData(cat, true); } else if(resp->resultCode >= 300 && resp->resultCode < 400) { // redirect response hNetlibHttp = resp->nlc; // get new location bool ret = false; for(int i = 0; i < resp->headersCount; i++) { //MessageBox(0, resp->headers[i].szValue, resp->headers[i].szName, MB_OK); if(strcmp(resp->headers[i].szName, "Location") == 0) { ret = UpdateXMLData(cat, resp->headers[i].szValue, recurse_count + 1); break; } } CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); resp = 0; if(!ret) return LoadOldXMLData(cat, false); return ret; } else if(resp->resultCode != 200) { hNetlibHttp = resp->nlc; TCHAR buff[512]; mir_sntprintf(buff, SIZEOF(buff), TranslateT("Failed to download XML data - Invalid response, code %d"), resp->resultCode); ShowError(buff); NLog(buff); CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); resp = 0; return LoadOldXMLData(cat, false); } // resp->resultCode == 200 hNetlibHttp = resp->nlc; if(!bz2_decompress_xml(resp->pData, resp->dataLength, &pData[cat], &dataLength[cat])) { ShowError(TranslateT("Failed to decompress XML data")); CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); resp = 0; return LoadOldXMLData(cat, false); } // store date header and data for response 'Not Modified' (304) above for(int i = 0; i < resp->headersCount; i++) { //MessageBox(0, resp->headers[i].szValue, resp->headers[i].szName, MB_OK); if(strcmp(resp->headers[i].szName, "ETag") == 0) { //MessageBox(0, resp->headers[i].szValue, "Storing ETag", MB_OK); char buff[256]; strcpy(buff, "DataETag_"); strcat(buff, category_files[cat]); DBWriteContactSettingString(0, MODULE, buff, resp->headers[i].szValue); } } CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); resp = 0; SaveXMLData(cat); doc[cat] = ezxml_parse_str((char*)pData[cat], strlen((char*)pData[cat])); if (!doc[cat]) return false; return true; }