__declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion) { if ( mirandaVersion < PLUGIN_MAKE_VERSION(0,4,0,0) ) return NULL; pluginInfo.version=MakeVer(PRODUCT_VERSION); return &pluginInfo; }
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "commonheaders.h" int LoadSendRecvMessageModule(void); int SplitmsgShutdown(void); PLUGINLINK *pluginLink; HINSTANCE g_hInst; PLUGININFO pluginInfo = { sizeof(PLUGININFO), "Scriver", PLUGIN_MAKE_VERSION(2, 3, 2, 6), #ifdef _UNICODE "Scriver - send and receive instant messages (Unicode)", #else "Scriver - send and receive instant messages", #endif "Miranda IM Development Team (SRMM), Piotr Piastucki (Scriver)", "*****@*****.**", "Copyright © 2000-2006 Miranda ICQ/IM Project, Piotr Piastucki", "http://mgoodies.berlios.de", 0, DEFMOD_SRMESSAGE // replace internal version (if any) }; BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
#include "common.h" HINSTANCE hInst; int hLangpack; PLUGININFOEX pluginInfo = { sizeof(PLUGININFOEX), __PLUGIN_NAME, PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), __DESCRIPTION, __AUTHOR, __AUTHOREMAIL, __COPYRIGHT, __AUTHORWEB, UNICODE_AWARE, // {F593C752-51D8-4D46-BA27-37577953F55C} {0xf593c752, 0x51d8, 0x4d46, {0xba, 0x27, 0x37, 0x57, 0x79, 0x53, 0xf5, 0x5c}} }; extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) { return &pluginInfo; } ///////////////////////////////////////////////////////////////////////////////////////// extern "C" int __declspec(dllexport) Load(void) { mir_getLP(&pluginInfo);
static int GetWindowAPI(WPARAM wParam, LPARAM lParam) { return PLUGIN_MAKE_VERSION(0,0,0,3); }
// this function is called from an APC into the main thread void __stdcall ipcService(ULONG_PTR dwParam) { HANDLE hSignal; TSlotIPC *pct; LPSTR szBuf; char szGroupStr[32]; DBVARIANT dbv; LPSTR szMiranda; // try to open the file mapping object the caller must make sure no other // running instance is using this file HANDLE hMap = OpenFileMappingA(FILE_MAP_ALL_ACCESS, false, IPC_PACKET_NAME); if (hMap == 0) return; // map the file to this process THeaderIPC *pMMT = (THeaderIPC*)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0); // if it fails the caller should of had some timeout in wait if (pMMT != NULL && pMMT->cbSize == sizeof(THeaderIPC) && pMMT->dwVersion == PLUGIN_MAKE_VERSION(2, 0, 1, 2)) { // toggle the right bits int *bits = &pMMT->fRequests; // jump right to a worker thread for file processing? if (*bits & REQUEST_XFRFILES) { THeaderIPC *cloned = (THeaderIPC*)mir_alloc(IPC_PACKET_SIZE); // translate from client space to cloned heap memory pMMT->pServerBaseAddress = pMMT->pClientBaseAddress; pMMT->pClientBaseAddress = cloned; CopyMemory(cloned, pMMT, IPC_PACKET_SIZE); ipcFixupAddresses(true, cloned); DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &cloned->Param, THREAD_SET_CONTEXT, false, 0); mir_forkthread(&IssueTransferThread, cloned); goto Reply; } // the request was to clear the MRU entries, we have no return data if (*bits & REQUEST_CLEARMRU) { mir_forkthread(&ClearMRUThread, NULL); goto Reply; } // the IPC header may have pointers that need to be translated // in either case the supplied data area pointers has to be // translated to this address space. // the server base address is always removed to get an offset // to which the client base is added, this is what ipcFixupAddresses() does pMMT->pServerBaseAddress = pMMT->pClientBaseAddress; pMMT->pClientBaseAddress = pMMT; // translate to the server space map ipcFixupAddresses(true, pMMT); // store the address map offset so the caller can retranslate pMMT->pServerBaseAddress = pMMT; // return some options to the client if (db_get_b(0, SHLExt_Name, SHLExt_ShowNoIcons, 0) != 0) pMMT->dwFlags = HIPC_NOICONS; // see if we have a custom string for 'Miranda' szMiranda = "Miranda"; lstrcpynA(pMMT->MirandaName, szMiranda, sizeof(pMMT->MirandaName) - 1); // for the MRU menu szBuf = Translate("Recently"); lstrcpynA(pMMT->MRUMenuName, szBuf, sizeof(pMMT->MRUMenuName) - 1); // and a custom string for "clear entries" szBuf = Translate("Clear entries"); lstrcpynA(pMMT->ClearEntries, szBuf, sizeof(pMMT->ClearEntries) - 1); // if the group mode is on, check if they want the CList setting bool bGroupMode = (BST_CHECKED == db_get_b(0, SHLExt_Name, SHLExt_UseGroups, BST_UNCHECKED)); if (bGroupMode && BST_CHECKED == db_get_b(0, SHLExt_Name, SHLExt_UseCListSetting, BST_UNCHECKED)) bGroupMode = db_get_b(0, "CList", "UseGroups", true) != 0; int iSlot = 0; // return profile if set if (BST_UNCHECKED == db_get_b(0, SHLExt_Name, SHLExt_ShowNoProfile, BST_UNCHECKED)) { pct = ipcAlloc(pMMT, 50); if (pct != NULL) { // will actually return with .dat if there's space for it, not what the docs say pct->Status = STATUS_PROFILENAME; CallService(MS_DB_GETPROFILENAME, 49, UINT_PTR(pct) + sizeof(TSlotIPC)); } } if (*bits & REQUEST_NEWICONS) ipcGetSkinIcons(pMMT); if (*bits & REQUEST_GROUPS) { // return contact's grouping if it's present while (bGroupMode) { _itoa(iSlot, szGroupStr, 10); if ( db_get_s(0, "CListGroups", szGroupStr, &dbv) != 0) break; pct = ipcAlloc(pMMT, lstrlenA(dbv.pszVal + 1) + 1); // first byte has flags, need null term if (pct != NULL) { if (pMMT->GroupsBegin == NULL) pMMT->GroupsBegin = pct; pct->fType = REQUEST_GROUPS; pct->hContact = 0; szBuf = LPSTR(pct) + sizeof(TSlotIPC); // get the end of the slot lstrcpyA(szBuf, dbv.pszVal + 1); pct->hGroup = 0; db_free(&dbv); // free the string } else { // outta space db_free(&dbv); break; } iSlot++; } // if there was no space left, it'll } on null if (pct == NULL) *bits = (*bits | GROUPS_NOTIMPL) & ~REQUEST_GROUPS; } // SHOULD check slot space. if (*bits & REQUEST_CONTACTS) { if (!ipcGetSortedContacts(pMMT, &iSlot, bGroupMode)) // fail if there were no contacts AT ALL *bits = (*bits | CONTACTS_NOTIMPL) & ~REQUEST_CONTACTS; } // store the number of slots allocated pMMT->Slots = iSlot; Reply: // get the handle the caller wants to be signalled on hSignal = OpenEventA(EVENT_ALL_ACCESS, false, pMMT->SignalEventName); if (hSignal != 0) { SetEvent(hSignal); CloseHandle(hSignal); } UnmapViewOfFile(pMMT); } CloseHandle(hMap); }
DWORD getMinimalMirandaVersion() { // MEMO: version dependency check return PLUGIN_MAKE_VERSION(0, 6, 7, 0); }
Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this file; see the file license.txt. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "commons.h" // Prototypes /////////////////////////////////////////////////////////////////////////// PLUGININFOEX pluginInfo = { sizeof(PLUGININFOEX), "Extra Icons Service", PLUGIN_MAKE_VERSION(0,2,5,0), "Extra Icons Service", "Ricardo Pescuma Domenecci", "", "© 2009 Ricardo Pescuma Domenecci", "http://pescuma.org/miranda/extraicons", 0, 0, //doesn't replace anything built-in { 0x112f7d30, 0xcd19, 0x4c74, { 0xa0, 0x3b, 0xbf, 0xbb, 0x76, 0xb7, 0x5b, 0xc4 } } // {112F7D30-CD19-4c74-A03BBFBB76B75BC4} }; HINSTANCE hInst; PLUGINLINK *pluginLink; MM_INTERFACE mmi; UTF8_INTERFACE utfi; int hLangpack;
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "commonheaders.h" HINSTANCE g_hInst = 0; PLUGINLINK *pluginLink; struct MM_INTERFACE memoryManagerInterface; extern HWND hwndContactList; PLUGININFO pluginInfo = { #if defined(_UNICODE) sizeof(PLUGININFO), "CList Nicer+ (Unicode)", PLUGIN_MAKE_VERSION(0, 5, 1, 16), #else sizeof(PLUGININFO), "CList Nicer+", PLUGIN_MAKE_VERSION(0, 5, 1, 15), #endif "Display contacts, event notifications, protocol status", "Pixel, egoDust, cyreve, Nightwish", "", "Copyright 2000-2005 Miranda-IM project", "http://www.miranda-im.org", 0, DEFMOD_CLISTALL }; int _DebugPopup(HANDLE hContact, const char *fmt, ...) { POPUPDATA ppd; va_list va; char debug[1024]; int ibsize = 1023;
#include "..\miranda\include\m_system.h" #include "..\miranda\include\m_options.h" #include "..\miranda\include\m_utils.h" struct EXTENDSTRUCT extend[MAX_STYLES]={FLAT_WIDTH,FLAT_HEIGHT,S3D_WIDTH,S3D_HEIGHT,MINIMAL_WIDTH,MINIMAL_HEIGHT}; RECT screen; BOOL (WINAPI *MySetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD); HINSTANCE hinstance; PLUGINLINK *pluginLink; PLUGININFO pluginInfo={ sizeof(PLUGININFO), "Message popup", PLUGIN_MAKE_VERSION(0,1,6,0), "Pops up a window on various events", "Heiko Schillinger", "*****@*****.**", "© 2002 Heiko Schillinger", "http://miranda-im.org/download", 0, 0 }; // utils.c int CheckNewEvents(WPARAM,LPARAM); // options.c int InitOptions(WPARAM,LPARAM);
HINSTANCE hInst; PLUGINLINK *pluginLink; HANDLE hMainThread; PLUGININFOEX pluginInfoEx = { sizeof(PLUGININFOEX), #ifdef _UNICODE #ifdef _X64 "Tlen Protocol (x64, Unicode)", #else "Tlen Protocol (Unicode)", #endif #else "Tlen Protocol", #endif PLUGIN_MAKE_VERSION(TLEN_MAJOR_VERSION,TLEN_MINOR_VERSION,TLEN_RELEASE_NUM,TLEN_BUILD_NUM), "Tlen protocol plugin for Miranda IM (version: "TLEN_VERSION_STRING" ; compiled: "__DATE__" "__TIME__")", "Santithorn Bunchua, Adam Strzelecki, Piotr Piastucki", "*****@*****.**", "(c) 2002-2012 Santithorn Bunchua, Piotr Piastucki", "http://mtlen.berlios.de", 0, 0, #if defined( _UNICODE ) #ifdef _X64 {0x3ba4a3c6, 0x27b5, 0x4c78, { 0x92, 0x8c, 0x38, 0x2a, 0xe1, 0xd3, 0x2a, 0xb5 }} #else {0x748f8934, 0x781a, 0x528d, { 0x52, 0x08, 0x00, 0x12, 0x65, 0x40, 0x4a, 0xb3 }} #endif #else {0x11fc3484, 0x475c, 0x11dc, { 0x83, 0x14, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 }}
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; }
DWORD maxVersion; } static const pluginBannedList[] = { {{0x7f65393b, 0x7771, 0x4f3f, { 0xa9, 0xeb, 0x5d, 0xba, 0xf2, 0xb3, 0x61, 0xf1 }}, MAX_MIR_VER}, // png2dib {{0xe00f1643, 0x263c, 0x4599, { 0xb8, 0x4b, 0x5, 0x3e, 0x5c, 0x51, 0x1d, 0x28 }}, MAX_MIR_VER}, // loadavatars (unicode) {{0xc9e01eb0, 0xa119, 0x42d2, { 0xb3, 0x40, 0xe8, 0x67, 0x8f, 0x5f, 0xea, 0xd9 }}, MAX_MIR_VER}, // loadavatars (ansi) {{0xb4ef58c4, 0x4458, 0x4e47, { 0xa7, 0x67, 0x5c, 0xae, 0xe5, 0xe7, 0xc, 0x81 }}, MAX_MIR_VER}, // 0.7.x AIM Protocol {{0xb529402b, 0x53ba, 0x4c81, { 0x9e, 0x27, 0xd4, 0x31, 0xeb, 0xe8, 0xec, 0x36 }}, MAX_MIR_VER}, // 0.7.x IRC Protocol {{0x847bb03c, 0x408c, 0x4f9b, { 0xaa, 0x5a, 0xf5, 0xc0, 0xb7, 0xb5, 0x60, 0x1e }}, MAX_MIR_VER}, // 0.7.x ICQ Protocol {{0x1ee5af12, 0x26b0, 0x4290, { 0x8f, 0x97, 0x16, 0x77, 0xcb, 0xe, 0xfd, 0x2b }}, MAX_MIR_VER}, // 0.7.x Jabber Protocol (Unicode) {{0xf7f5861d, 0x988d, 0x479d, { 0xa5, 0xbb, 0x80, 0xc7, 0xfa, 0x8a, 0xd0, 0xef }}, MAX_MIR_VER}, // 0.7.x Jabber Protocol (Ansi) {{0xdc39da8a, 0x8385, 0x4cd9, { 0xb2, 0x98, 0x80, 0x67, 0x7b, 0x8f, 0xe6, 0xe4 }}, MAX_MIR_VER}, // 0.7.x MSN Protocol (Unicode) {{0x29aa3a80, 0x3368, 0x4b78, { 0x82, 0xc1, 0xdf, 0xc7, 0x29, 0x6a, 0x58, 0x99 }}, MAX_MIR_VER}, // 0.7.x MSN Protocol (Ansi) {{0xa6648b6c, 0x6fb8, 0x4551, { 0xb4, 0xe7, 0x1, 0x36, 0xf9, 0x16, 0xd4, 0x85 }}, MAX_MIR_VER}, // 0.7.x Yahoo Protocol {{0x6ca5f042, 0x7a7f, 0x47cc, { 0xa7, 0x15, 0xfc, 0x8c, 0x46, 0xfb, 0xf4, 0x34 }}, PLUGIN_MAKE_VERSION(3, 0, 4, 0)}, // 0.8.x TabSRMM (Unicode) {{0x5889a3ef, 0x7c95, 0x4249, { 0x98, 0xbb, 0x34, 0xe9, 0x5, 0x3a, 0x6e, 0xa0 }}, PLUGIN_MAKE_VERSION(3, 0, 4, 0)}, // 0.8.x TabSRMM (ANSI) {{0x84636f78, 0x2057, 0x4302, { 0x8a, 0x65, 0x23, 0xa1, 0x6d, 0x46, 0x84, 0x4c }}, PLUGIN_MAKE_VERSION(2, 9, 0, 4)}, // 0.8.x Scriver (Unicode) {{0x1e91b6c9, 0xe040, 0x4a6f, { 0xab, 0x56, 0xdf, 0x76, 0x98, 0xfa, 0xcb, 0xf1 }}, PLUGIN_MAKE_VERSION(2, 9, 0, 4)}, // 0.8.x Scriver (ANSI) {{0x240a91dc, 0x9464, 0x457a, { 0x97, 0x87, 0xff, 0x1e, 0xa8, 0x8e, 0x77, 0xe3 }}, PLUGIN_MAKE_VERSION(0, 9, 0, 0)}, // 0.8.x CList Classic (Unicode) {{0x552cf71a, 0x249f, 0x4650, { 0xbb, 0x2b, 0x7c, 0xdb, 0x1f, 0xe7, 0xd1, 0x78 }}, PLUGIN_MAKE_VERSION(0, 9, 0, 0)}, // 0.8.x CList Classic (ANSI) {{0x8f79b4ee, 0xeb48, 0x4a03, { 0x87, 0x3e, 0x27, 0xbe, 0x6b, 0x7e, 0x9a, 0x25 }}, PLUGIN_MAKE_VERSION(0, 9, 1, 0)}, // 0.8.x Clist Nicer (Unicode) {{0x5a070cec, 0xb2ab, 0x4bbe, { 0x8e, 0x48, 0x9c, 0x8d, 0xcd, 0xda, 0x14, 0xc3 }}, PLUGIN_MAKE_VERSION(0, 9, 1, 0)}, // 0.8.x Clist Nicer (ANSI) {{0x43909b6, 0xaad8, 0x4d82, { 0x8e, 0xb5, 0x9f, 0x64, 0xcf, 0xe8, 0x67, 0xcd }}, PLUGIN_MAKE_VERSION(0, 9, 0, 8)}, // 0.8.x Clist Modern (Unicode) {{0xf6588c56, 0x15dc, 0x4cd7, { 0x8c, 0xf9, 0x48, 0xab, 0x6c, 0x5f, 0xd2, 0xf }}, PLUGIN_MAKE_VERSION(0, 9, 0, 8)}, // 0.8.x Clist Modern (ANSI) {{0x2a417ab9, 0x16f2, 0x472d, { 0x9a, 0xe3, 0x41, 0x51, 0x3, 0xc7, 0x8a, 0x64 }}, PLUGIN_MAKE_VERSION(0, 9, 0, 0)}, // 0.8.x Clist MW (Unicode) {{0x7ab05d31, 0x9972, 0x4406, { 0x82, 0x3e, 0xe, 0xd7, 0x45, 0xef, 0x7c, 0x56 }}, PLUGIN_MAKE_VERSION(0, 9, 0, 0)} // 0.8.x Clist MW (ANSI) }; const int pluginBannedListCount = SIZEOF(pluginBannedList); static BOOL bModuleInitialized = FALSE;
__declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) { if (mirandaVersion < PLUGIN_MAKE_VERSION(0,7,0,2)) return NULL; return &pluginInfo; }
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "commonheaders.h" int LoadSendRecvMessageModule(void); int SplitmsgShutdown(void); PLUGINLINK *pluginLink; HINSTANCE g_hInst; PLUGININFO pluginInfo = { sizeof(PLUGININFO), "Scriver", PLUGIN_MAKE_VERSION(2, 2, 9, 7), #ifdef _UNICODE "Scriver - send and receive instant messages (Unicode)", #else "Scriver - send and receive instant messages", #endif "Miranda IM Development Team (SRMM), Piotr Piastucki (Scriver)", "*****@*****.**", "Copyright © 2000-2006 Miranda ICQ/IM Project, Piotr Piastucki", "http://mgoodies.berlios.de", 0, DEFMOD_SRMESSAGE // replace internal version (if any) }; BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
#include "seen.h" HINSTANCE hinstance; HANDLE ehdb,ehproto[2],ehmissed=NULL,ehuserinfo,ehmissed_proto=NULL; PLUGINLINK *pluginLink; PLUGININFO pluginInfo={ sizeof(PLUGININFO), "Last seen plugin", PLUGIN_MAKE_VERSION(5,0,1,0), "Log when a user was last seen online and which users were online while you were away", "Heiko Schillinger", "*****@*****.**", "© 2001-2002 Heiko Schillinger, 2003 modified by Bruno Rino", "http://miranda-im.org/download/details.php?action=viewfile&id=202", 0, 0 }; int OptionsInit(WPARAM,LPARAM); int UserinfoInit(WPARAM,LPARAM); int InitFileOutput(void); void InitMenuitem(void); int UpdateValues(WPARAM,LPARAM); int ModeChange(WPARAM,LPARAM); int GetInfoAck(WPARAM,LPARAM); void SetOffline(void); int ModeChange_mo(WPARAM,LPARAM); int CheckIfOnline(void);
#include "ieview_services.h" #include "Options.h" #include "Utils.h" //#include "SmileyWindow.h" char *ieviewModuleName; HINSTANCE hInstance; PLUGINLINK *pluginLink; TCHAR *workingDir; static int ModulesLoaded(WPARAM wParam, LPARAM lParam); static int PreShutdown(WPARAM wParam, LPARAM lParam); PLUGININFOEX pluginInfoEx = { sizeof(PLUGININFOEX), "IEView", PLUGIN_MAKE_VERSION(1,1,0,0), "IE Based Chat Log (1.1.0.0 "__DATE__")", "Piotr Piastucki, Francois Mean", "*****@*****.**", "(c) 2005-2008 Piotr Piastucki, Francois Mean", "http://developer.berlios.de/projects/mgoodies", UNICODE_AWARE, 0, {0x0495171b, 0x7137, 0x4ded, {0x97, 0xf8, 0xce, 0x6f, 0xed, 0x67, 0xd6, 0x91}} }; extern "C" BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpvReserved) { hInstance = hModule; return TRUE; }
#include "commons.h" #include "mydetails.h" // Prototypes ///////////////////////////////////////////////////////////////////////////////////// HINSTANCE hInst; PLUGINLINK *pluginLink; PLUGININFOEX pluginInfo={ sizeof(PLUGININFOEX), "My Details", PLUGIN_MAKE_VERSION(0,0,2,6), "Show and allows you to edit your details for all protocols.", "Ricardo Pescuma Domenecci, Drugwash", "", "© 2005-2010 Ricardo Pescuma Domenecci, Drugwash", "http://pescuma.org/miranda/mydetails", 0, //not transient 0, //doesn't replace anything built-in { 0xa82baeb3, 0xa33c, 0x4036, { 0xb8, 0x37, 0x78, 0x3, 0xa5, 0xb6, 0xc2, 0xab } } // {A82BAEB3-A33C-4036-B837-7803A5B6C2AB} }; struct MM_INTERFACE mmi; struct UTF8_INTERFACE utfi; struct SKIN_INTERFACE mski;
#include "Options.h" #include "Utils.h" //#include "SmileyWindow.h" char *ieviewModuleName; HINSTANCE hInstance; PLUGINLINK *pluginLink; IEView *debugView; TCHAR *workingDir; static int ModulesLoaded(WPARAM wParam, LPARAM lParam); static int PreShutdown(WPARAM wParam, LPARAM lParam); PLUGININFO pluginInfo = { sizeof(PLUGININFO), "IEView", PLUGIN_MAKE_VERSION(1,0,9,5), "IE Based Chat Log (1.0.9.5 "__DATE__")", "Piotr Piastucki", "*****@*****.**", "(c) 2005-2006 Piotr Piastucki", "http://developer.berlios.de/projects/mgoodies", 0, 0 }; extern "C" BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpvReserved) { hInstance = hModule; return TRUE; }
DWORD CJabberProto::GetJabberVersion() const { return PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM); }
#include "common.h" #include "ping.h" #include <list> HINSTANCE hInst; PLUGINLINK *pluginLink; HANDLE hNetlibUser = 0; HANDLE hFillListEvent = 0; bool use_raw_ping = true; // plugin stuff PLUGININFOEX pluginInfo={ sizeof(PLUGININFOEX), "Ping Plugin", PLUGIN_MAKE_VERSION(0, 9, 1, 1), "Ping labelled IP addresses or domain names.", "Scott Ellis", "*****@*****.**", "© 2005 Scott Ellis", "http://www.scottellis.com.au/", 0, //not transient 0, //doesn't replace anything built-in { 0x760ea901, 0xc0c2, 0x446c, { 0x80, 0x29, 0x94, 0xc3, 0xbc, 0x47, 0xc4, 0x5e } } // {760EA901-C0C2-446c-8029-94C3BC47C45E} }; extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { hInst=hinstDLL; DisableThreadLibraryCalls(hInst); return TRUE;
inline int MakeVer(int a, int b, int c, int d) { return PLUGIN_MAKE_VERSION(a,b,c,d); }
#include "SmileyWindow.h" char *ieviewModuleName; HINSTANCE hInstance; PLUGINLINK *pluginLink; IEView *debugView; SmileyWindow *smileyWindow; char *workingDir; HANDLE hHookEvent; static int ModulesLoaded(WPARAM wParam, LPARAM lParam); static int PreShutdown(WPARAM wParam, LPARAM lParam); PLUGININFO pluginInfo = { sizeof(PLUGININFO), "IEView Plugin", PLUGIN_MAKE_VERSION(1,0,3,2), "IE Control Chat Log (1.0.3.2 "__DATE__")", "Piotr Piastucki", "*****@*****.**", "(c) 2004-2005 Piotr Piastucki", "http://developer.berlios.de/projects/mgoodies", 0, 0 }; extern "C" BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpvReserved) { hInstance = hModule; return TRUE; }
// available at http://www.gnu.org/copyleft/gpl.html #include "common.h" #include "FontService.h" #include "m_fontservice.h" #include "module_fonts.h" PLUGININFO pluginInfo={ sizeof(PLUGININFO), #ifndef _UNICODE "FontService (ANSI)", #else "FontService", #endif PLUGIN_MAKE_VERSION(0, 2, 0, 2), "Provides a UI for font settings, and services to plugins for font control.", "S. Ellis", "*****@*****.**", "© 2005 S. Ellis", "www.scottellis.com.au", 0, 0 }; HINSTANCE hInstance; PLUGINLINK *pluginLink; struct MM_INTERFACE memoryManagerInterface; HANDLE hFontReloadEvent, hColourReloadEvent;
//menu //Function which makes the initializations static int ModulesLoaded(WPARAM wParam,LPARAM lParam) { //check if 'Icon Library Manager' and 'FontService' exist (load icon and font later) if (!ServiceExists(MS_FONT_REGISTER) || !ServiceExists(MS_SKIN2_ADDICON)) { LPTSTR msg = TranslateTS( _T("This version of Popup Plus requires\r\n") _T("'Icon Library Manager' and 'FontService'\r\n") _T("modules.\r\n") _T("\r\n") _T("You always can download them at\r\n") _T("http://addons.miranda-im.org/\r\n") _T("\r\n") _T("Do you want to visit Miranda IM homepage now?\r\n") ); if (MessageBox(NULL, msg, _T("Popup Plus Error"), MB_YESNO|MB_ICONSTOP) == IDYES) ShellExecute(NULL, _T("open"), _T("http://addons.miranda-im.org/"), NULL, NULL, SW_SHOWNORMAL); return 0; } //check if History++ is installed gbHppInstalled = ServiceExists(MS_HPP_GETVERSION) && ServiceExists(MS_HPP_EG_WINDOW) && (CallService(MS_HPP_GETVERSION, 0, 0) >= PLUGIN_MAKE_VERSION(1,5,0,112)); //check if MText plugin is installed if (MText.Register) { htuText = MText.Register("PopUp Plus/Text", MTEXT_FANCY_DEFAULT); htuTitle = MText.Register("PopUp Plus/Title",MTEXT_FANCY_DEFAULT); } else { htuTitle = htuText = NULL; } // init meta contacts INT_PTR ptr = CallService(MS_MC_GETPROTOCOLNAME, 0, 0); if (ptr != CALLSERVICE_NOTFOUND) { gszMetaProto = (LPCSTR)ptr; } //check if OptionLoaded if(!OptionLoaded){ LoadOptions(); } /*/deprecatet stuff notifyLink = ServiceExists(MS_NOTIFY_GETLINK) ? (MNOTIFYLINK *)CallService(MS_NOTIFY_GETLINK, 0, 0) : NULL; LoadNotifyImp(); hNotifyOptionsInitialize = HookEvent(ME_NOTIFY_OPT_INITIALISE, NotifyOptionsInitialize); HookEvent(ME_CONTACTSETTINGS_INITIALISE, ContactSettingsInitialise); */ //Uninstalling purposes if (ServiceExists("PluginSweeper/Add")) { CallService("PluginSweeper/Add",(WPARAM)Translate(MODULNAME),(LPARAM)MODULNAME); } //load fonts / create hook InitFonts(); hFontsChanged = HookEvent(ME_FONT_RELOAD,FontsChanged); //load actions and notifications LoadActions(); LoadNotifications(); //hook TopToolBar hTTBLoaded = HookEvent(ME_TTB_MODULELOADED, TTBLoaded); //Folder plugin support LPTSTR pszPath = mir_a2t(MIRANDA_PATH "\\Skins\\PopUp"); folderId = FoldersRegisterCustomPathT(MODULNAME_LONG, "Skins", pszPath); mir_free(pszPath); //load skin skins.load(_T("dir")); const PopupSkin *skin; if (skin = skins.getSkin(PopUpOptions.SkinPack)) { mir_free(PopUpOptions.SkinPack); PopUpOptions.SkinPack = mir_tstrdup(skin->getName()); skin->loadOpts(); } //init PopupEfects PopupEfectsInitialize(); //MessageAPI support SrmmMenu_Load(); //Hotkey LoadHotkey(); //Modern Toolbar support if(ServiceExists(MS_TB_ADDBUTTON)) { hTBLoaded = HookEvent(ME_TB_MODULELOADED, ToolbarSet); ToolbarSet(0,0); } //Updater support if(ServiceExists(MS_UPDATE_REGISTER)) registerUpdate(); gbPopupLoaded = TRUE; return 0; }
#include "commons.h" // Prototypes /////////////////////////////////////////////////////////////////////////// PLUGININFOEX pluginInfo={ sizeof(PLUGININFOEX), #ifdef UNICODE "Nick History (Unicode)", #else "Nick History", #endif PLUGIN_MAKE_VERSION(0,1,0,3), "Log nickname changes to history", "Ricardo Pescuma Domenecci", "", "© 2006 Ricardo Pescuma Domenecci", "http://pescuma.mirandaim.ru/miranda/nickhistory", UNICODE_AWARE, 0, //doesn't replace anything built-in #ifdef UNICODE { 0x1469b29d, 0x8a40, 0x4146, { 0x94, 0xed, 0xe4, 0x26, 0x26, 0xc1, 0x7c, 0x4a } } // {1469B29D-8A40-4146-94ED-E42626C17C4A} #else { 0x9b898d10, 0x1f9c, 0x4948, { 0x87, 0xc1, 0xcb, 0xaf, 0x21, 0xaa, 0x11, 0x8a } } // {9B898D10-1F9C-4948-87C1-CBAF21AA118A} #endif };
#include "commonheaders.h" int LoadSendRecvMessageModule(void); int SplitmsgShutdown(void); PLUGINLINK *pluginLink; HINSTANCE g_hInst; PLUGININFO pluginInfo = { sizeof(PLUGININFO), #ifdef _UNICODE "Send/Receive Messages (Unicode)", #else "Send/Receive Messages", #endif PLUGIN_MAKE_VERSION(2, 2, 1, 11), "Scriver - send and receive instant messages", "Miranda IM Development Team (SRMM), Piotr Piastucki (Scriver)", "*****@*****.**", "Copyright © 2000-2005 Miranda ICQ/IM Project, Piotr Piastucki", "http://developer.berlios.de/projects/mgoodies", 0, DEFMOD_SRMESSAGE // replace internal version (if any) }; BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { g_hInst = hinstDLL; return TRUE; }
PLUGININFO *MirandaPluginInfo(DWORD mirandaVersion) { if (mirandaVersion < PLUGIN_MAKE_VERSION(0, 4, 0, 0)) return NULL; return &pluginInfo; }
bool CLHttpUser::bProcessGetRequest(char * pszRequest, bool bIsGetCommand) { //LogEvent("Request", pszRequest); int nUriLength = nUnescapedURI(pszRequest); if (nUriLength <= 0) return false; CLFileShareListAccess clCritSection; if (bShutdownInProgress) return false; static char szTempfile[MAX_PATH+1]; szTempfile[0] = '\0'; if (!bReadGetParameters(pszRequest)) { SendError(400, "Bad Request"); return false; } DWORD dwRemoteIP = ntohl(stAddr.S_un.S_addr); for (CLFileShareNode * pclCur = pclFirstNode; pclCur ; pclCur = pclCur->pclNext) { if ((pclCur->st.dwAllowedIP ^ dwRemoteIP) & pclCur->st.dwAllowedMask) continue; // Not an allowed IP address if (!pclCur->bIsDirectory() && pclCur->nGetSrvPathLen() != nUriLength) continue; // not the right length, quickly move on to the next. if (pclCur->bIsDirectory() ? (strncmp(pclCur->st.pszSrvPath, pszRequest, pclCur->nGetSrvPathLen() - 1) == 0) : (strncmp(pclCur->st.pszSrvPath, pszRequest, pclCur->nGetSrvPathLen()) == 0)) { /*OutputDebugString( "Request for file OK : "); OutputDebugString( pclCur->st.pszSrvPath ); OutputDebugString( "\n" );*/ static char szSrvPath[MAX_PATH+1]; static char szRealPath[MAX_PATH+1]; char* pszSrvPath = pclCur->st.pszSrvPath; char* pszRealPath = pclCur->st.pszRealPath; if (pclCur->bIsDirectory()) { strcpy(szRealPath, pclCur->st.pszRealPath); strcpy(szSrvPath, pclCur->st.pszSrvPath); pszRealPath = szRealPath; pszSrvPath = szSrvPath; if (nUriLength > MAX_PATH) nUriLength = MAX_PATH; pszRequest[nUriLength] = '\0'; if (pclCur->nGetSrvPathLen() - nUriLength == 1) { SendRedir(302, "Found", "The document has moved", pszRequest); return false; } else { strmcat(pszRealPath, &pszRequest[pclCur->nGetSrvPathLen()], MAX_PATH); strmcat(pszSrvPath, &pszRequest[pclCur->nGetSrvPathLen()], MAX_PATH); } pszRequest[nUriLength] = ' '; // hacker protection - should be removed by the browser if (strstr(pszRealPath, "..")) { SendError(404, "Not Found", "The requested URL was not found on this server."); return false; } char* pszTmp = pszRealPath; while (pszTmp = strchr(pszTmp, '/')) * pszTmp = '\\'; hFile = CreateFile(pszRealPath, GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { if (pszSrvPath[strlen(pszSrvPath)-1] != '/') { strmcat(pszRealPath, "\\", MAX_PATH); strmcat(pszSrvPath, "/", MAX_PATH); } // a directory with index.htm strmcat(szRealPath, "index.htm", MAX_PATH); hFile = CreateFile(pszRealPath, GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_HIDDEN, NULL); if (hFile == INVALID_HANDLE_VALUE) { // a directory with index.html strmcat(szRealPath, "l", MAX_PATH); hFile = CreateFile(pszRealPath, GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_HIDDEN, NULL); if (hFile == INVALID_HANDLE_VALUE) { // generate directory index in temporary file if (*szTempfile == '\0') { GetTempPath(MAX_PATH, szTempfile); strmcat(szTempfile, "\\HttpServerTemp", MAX_PATH); strmcat(szTempfile, pszSrvPath, MAX_PATH); char* pszTmp = szTempfile; while (pszTmp = strchr(pszTmp, '/')) * pszTmp = '~'; } pszRealPath[strlen(pszRealPath) - 10] = '\0'; // detecting browser function removed // every browser should support it by now bool BrowserSupportsXML = true; //(apszParam[eUserAgent] != NULL) && // (strstr(apszParam[eUserAgent], "Firefox") || // (strstr(apszParam[eUserAgent], "MSIE") && !strstr(apszParam[eUserAgent], "Opera"))); if ((indexCreationMode == INDEX_CREATION_XML || (indexCreationMode == INDEX_CREATION_DETECT && BrowserSupportsXML)) && bCreateIndexXML(pszRealPath, szTempfile, pszSrvPath, dwRemoteIP)) { hFile = CreateFile(szTempfile, GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); strcpy(szRealPath, "a.xml"); // restore .xml for mime type } else if ((indexCreationMode == INDEX_CREATION_HTML || indexCreationMode == INDEX_CREATION_DETECT) && bCreateIndexHTML(pszRealPath, szTempfile, pszSrvPath, dwRemoteIP)) { hFile = CreateFile(szTempfile, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); strcpy(szRealPath, "a.html"); // restore .html for mime type } else { continue; } } else { strmcat(pszSrvPath, "index.html", MAX_PATH); szTempfile[0] = '\0'; } } else { strmcat(pszSrvPath, "index.htm", MAX_PATH); szTempfile[0] = '\0'; } } else { szTempfile[0] = '\0'; } } else { hFile = CreateFile(pszRealPath, GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { SendError(404, "Not Found", "HTTP server failed to open local file"); return false; } } strcpy(this->szCurrentDLSrvPath, pszSrvPath); DWORD nDataSize = GetFileSize(hFile, NULL); dwTotalSize = nDataSize; FILETIME stFileTime; GetFileTime(hFile, NULL, NULL, &stFileTime); char szCurTime[ 100 ]; time_t ltime; time(<ime); strftime(szCurTime, sizeof(szCurTime), "%a, %d %b %Y %H:%M:%S GMT", gmtime(<ime)); char szFileTime[ 100 ]; FileTimeToUnixTime(&stFileTime, <ime); strftime(szFileTime, sizeof(szFileTime), "%a, %d %b %Y %H:%M:%S GMT", gmtime(<ime)); if (apszParam[eIfModifiedSince] && strcmp(apszParam[eIfModifiedSince], szFileTime) == 0) { SendError(304, "Not Modified" ); return true; } // we found match send file !! if (bIsGetCommand) { if (! pclCur->bAddUser(this)) { SendError(403, "Forbidden", "Access has been denied because there are too many connections"); return false; } } if (*(ULONG*)(&stAddr) != 0x0100007F && // do not show popup of 127.0.0.1 strstr(pszRealPath, "\\@") == NULL) { // and of shares which start with an @ ShowPopupWindow(inet_ntoa(stAddr), pszSrvPath); } clCritSection.Unlock(); DWORD dwFileStart = 0; DWORD dwDataToSend = nDataSize; char szETag[ 50 ]; { int nETagLen = mir_snprintf(szETag, SIZEOF(szETag), "\"%x-%x-%x\"", nDataSize, stFileTime.dwHighDateTime, stFileTime.dwLowDateTime); if (!apszParam[eIfRange] || (strncmp(szETag, apszParam[eIfRange], nETagLen) == 0)) { char * pszRange = apszParam[eRange]; if (pszRange) { if (strncmp(pszRange, "bytes=", 6) == 0) { pszRange += 6; // Do resume !!! char *pszEnd; if (pszRange[0] == '-') { // its a suffix-byte-range-spec DWORD dwLen = strtol(pszRange + 1, &pszEnd, 10); if (dwLen < nDataSize) dwFileStart = nDataSize - dwLen; } else { DWORD dwLen = strtol(pszRange, &pszEnd, 10); if (*pszEnd == '-' && dwLen < nDataSize) { dwFileStart = dwLen; pszRange = pszEnd + 1; if (*pszRange != 0) { dwLen = strtol(pszEnd + 1, &pszEnd, 10); if (dwLen > dwFileStart) dwDataToSend = (dwLen + 1) - dwFileStart; else dwFileStart = 0; } } else { SendError(400, "Bad Request"); return false; } } } } } } if (dwFileStart >= nDataSize) dwFileStart = 0; if (dwFileStart + dwDataToSend >= nDataSize) dwDataToSend = nDataSize - dwFileStart; DWORD dwBytesToWrite = 0; // To optimize send speed it it ideal to always send larges size packages // But this size depended on network media but on Ethernet it is 1518 bytes. // Ethernet, IP and TCP headers use some of this space and leaves 1460 bytes // for data transfer. // We will use a multiply of this to always send optimal sized packages. char szBuf[1460 * 4]; if (dwFileStart > 0 || dwDataToSend != nDataSize) { if (SetFilePointer(hFile, dwFileStart, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER) { SendError(416, "Requested Range Not Satisfiable"); return true; } const char szHttpPartial[] = "HTTP/1.1 206 Partial Content\r\n" "Connection: Keep-Alive\r\n" "Date: %s\r\n" "Server: MirandaWeb/%s\r\n" "Accept-Ranges: bytes\r\n" "ETag: %s\r\n" "Content-Length: %d\r\n" "Content-Type: %s\r\n" "Content-Range: bytes %d-%d/%d\r\n" "Last-Modified: %s\r\n" "\r\n"; dwBytesToWrite = mir_snprintf(szBuf, SIZEOF(szBuf), szHttpPartial, szCurTime, PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), szETag, dwDataToSend, pszGetMimeType(pszRealPath), dwFileStart, (dwFileStart + dwDataToSend - 1), nDataSize, szFileTime); } else { const char szHttpOk[] = "HTTP/1.1 200 OK\r\n" "Connection: Keep-Alive\r\n" "Date: %s\r\n" "Server: MirandaWeb/%s\r\n" "Accept-Ranges: bytes\r\n" "ETag: %s\r\n" "Content-Length: %d\r\n" "Content-Type: %s\r\n" "Last-Modified: %s\r\n" "\r\n"; dwBytesToWrite = mir_snprintf(szBuf, SIZEOF(szBuf), szHttpOk, szCurTime, PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), szETag, nDataSize, pszGetMimeType(pszRealPath), szFileTime); } Netlib_Send(hConnection, szBuf, dwBytesToWrite, 0); if (bIsGetCommand) { static int nThreadCount = 0; nThreadCount++; DWORD dwLastUpdate = GetTickCount(); DWORD dwLastCurrentDL = 0; /* dwLastDLSTickCount = dwCurTick; dwCurrentDL;*/ //DWORD dwMaxSpeed = 8192;// Byte pr Sek //DWORD dwMaxSpeed = 20000;// Byte pr Sek //DWORD dwMaxSpeed = 163840;// Byte pr Sek //DWORD dwMaxSpeed = 4096;// Byte pr Sek DWORD dwLastResetTime = GetTickCount(); int nMaxBytesToSend = nMaxUploadSpeed / nThreadCount; for (;;) { { DWORD dwCurTick = GetTickCount(); if (dwCurTick - dwLastUpdate >= 1000) { dwSpeed = ((dwCurrentDL - dwLastCurrentDL) * 1000) / (dwCurTick - dwLastUpdate); dwLastUpdate = dwCurTick; dwLastCurrentDL = dwCurrentDL; } } if (nMaxUploadSpeed == 0) { Sleep(1000); continue; } bool bSpeedLimit = (nMaxUploadSpeed >= 0) && (bIsOnline || !bLimitOnlyWhenOnline); DWORD dwCurOpr = sizeof(szBuf); if (bSpeedLimit) dwCurOpr = min(nMaxBytesToSend, sizeof(szBuf)); if (!ReadFile(hFile, szBuf, dwCurOpr, &dwBytesToWrite, NULL)) break; if (dwBytesToWrite <= 0) break; if (dwCurrentDL + dwBytesToWrite > dwDataToSend) dwBytesToWrite = dwDataToSend - dwCurrentDL; if (bSpeedLimit) nMaxBytesToSend -= dwBytesToWrite; DWORD dwSend = Netlib_Send(hConnection, szBuf, dwBytesToWrite, MSG_NODUMP); if (dwSend == SOCKET_ERROR) break; dwCurrentDL += dwSend; if (dwSend != dwBytesToWrite) break; if (dwCurrentDL >= dwDataToSend) break; if (bSpeedLimit && nMaxBytesToSend <= 0) { // we have reached the limmit DWORD dwTimeUsed = GetTickCount() - dwLastResetTime; if (dwTimeUsed < 1000) Sleep(1000 - dwTimeUsed); dwLastResetTime = GetTickCount(); nMaxBytesToSend = nMaxUploadSpeed / nThreadCount; } } // file is always closed in destructor if (szTempfile[0] != '\0') { // and here - since it is a temporary index which as to be deleted CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE; DeleteFile(szTempfile); } clCritSection.Lock(); nThreadCount--; bool bNeedToWriteConfig = false; if (dwCurrentDL == nDataSize) { if (pclCur->st.nMaxDownloads > 0) { pclCur->st.nMaxDownloads--; bNeedToWriteConfig = true; } } pclCur->bRemoveUser(this); // nMaxDownloads can have been decreesed by another thread. // Therefore we test it even if we did'en decreese it if (pclCur->st.nMaxDownloads == 0 && !pclCur->bAnyUsers()) { CLFileShareNode **pclPrev = &pclFirstNode; for (CLFileShareNode * pcl = pclFirstNode ; pcl ; pcl = pcl->pclNext) { if (pcl == pclCur) { *pclPrev = pclCur->pclNext; ShowPopupWindow(Translate("Share removed"), pclCur->st.pszSrvPath, RGB(255, 189, 189)); delete pclCur; bNeedToWriteConfig = true; break; } pclPrev = &pcl->pclNext; } } if (bNeedToWriteConfig) { bWriteConfigurationFile(); } } return true; } } #ifdef _DEBUG OutputDebugString("########### Request Failed ###########\n"); OutputDebugString(pszRequest); #endif pszRequest[nUriLength] = 0; if ((nUriLength != 12 || strncmp(pszRequest, "/favicon.ico", nUriLength)) && // do not show popup of favicon.ico *(ULONG*)(&stAddr) != 0x0100007F) { // do not show popup of 127.0.0.1 ShowPopupWindow(inet_ntoa(stAddr), pszRequest, RGB(255, 189, 189)); } SendError(404, "Not Found", "The requested URL was not found on this server."); return false; }
static INT_PTR GetWindowAPI(WPARAM, LPARAM) { return PLUGIN_MAKE_VERSION(0, 0, 0, 2); }
TIME_API tmi; PLUGINLINK *pluginLink; HINSTANCE g_hInst; int hLangpack; ITaskbarList3 * pTaskbarInterface; PLUGININFOEX pluginInfo = { sizeof(PLUGININFOEX), #ifdef _UNICODE "Scriver (Unicode)", #else "Scriver", #endif PLUGIN_MAKE_VERSION(2, 10, 0, 2), "Scriver - send and receive instant messages", "Miranda IM Development Team", "*****@*****.**", "Copyright (c) 2000-2012 Miranda IM Project", "http://www.miranda-im.org", UNICODE_AWARE, DEFMOD_SRMESSAGE, // replace internal version (if any) #ifdef _UNICODE {0x84636f78, 0x2057, 0x4302, { 0x8a, 0x65, 0x23, 0xa1, 0x6d, 0x46, 0x84, 0x4c }} //{84636F78-2057-4302-8A65-23A16D46844C} #else {0x1e91b6c9, 0xe040, 0x4a6f, { 0xab, 0x56, 0xdf, 0x76, 0x98, 0xfa, 0xcb, 0xf1 }} //{1E91B6C9-E040-4a6f-AB56-DF7698FACBF1} #endif }; BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)