From 48540940b6c28bb4378abfeb500ec45a625b37b6 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Tue, 15 May 2012 10:38:20 +0000 Subject: initial commit git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/YAMN/protoplugin.cpp | 258 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 plugins/YAMN/protoplugin.cpp (limited to 'plugins/YAMN/protoplugin.cpp') diff --git a/plugins/YAMN/protoplugin.cpp b/plugins/YAMN/protoplugin.cpp new file mode 100644 index 0000000000..e89b8790ab --- /dev/null +++ b/plugins/YAMN/protoplugin.cpp @@ -0,0 +1,258 @@ +/* + * YAMN plugin export functions for protocols + * + * (c) majvan 2002-2004 + */ + +#if !defined(_WIN64) + #include "filter/simple/AggressiveOptimize.h" +#endif +#include +#include +#include +#include +#include +#include "m_yamn.h" +#include "m_protoplugin.h" +#include "m_synchro.h" +#include "debug.h" + +//- imported --------------------------------------------------------------------------------------- +//-------------------------------------------------------------------------------------------------- + +extern WCHAR *UserDirectory; //e.g. "F:\WINNT\Profiles\UserXYZ" +extern WCHAR *ProfileName; //e.g. "majvan" +extern SWMRG *AccountBrowserSO; +extern LPCRITICAL_SECTION PluginRegCS; +extern YAMN_VARIABLES YAMNVar; +//From synchro.cpp +extern BOOL WINAPI SWMRGInitialize(PSWMRG,TCHAR *); +extern void WINAPI SWMRGDelete(PSWMRG); +extern DWORD WINAPI SWMRGWaitToWrite(PSWMRG pSWMRG,DWORD dwTimeout); +extern void WINAPI SWMRGDoneWriting(PSWMRG pSWMRG); +extern DWORD WINAPI SWMRGWaitToRead(PSWMRG pSWMRG, DWORD dwTimeout); +extern void WINAPI SWMRGDoneReading(PSWMRG pSWMRG); +//From account.cpp +extern int StopAccounts(HYAMNPROTOPLUGIN Plugin); +extern int DeleteAccounts(HYAMNPROTOPLUGIN Plugin); +extern int WaitForAllAccounts(HYAMNPROTOPLUGIN Plugin,BOOL GetAccountBrowserAccess); + +//-------------------------------------------------------------------------------------------------- +//-------------------------------------------------------------------------------------------------- + +WCHAR FileName2[]=L"%s\\yamn-accounts.%s.%s.book"; //UserDirectory\\yamn-accounts.PluginName.UserProfileName.book +PYAMN_PROTOPLUGINQUEUE FirstProtoPlugin=NULL; + +INT_PTR RegisterProtocolPluginSvc(WPARAM,LPARAM); + +//Removes plugin from queue and deletes registration structures +INT_PTR UnregisterProtocolPlugin(HYAMNPROTOPLUGIN Plugin); + +INT_PTR UnregisterProtocolPluginSvc(WPARAM,LPARAM); + +//Removes plugins from queue and deletes registration structures +INT_PTR UnregisterProtoPlugins(); + +//Sets imported functions for an plugin and therefore it starts plugin to be registered and running +// Plugin- plugin, which wants to set its functions +// YAMNFcn- pointer to imported functions with accounts +// YAMNFcnVer- version of YAMN_PROTOIMPORTFCN, use YAMN_PROTOIMPORTFCNVERSION +// YAMNMailFcn- pointer to imported functions with mails +// YAMNMailFcnVer- version of YAMN_MAILIMPORTFCN, use YAMN_MAILIMPORTFCNVERSION +// returns nonzero if success +int WINAPI SetProtocolPluginFcnImportFcn(HYAMNPROTOPLUGIN Plugin,PYAMN_PROTOIMPORTFCN YAMNFcn,DWORD YAMNFcnVer,PYAMN_MAILIMPORTFCN YAMNMailFcn,DWORD YAMNMailFcnVer); + +INT_PTR GetFileNameWSvc(WPARAM,LPARAM); +INT_PTR GetFileNameASvc(WPARAM,LPARAM); +INT_PTR DeleteFileNameSvc(WPARAM,LPARAM); + +struct CExportedFunctions ProtoPluginExportedFcn[]= +{ + {YAMN_SETPROTOCOLPLUGINFCNIMPORTID,(void *)SetProtocolPluginFcnImportFcn}, +}; + +struct CExportedServices ProtoPluginExportedSvc[]= +{ + {MS_YAMN_REGISTERPROTOPLUGIN,RegisterProtocolPluginSvc}, + {MS_YAMN_UNREGISTERPROTOPLUGIN,UnregisterProtocolPluginSvc}, + {MS_YAMN_GETFILENAMEA,GetFileNameASvc}, + {MS_YAMN_GETFILENAMEW,GetFileNameWSvc}, + {MS_YAMN_DELETEFILENAME,DeleteFileNameSvc}, +}; + +//-------------------------------------------------------------------------------------------------- +//-------------------------------------------------------------------------------------------------- + +INT_PTR RegisterProtocolPluginSvc(WPARAM wParam,LPARAM lParam) +{ + PYAMN_PROTOREGISTRATION Registration=(PYAMN_PROTOREGISTRATION)wParam; + HYAMNPROTOPLUGIN Plugin; + + if(lParam!=YAMN_PROTOREGISTRATIONVERSION) + return 0; + if((Registration->Name==NULL) || (Registration->Ver==NULL)) + return (INT_PTR)NULL; + if(NULL==(Plugin=new YAMN_PROTOPLUGIN)) + return (INT_PTR)NULL; + + Plugin->PluginInfo=Registration; + + Plugin->FirstAccount=NULL; + + Plugin->AccountBrowserSO=new SWMRG; + SWMRGInitialize(Plugin->AccountBrowserSO,NULL); + + Plugin->Fcn=NULL; + Plugin->MailFcn=NULL; + +#ifdef DEBUG_SYNCHRO + DebugLog(SynchroFile,"::: YAMN- new protocol registered: %0x (%s) :::\n",Plugin,Registration->Name); +#endif + return (INT_PTR)Plugin; +} + +int WINAPI SetProtocolPluginFcnImportFcn(HYAMNPROTOPLUGIN Plugin,PYAMN_PROTOIMPORTFCN YAMNFcn,DWORD YAMNFcnVer,PYAMN_MAILIMPORTFCN YAMNMailFcn,DWORD YAMNMailFcnVer) +{ + PYAMN_PROTOPLUGINQUEUE Parser; + + if(YAMNFcnVer!=YAMN_PROTOIMPORTFCNVERSION) + return 0; + if(YAMNMailFcnVer!=YAMN_MAILIMPORTFCNVERSION) + return 0; + if(YAMNFcn==NULL) + return 0; + if(YAMNMailFcn==NULL) + return 0; + +#ifdef DEBUG_SYNCHRO + DebugLog(SynchroFile,"::: YAMN- protocol %0x import succeed :::\n",Plugin); +#endif + Plugin->Fcn=YAMNFcn; + Plugin->MailFcn=YAMNMailFcn; + + EnterCriticalSection(PluginRegCS); +//We add protocol to the protocol list + for(Parser=FirstProtoPlugin;Parser!=NULL && Parser->Next!=NULL;Parser=Parser->Next); + if(Parser==NULL) + { + FirstProtoPlugin=new YAMN_PROTOPLUGINQUEUE; + Parser=FirstProtoPlugin; + } + else + { + Parser->Next=new YAMN_PROTOPLUGINQUEUE; + Parser=Parser->Next; + } + + Parser->Plugin=Plugin; + Parser->Next=NULL; + + LeaveCriticalSection(PluginRegCS); + return 1; +} + +INT_PTR UnregisterProtocolPlugin(HYAMNPROTOPLUGIN Plugin) +{ + PYAMN_PROTOPLUGINQUEUE Parser,Found; + +#ifdef DEBUG_SYNCHRO + DebugLog(SynchroFile,"Entering UnregisterProtocolPlugin\n"); +#endif + if(FirstProtoPlugin->Plugin==Plugin) + { + Found=FirstProtoPlugin; + FirstProtoPlugin=FirstProtoPlugin->Next; + } + else + { + for(Parser=FirstProtoPlugin;(Parser->Next!=NULL) && (Plugin!=Parser->Next->Plugin);Parser=Parser->Next); + if(Parser->Next!=NULL) + { + Found=Parser->Next; + Parser->Next=Parser->Next->Next; + } + else + Found=NULL; + } + if(Found!=NULL) + { + StopAccounts(Plugin); + DeleteAccounts(Plugin); + if(Plugin->Fcn->UnLoadFcn!=NULL) + Plugin->Fcn->UnLoadFcn((void *)0); + + delete Found->Plugin->AccountBrowserSO; + delete Found->Plugin; + delete Found; + +#ifdef DEBUG_SYNCHRO + DebugLog(SynchroFile,"::: YAMN- protocol %0x unregistered :::\n",Plugin); +#endif + } + else + return 0; + return 1; +} + +INT_PTR UnregisterProtocolPluginSvc(WPARAM wParam,LPARAM lParam) +{ + HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam; + + EnterCriticalSection(PluginRegCS); + UnregisterProtocolPlugin(Plugin); + LeaveCriticalSection(PluginRegCS); + return 1; + +} + +INT_PTR UnregisterProtoPlugins() +{ + EnterCriticalSection(PluginRegCS); +//We remove protocols from the protocol list + while(FirstProtoPlugin!=NULL) + UnregisterProtocolPlugin(FirstProtoPlugin->Plugin); + LeaveCriticalSection(PluginRegCS); + return 1; +} + +INT_PTR GetFileNameWSvc(WPARAM wParam,LPARAM) +{ + WCHAR *FileName; + + if(NULL==(FileName=new WCHAR[MAX_PATH])) + return NULL; + swprintf(FileName,FileName2,UserDirectory,(WCHAR *)wParam,ProfileName); +// MessageBoxW(NULL,FileName,L"GetFileNameW",MB_OK); + return (INT_PTR)FileName; +} + +INT_PTR GetFileNameASvc(WPARAM wParam,LPARAM) +{ + WCHAR *ConvertedInput; + WCHAR *FileName; + + if(NULL==(FileName=new WCHAR[MAX_PATH])) + return NULL; + if(NULL==(ConvertedInput=new WCHAR[MAX_PATH])) + { + delete[] FileName; + return NULL; + } + +// Convert input string to unicode + MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,(char *)wParam,-1,ConvertedInput,(int)strlen((char *)wParam)+1); + + swprintf(FileName,FileName2,UserDirectory,ConvertedInput,ProfileName); +// MessageBoxW(NULL,FileName,L"GetFileNameA",MB_OK); + delete[] ConvertedInput; + + return (INT_PTR)FileName; +} + +INT_PTR DeleteFileNameSvc(WPARAM wParam,LPARAM) +{ + if((WCHAR *)wParam!=NULL) + delete[] (WCHAR *)wParam; + + return 0; +} -- cgit v1.2.3