From 1572f78c8d183b01614b599f67d7cc29e3b77240 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 8 Oct 2023 13:42:34 +0300 Subject: YAMN: unused code removed --- plugins/ExternalAPI/m_filterplugin.h | 139 ------------------------ plugins/ExternalAPI/m_yamn.h | 7 -- protocols/YAMN/YAMN.vcxproj | 1 - protocols/YAMN/YAMN.vcxproj.filters | 3 - protocols/YAMN/src/filterplugin.cpp | 168 ----------------------------- protocols/YAMN/src/proto/pop3/pop3comm.cpp | 53 +++++---- protocols/YAMN/src/services.cpp | 10 -- protocols/YAMN/src/stdafx.h | 19 +--- 8 files changed, 29 insertions(+), 371 deletions(-) delete mode 100644 plugins/ExternalAPI/m_filterplugin.h delete mode 100644 protocols/YAMN/src/filterplugin.cpp diff --git a/plugins/ExternalAPI/m_filterplugin.h b/plugins/ExternalAPI/m_filterplugin.h deleted file mode 100644 index 80f7ccd910..0000000000 --- a/plugins/ExternalAPI/m_filterplugin.h +++ /dev/null @@ -1,139 +0,0 @@ -#ifndef __M_FILTERPLUGIN_H -#define __M_FILTERPLUGIN_H - -#include -#include "m_mails.h" //for mail definition - -// -//================================== IMPORTED FUNCTIONS ================================== -// - -#ifndef YAMN_STANDARDFCN -typedef DWORD (WINAPI *YAMN_STANDARDFCN)(LPVOID); -#endif -typedef DWORD (WINAPI *YAMN_FILTERMAILFCN)(CAccount *,DWORD,HYAMNMAIL,DWORD); - -typedef struct CFilterImportFcn -{ -//If changes are made in this structure, version is changed. -//So then YAMN does not initialize your structure, if version does not match. -#define YAMN_FILTERIMPORTFCNVERSION 2 - -//Function is called to get info from mail and mark mail as spam or not... - YAMN_FILTERMAILFCN FilterMailFcnPtr; - -//Function is called when application exits. Plugin should unload - YAMN_STANDARDFCN UnLoadFcn; -} YAMN_FILTERIMPORTFCN, *PYAMN_FILTERIMPORTFCN; - -// -//================================== FILTER PLUGIN REGISTRATION STRUCTURES ================================== -// - -typedef struct CFilterPluginRegistration -{ -#define YAMN_FILTERREGISTRATIONVERSION 2 -//Name of plugin -//this member CANNOT be NULL. Just write here description, i.e. "PopFile filter plugin for YAMN" - char *Name; - -//The version of plugin. CANNOT be NULL. - char *Ver; - -//Plugin copyright -//Write here your copyright if you want (or NULL) - char *Copyright; - -//Plugin description. Can be NULL. - char *Description; - -//Your contact (email). Can be NULL. - char *Email; - -//The web page. Can be NULL. - char *WWW; -} YAMN_FILTERREGISTRATION, *PYAMN_FILTERREGISTRATION; - -typedef struct CYAMNFilterPlugin -{ -//Importance of plugin. Mails are filtered in the way, that filter with smallest importance number -//filters and marks mails first and the filter using the highest number marks mails the last. It means, -//that number with highest number is the most important, because it can set or clear flags as it wants, -//if another plugin set some flag, plugin with higher number can clear it. - DWORD Importance; - -//All needed other info from plugin - PYAMN_FILTERREGISTRATION PluginInfo; - -//Imported functions - PYAMN_FILTERIMPORTFCN FilterFcn; -} YAMN_FILTERPLUGIN, *PYAMN_FILTERPLUGIN, *HYAMNFILTERPLUGIN; - -typedef struct CFilterPluginQueue -{ - HYAMNFILTERPLUGIN Plugin; - struct CFilterPluginQueue *Next; -} YAMN_FILTERPLUGINQUEUE,*PYAMN_FILTERPLUGINQUEUE; - -// -//================================== YAMN SERVICES FOR PROTOCOL PLUGIN ================================== -// - -//RegisterFilterPlugin Service -//Registers filter plugin -//WPARAM- pointer to YAMN_FILTERREGISTRATION structure. Plugin must not delete this structure from memory. -//LPARAM- version of YAMN_FILTERREGISTRATION structure (use YAMN_PROTOREGISTRATIONVERSION definition) -//returns handle to plugin (HYAMNFILTERPLUGIN), if registration failed (plugin not registered) returns NULL -//You need next to call SetFilterPluginFcnImportFcn to have your plugin cooperated with YAMN. -#define MS_YAMN_REGISTERFILTERPLUGIN "YAMN/Service/RegisterFilterPlugin" - -//UnregisterFilterPlugin Service -//Unregisters filter plugin -//WPARAM- (HYAMNFILTERPLUGIN) plugin handle -//LPARAM- any value -//returns nonzero if success -#define MS_YAMN_UNREGISTERFILTERPLUGIN "YAMN/Service/UnregisterFilterPlugin" - -// -//================================== FUNCTIONS DEFINITIONS ======================================== -// - -typedef int (WINAPI *YAMN_SETFILTERPLUGINFCNIMPORTFCN)(HYAMNFILTERPLUGIN Plugin,DWORD Importance,PYAMN_FILTERIMPORTFCN YAMNFilterFcn,DWORD YAMNFilterFcnVer); - -// -//================================== QUICK FUNCTION CALL DEFINITIONS ======================================== -// - -//These are defininitions for YAMN exported functions. Your plugin can use them. -//pYAMNFcn is global variable, it is pointer to your structure containing YAMN functions. -//It is something similar like pluginLink variable in Miranda plugin. If you use -//this name of variable, you have already defined these functions and you can use them. -//It's similar to Miranda's CreateService function. - -//How to use YAMN functions: -//Create a structure containing pointer to functions you want to use in your plugin -//This structure can look something like this: -// -// struct -// { -// YAMN_SETFILTERPLUGINFCNIMPORTFCN SetFilterPluginFcnImportFcn; -// } *pYAMNFcn; -// -//then you have to fill this structure with pointers... If you use Miranda services, you will do it like this -// -// pYAMNFcn->SetFilterPluginFcnImportFcn=(YAMN_SETFILTERPLUGINFCNIMPORTFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SETFILTERPLUGINFCNIMPORTID,0); -// -//If you do not use Miranda services, call service MS_YAMN_GETFCNPTR directly. The address to the MS_YAMN_GETFCNPTR is sent to you in LoadFilter function: -// -// pYAMNFcn->SetFilterPluginFcnImportFcn=(YAMN_SETFILTERPLUGINFCNIMPORTFCN)YAMN_GetFcnPtr((WPARAM)YAMN_SETFILTERPLUGINFCNIMPORTID,0); -// -//and in your plugin just simply use e.g.: -// -// SetFilterPluginFcnImport(...); -// - -#define YAMN_SETFILTERPLUGINFCNIMPORTID "YAMN/SetFilterPluginFcnImport" - -#define SetFilterPluginFcnImport(a,b,c,d) pYAMNFcn->SetFilterPluginFcnImportFcn(a,b,c,d) - -#endif diff --git a/plugins/ExternalAPI/m_yamn.h b/plugins/ExternalAPI/m_yamn.h index 10b4f94513..77ea3cb676 100644 --- a/plugins/ExternalAPI/m_yamn.h +++ b/plugins/ExternalAPI/m_yamn.h @@ -110,13 +110,6 @@ struct CExportedServices //sense to store all this information in memory, etc. #define MS_YAMN_CLISTDBLCLICK "YAMN/Service/ClistContactDoubleclicked" -//FilterMail Service -//Ask YAMN to process mail filtering. YAMN calls filter plugins to mark mail as spam etc... Warning! Leave all -//read or write access to mail as this function waits for write-access to mail! -//WPARAM- (HACCOUNT) account to which mail belongs -//LPARAM- (HYAMNMAIL) mail to filter -#define MS_YAMN_FILTERMAIL "YAMN/Service/FilterMail" - //MailBrowser Service //runs mail browser window (or tray icon only or popups only) //WPARAM- pointer to YAMN_MAILBROWSERPARAM structure, data to mailbrowser. You do not need to fill ThreadRunningEV event member. diff --git a/protocols/YAMN/YAMN.vcxproj b/protocols/YAMN/YAMN.vcxproj index 203ab9c98b..0f6af4ca09 100644 --- a/protocols/YAMN/YAMN.vcxproj +++ b/protocols/YAMN/YAMN.vcxproj @@ -34,7 +34,6 @@ ..\stdafx.h - ..\stdafx.h diff --git a/protocols/YAMN/YAMN.vcxproj.filters b/protocols/YAMN/YAMN.vcxproj.filters index 0f2b3632b4..3d9a1b8eb9 100644 --- a/protocols/YAMN/YAMN.vcxproj.filters +++ b/protocols/YAMN/YAMN.vcxproj.filters @@ -14,9 +14,6 @@ Source Files - - Source Files - Source Files diff --git a/protocols/YAMN/src/filterplugin.cpp b/protocols/YAMN/src/filterplugin.cpp deleted file mode 100644 index 9d22962b8f..0000000000 --- a/protocols/YAMN/src/filterplugin.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - * YAMN plugin export functions for filtering - * - * (c) majvan 2002-2004 - */ - -#include "stdafx.h" - - //-------------------------------------------------------------------------------------------------- - //-------------------------------------------------------------------------------------------------- - -PYAMN_FILTERPLUGINQUEUE FirstFilterPlugin = nullptr; - -INT_PTR RegisterFilterPluginSvc(WPARAM, LPARAM); - -//Removes plugin from queue and deletes its structures -INT_PTR UnregisterFilterPlugin(HYAMNFILTERPLUGIN Plugin); - -INT_PTR UnregisterFilterPluginSvc(WPARAM wParam, LPARAM lParam); - -//Removes all filter plugins -INT_PTR UnregisterFilterPlugins(); - -INT_PTR FilterMailSvc(WPARAM, LPARAM); - -//Sets imported functions for an plugin and therefore it starts plugin to be registered and running -// Plugin- plugin, which wants to set its functions -// Importance- importance of plugin (see m_filterplugin.h) -// YAMNFilterFcn- pointer to imported functions -// YAMNfilterFcnVer- version of YAMN_FILTERIMPORTFCN, use YAMN_FILTERIMPORTFCNVERSION -// returns nonzero if success -int WINAPI SetFilterPluginFcnImportFcn(HYAMNFILTERPLUGIN Plugin, uint32_t Importance, PYAMN_FILTERIMPORTFCN YAMNFilterFcn, uint32_t YAMNFilterFcnVer); - -struct CExportedFunctions FilterPluginExportedFcn[] = -{ - {YAMN_SETFILTERPLUGINFCNIMPORTID, (void *)SetFilterPluginFcnImportFcn}, -}; - -struct CExportedServices FilterPluginExportedSvc[] = -{ - {MS_YAMN_REGISTERFILTERPLUGIN, RegisterFilterPluginSvc}, - {MS_YAMN_UNREGISTERFILTERPLUGIN, UnregisterFilterPluginSvc}, -}; - -//-------------------------------------------------------------------------------------------------- -//-------------------------------------------------------------------------------------------------- - -INT_PTR RegisterFilterPluginSvc(WPARAM wParam, LPARAM lParam) -{ - PYAMN_FILTERREGISTRATION Registration = (PYAMN_FILTERREGISTRATION)wParam; - HYAMNFILTERPLUGIN Plugin; - - if (lParam != YAMN_FILTERREGISTRATIONVERSION) - return 0; - if ((Registration->Name == nullptr) || (Registration->Ver == nullptr)) - return NULL; - if (nullptr == (Plugin = new YAMN_FILTERPLUGIN)) - return NULL; - - Plugin->PluginInfo = Registration; - Plugin->FilterFcn = nullptr; - return (INT_PTR)Plugin; -} - -INT_PTR UnregisterFilterPlugin(HYAMNFILTERPLUGIN Plugin) -{ - PYAMN_FILTERPLUGINQUEUE Parser, Found; - - if (FirstFilterPlugin->Plugin == Plugin) { - Found = FirstFilterPlugin; - FirstFilterPlugin = FirstFilterPlugin->Next; - } - else { - for (Parser = FirstFilterPlugin; (Parser->Next != nullptr) && (Plugin != Parser->Next->Plugin); Parser = Parser->Next); - if (Parser->Next != nullptr) { - Found = Parser->Next; - Parser->Next = Parser->Next->Next; - } - else - Found = nullptr; - } - if (Found != nullptr) { - if (Plugin->FilterFcn->UnLoadFcn != nullptr) - Plugin->FilterFcn->UnLoadFcn((void *)nullptr); - - delete Found->Plugin; - delete Found; - return 1; - } - - return 0; -} - -INT_PTR UnregisterFilterPluginSvc(WPARAM wParam, LPARAM) -{ - HYAMNFILTERPLUGIN Plugin = (HYAMNFILTERPLUGIN)wParam; - - mir_cslock lck(PluginRegCS); - UnregisterFilterPlugin(Plugin); - return 1; -} - -INT_PTR UnregisterFilterPlugins() -{ - mir_cslock lck(PluginRegCS); - - // We remove protocols from the protocol list - while (FirstFilterPlugin != nullptr) - UnregisterFilterPlugin(FirstFilterPlugin->Plugin); - return 1; -} - -int WINAPI SetFilterPluginFcnImportFcn(HYAMNFILTERPLUGIN Plugin, uint32_t Importance, PYAMN_FILTERIMPORTFCN YAMNFilterFcn, uint32_t YAMNFilterFcnVer) -{ - PYAMN_FILTERPLUGINQUEUE Parser, Previous; - - if (YAMNFilterFcnVer != YAMN_FILTERIMPORTFCNVERSION) - return 0; - if (YAMNFilterFcn == nullptr) - return 0; - - Plugin->Importance = Importance; - Plugin->FilterFcn = YAMNFilterFcn; - - mir_cslock lck(PluginRegCS); - - // We add protocol to the protocol list - for (Previous = nullptr, Parser = FirstFilterPlugin; Parser != nullptr && Parser->Next != nullptr && Parser->Plugin->Importance <= Importance; Previous = Parser, Parser = Parser->Next); - - if (Previous == nullptr) { //insert to the beginnig of queue - FirstFilterPlugin = new YAMN_FILTERPLUGINQUEUE; - FirstFilterPlugin->Plugin = Plugin; - FirstFilterPlugin->Next = Parser; - } - else { - Previous->Next = new YAMN_FILTERPLUGINQUEUE; - Previous = Previous->Next; //leave previous, go to actual plugin - Previous->Plugin = Plugin; - Previous->Next = Parser; //and in actual plugin set, that next plugin is the one we insert in front of - } - return 1; -} - -INT_PTR FilterMailSvc(WPARAM wParam, LPARAM lParam) -{ - CAccount *Account = (CAccount *)wParam; - HYAMNMAIL Mail = (HYAMNMAIL)lParam; - PYAMN_FILTERPLUGINQUEUE ActualPlugin; - - mir_cslock lck(PluginRegCS); - SWriteGuard swa(Account->MessagesAccessSO); - - for (ActualPlugin = FirstFilterPlugin; ActualPlugin != nullptr; ActualPlugin = ActualPlugin->Next) - if (ActualPlugin->Plugin->FilterFcn->FilterMailFcnPtr != nullptr) - ActualPlugin->Plugin->FilterFcn->FilterMailFcnPtr(Account, YAMN_ACCOUNTVERSION, Mail, YAMN_MAILVERSION); - - Mail->Flags |= YAMN_MSG_FILTERED; - - //Set mail flags according to spamlevel settings - if ((Mail->Flags & YAMN_MSG_SPAMMASK) > YAMN_MSG_SPAML1) - Mail->Flags = Mail->Flags & ~(YAMN_MSG_BROWSER | YAMN_MSG_POPUP | YAMN_MSG_SYSTRAY | YAMN_MSG_SOUND | YAMN_MSG_APP | YAMN_MSG_NEVENT); - if (YAMN_MSG_SPAML(Mail->Flags, YAMN_MSG_SPAML3) || YAMN_MSG_SPAML(Mail->Flags, YAMN_MSG_SPAML4)) - Mail->Flags = Mail->Flags | (YAMN_MSG_AUTODELETE | YAMN_MSG_DELETEOK); //set message to delete - if (YAMN_MSG_SPAML(Mail->Flags, YAMN_MSG_SPAML3)) - Mail->Flags = Mail->Flags & ~(YAMN_MSG_MEMDELETE); //set message not to delete it immidiatelly from memory - - return 1; -} diff --git a/protocols/YAMN/src/proto/pop3/pop3comm.cpp b/protocols/YAMN/src/proto/pop3/pop3comm.cpp index ba793cd9d3..9d65132475 100644 --- a/protocols/YAMN/src/proto/pop3/pop3comm.cpp +++ b/protocols/YAMN/src/proto/pop3/pop3comm.cpp @@ -405,7 +405,7 @@ DWORD WINAPI SynchroPOP3(struct CheckParam *WhichTemp) CPOP3Account* ActualAccount; CPop3Client *MyClient; HYAMNMAIL NewMails = nullptr, MsgQueuePtr = nullptr; - char *DataRX = nullptr, *Temp; + char *DataRX = nullptr; int mboxsize, msgs, i; SYSTEMTIME now; LPVOID YAMNParam; @@ -567,17 +567,19 @@ DWORD WINAPI SynchroPOP3(struct CheckParam *WhichTemp) mir_snwprintf(accstatus, TranslateT("Reading body %s"), NewMsgsPtr->ID); SetStatusFcn(ActualAccount, accstatus); DataRX = MyClient->Top(MsgQueuePtr->Number, 100); - if (DataRX != nullptr) { - Temp = DataRX; - while ((Temp < DataRX + MyClient->NetClient->Rcv) && (WS(Temp) || ENDLINE(Temp))) Temp++; - - if (OKLINE(DataRX)) - for (Temp = DataRX; (Temp < DataRX + MyClient->NetClient->Rcv) && (!ENDLINE(Temp)); Temp++); - while ((Temp < DataRX + MyClient->NetClient->Rcv) && ENDLINE(Temp)) Temp++; - } - else + if (DataRX == nullptr) continue; - //delete all the headers of the old mail MsgQueuePtr->MailData->TranslatedHeader + + char *Temp = DataRX; + while ((Temp < DataRX + MyClient->NetClient->Rcv) && (WS(Temp) || ENDLINE(Temp))) + Temp++; + + if (OKLINE(DataRX)) + for (Temp = DataRX; (Temp < DataRX + MyClient->NetClient->Rcv) && (!ENDLINE(Temp)); Temp++); + while ((Temp < DataRX + MyClient->NetClient->Rcv) && ENDLINE(Temp)) + Temp++; + + // delete all the headers of the old mail MsgQueuePtr->MailData->TranslatedHeader struct CMimeItem *TH = MsgQueuePtr->MailData->TranslatedHeader; if (TH) for (; MsgQueuePtr->MailData->TranslatedHeader != nullptr;) { TH = TH->Next; @@ -624,31 +626,26 @@ DWORD WINAPI SynchroPOP3(struct CheckParam *WhichTemp) mir_snwprintf(accstatus, TranslateT("Reading new mail messages (%d%% done)"), 100 * i / msgs); SetStatusFcn(ActualAccount, accstatus); - if (DataRX != nullptr) { - Temp = DataRX; - while ((Temp < DataRX + MyClient->NetClient->Rcv) && (WS(Temp) || ENDLINE(Temp))) Temp++; - - if (OKLINE(DataRX)) - for (Temp = DataRX; (Temp < DataRX + MyClient->NetClient->Rcv) && (!ENDLINE(Temp)); Temp++); - while ((Temp < DataRX + MyClient->NetClient->Rcv) && ENDLINE(Temp)) Temp++; - } - else + if (DataRX == nullptr) continue; + + char *Temp = DataRX; + while ((Temp < DataRX + MyClient->NetClient->Rcv) && (WS(Temp) || ENDLINE(Temp))) + Temp++; - TranslateHeaderFcn(Temp, MyClient->NetClient->Rcv - (Temp - DataRX), &MsgQueuePtr->MailData->TranslatedHeader); + if (OKLINE(DataRX)) + for (Temp = DataRX; (Temp < DataRX + MyClient->NetClient->Rcv) && (!ENDLINE(Temp)); Temp++); + while ((Temp < DataRX + MyClient->NetClient->Rcv) && ENDLINE(Temp)) + Temp++; + TranslateHeaderFcn(Temp, MyClient->NetClient->Rcv - (Temp - DataRX), &MsgQueuePtr->MailData->TranslatedHeader); #ifdef DEBUG_DECODE DebugLog(DecodeFile, "\n"); #endif MsgQueuePtr->Flags |= YAMN_MSG_NORMALNEW; - if (autoretr) MsgQueuePtr->Flags |= YAMN_MSG_BODYRECEIVED; - - //We are going to filter mail. Warning!- we must not be in read access neither write access to mails when calling this service - //This is done, because the "NewMails" queue is not synchronised. It is because it is new queue. Only this thread uses new queue yet, it is not - //connected to account mail queue. - // CallService(MS_YAMN_FILTERMAIL,(WPARAM)ActualAccount,(LPARAM)MsgQueuePtr); - FilterMailSvc((WPARAM)ActualAccount, (LPARAM)MsgQueuePtr); + if (autoretr) + MsgQueuePtr->Flags |= YAMN_MSG_BODYRECEIVED; if (DataRX != nullptr) free(DataRX); diff --git a/protocols/YAMN/src/services.cpp b/protocols/YAMN/src/services.cpp index 180b035a06..d1ce51c96a 100644 --- a/protocols/YAMN/src/services.cpp +++ b/protocols/YAMN/src/services.cpp @@ -254,7 +254,6 @@ int Shutdown(WPARAM, LPARAM) KillTimer(nullptr, SecTimer); UnregisterProtoPlugins(); - UnregisterFilterPlugins(); return 0; } @@ -321,15 +320,6 @@ void CreateServiceFunctions(void) // Function deletes plugin account CreateServiceFunction(MS_YAMN_DELETEACCOUNTMAIL, DeleteAccountMailSvc); - // Function with which filter plugin can register - CreateServiceFunction(MS_YAMN_REGISTERFILTERPLUGIN, RegisterFilterPluginSvc); - - // Function with which filter plugin can unregister - CreateServiceFunction(MS_YAMN_UNREGISTERFILTERPLUGIN, UnregisterFilterPluginSvc); - - // Function filters mail - CreateServiceFunction(MS_YAMN_FILTERMAIL, FilterMailSvc); - // Function contact list double click CreateServiceFunction(MS_YAMN_CLISTDBLCLICK, ClistContactDoubleclicked); diff --git a/protocols/YAMN/src/stdafx.h b/protocols/YAMN/src/stdafx.h index 25dda0a5f5..0cfd60cda2 100644 --- a/protocols/YAMN/src/stdafx.h +++ b/protocols/YAMN/src/stdafx.h @@ -25,7 +25,6 @@ #include #include -#include #include #include #include @@ -115,23 +114,16 @@ INT_PTR UnregisterProtocolPluginSvc(WPARAM, LPARAM); INT_PTR GetFileNameSvc(WPARAM, LPARAM); INT_PTR DeleteFileNameSvc(WPARAM, LPARAM); -//From filterplugin.cpp -//struct CExportedFunctions FilterPluginExported[]; -INT_PTR UnregisterFilterPlugins(); -INT_PTR RegisterFilterPluginSvc(WPARAM, LPARAM); -INT_PTR UnregisterFilterPluginSvc(WPARAM, LPARAM); -INT_PTR FilterMailSvc(WPARAM, LPARAM); - -//From mails.cpp (MIME) -//struct CExportedFunctions MailExported[]; +// From mails.cpp (MIME) +// struct CExportedFunctions MailExported[]; INT_PTR CreateAccountMailSvc(WPARAM wParam, LPARAM lParam); INT_PTR DeleteAccountMailSvc(WPARAM wParam, LPARAM lParam); INT_PTR LoadMailDataSvc(WPARAM wParam, LPARAM lParam); INT_PTR UnloadMailDataSvc(WPARAM wParam, LPARAM); INT_PTR SaveMailDataSvc(WPARAM wParam, LPARAM lParam); -//From mime.cpp -//void WINAPI ExtractHeaderFcn(char *,int,uint16_t,HYAMNMAIL); //already in MailExported +// From mime.cpp +// void WINAPI ExtractHeaderFcn(char *,int,uint16_t,HYAMNMAIL); //already in MailExported struct _tcptable { char *NameBase, *NameSub; @@ -206,9 +198,6 @@ extern YAMN_PROTOPLUGIN *POP3Plugin; int DecodeQuotedPrintable(char *Src, char *Dst, int DstLen, BOOL isQ); int DecodeBase64(char *Src, char *Dst, int DstLen); -//From filterplugin.cpp -extern PYAMN_FILTERPLUGINQUEUE FirstFilterPlugin; - //From protoplugin.cpp extern YAMN_PROTOPLUGINQUEUE *FirstProtoPlugin; -- cgit v1.2.3