From 036428b1f75d480617d5df454dc28a5adb941d26 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Wed, 4 May 2011 19:12:23 +0000 Subject: added MRA git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@67 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- MRA/MraMPop.cpp | 241 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 MRA/MraMPop.cpp (limited to 'MRA/MraMPop.cpp') diff --git a/MRA/MraMPop.cpp b/MRA/MraMPop.cpp new file mode 100644 index 0000000..ad51018 --- /dev/null +++ b/MRA/MraMPop.cpp @@ -0,0 +1,241 @@ +#include "Mra.h" +#include "MraMPop.h" + + + + +// MPOP_SESSION +typedef struct +{ + FIFO_MT ffmtQueueToQuery; + BOOL bKeyValid; + LPSTR lpszMPOPKey; + SIZE_T dwMPOPKeySize; +} MRA_MPOP_SESSION_QUEUE; + + +typedef struct +{ + FIFO_MT_ITEM ffmtiFifoItem; + LPSTR lpszUrl; + SIZE_T dwUrlSize; +} MRA_MPOP_SESSION_QUEUE_ITEM; + + + +void MraMPopSessionQueueClear (HANDLE hMPopSessionQueue); + + + + +DWORD MraMPopSessionQueueInitialize(HANDLE *phMPopSessionQueue) +{ + DWORD dwRetErrorCode; + + if (phMPopSessionQueue) + { + MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue; + + pmpsqMPopSessionQueue=(MRA_MPOP_SESSION_QUEUE*)MEMALLOC(sizeof(MRA_MPOP_SESSION_QUEUE)); + if (pmpsqMPopSessionQueue) + { + pmpsqMPopSessionQueue->bKeyValid=FALSE; + pmpsqMPopSessionQueue->lpszMPOPKey=NULL; + pmpsqMPopSessionQueue->dwMPOPKeySize=0; + FifoMTInitialize(&pmpsqMPopSessionQueue->ffmtQueueToQuery,0); + + (*phMPopSessionQueue)=(HANDLE)pmpsqMPopSessionQueue; + dwRetErrorCode=NO_ERROR; + }else{ + dwRetErrorCode=GetLastError(); + } + }else{ + dwRetErrorCode=ERROR_ALREADY_INITIALIZED; + } +return(dwRetErrorCode); +} + + +void MraMPopSessionQueueClear(HANDLE hMPopSessionQueue) +{ + if (hMPopSessionQueue) + { + MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue=(MRA_MPOP_SESSION_QUEUE*)hMPopSessionQueue; + MRA_MPOP_SESSION_QUEUE_ITEM *pmpsqi; + + pmpsqMPopSessionQueue->bKeyValid=FALSE; + MEMFREE(pmpsqMPopSessionQueue->lpszMPOPKey); + pmpsqMPopSessionQueue->dwMPOPKeySize=0; + while(FifoMTItemPop(&pmpsqMPopSessionQueue->ffmtQueueToQuery,NULL,(LPVOID*)&pmpsqi)==NO_ERROR) MEMFREE(pmpsqi); + } +} + + +void MraMPopSessionQueueFlush(HANDLE hMPopSessionQueue) +{ + if (hMPopSessionQueue) + { + MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue=(MRA_MPOP_SESSION_QUEUE*)hMPopSessionQueue; + + while(FifoMTGetCount(&pmpsqMPopSessionQueue->ffmtQueueToQuery)) + { + MraMPopSessionQueueSetNewMPopKey(hMPopSessionQueue,NULL,0); + MraMPopSessionQueueStart(hMPopSessionQueue); + } + } +} + + +void MraMPopSessionQueueDestroy(HANDLE hMPopSessionQueue) +{ + if (hMPopSessionQueue) + { + MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue=(MRA_MPOP_SESSION_QUEUE*)hMPopSessionQueue; + MraMPopSessionQueueClear(hMPopSessionQueue); + FifoMTDestroy(&pmpsqMPopSessionQueue->ffmtQueueToQuery); + MEMFREE(pmpsqMPopSessionQueue); + } +} + + +DWORD MraMPopSessionQueueAddUrl(HANDLE hMPopSessionQueue,LPSTR lpszUrl,SIZE_T dwUrlSize) +{ + DWORD dwRetErrorCode; + + if (hMPopSessionQueue && lpszUrl && dwUrlSize) + { + MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue=(MRA_MPOP_SESSION_QUEUE*)hMPopSessionQueue; + MRA_MPOP_SESSION_QUEUE_ITEM *pmpsqi=(MRA_MPOP_SESSION_QUEUE_ITEM*)MEMALLOC((sizeof(MRA_MPOP_SESSION_QUEUE_ITEM)+dwUrlSize+sizeof(SIZE_T))); + + if (pmpsqi) + { + pmpsqi->dwUrlSize=dwUrlSize; + pmpsqi->lpszUrl=(LPSTR)(pmpsqi+1); + memmove(pmpsqi->lpszUrl,lpszUrl,dwUrlSize); + FifoMTItemPush(&pmpsqMPopSessionQueue->ffmtQueueToQuery,&pmpsqi->ffmtiFifoItem,(LPVOID)pmpsqi); + if (pmpsqMPopSessionQueue->bKeyValid) + { + dwRetErrorCode=MraMPopSessionQueueStart(hMPopSessionQueue); + }else{ + if (masMraSettings.bLoggedIn) + { + MraSendCMD(MRIM_CS_GET_MPOP_SESSION,NULL,0); + }else{ + MraMPopSessionQueueFlush(hMPopSessionQueue); + } + dwRetErrorCode=NO_ERROR; + } + }else{ + dwRetErrorCode=GetLastError(); + } + }else{ + dwRetErrorCode=ERROR_INVALID_HANDLE; + } +return(dwRetErrorCode); +} + + +DWORD MraMPopSessionQueueAddUrlAndEMail(HANDLE hMPopSessionQueue,LPSTR lpszUrl,SIZE_T dwUrlSize,LPSTR lpszEMail,SIZE_T dwEMailSize) +{ + DWORD dwRetErrorCode; + + if (hMPopSessionQueue && lpszUrl && dwUrlSize && lpszEMail && dwEMailSize) + { + char szUrl[BUFF_SIZE_URL],szEMail[MAX_EMAIL_LEN]; + LPSTR lpszUser,lpszDomain; + + dwRetErrorCode=ERROR_INVALID_DATA; + BuffToLowerCase(szEMail,lpszEMail,dwEMailSize); + lpszDomain=(LPSTR)MemoryFindByte(0,szEMail,dwEMailSize,'@'); + if (lpszDomain) + if (lpszUser=(LPSTR)MemoryFindByte((lpszDomain-szEMail),szEMail,dwEMailSize,'.')) + { + (*lpszUser)=0; + lpszUser=szEMail; + (*lpszDomain)=0; + lpszDomain++; + + dwUrlSize=mir_snprintf(szUrl,SIZEOF(szUrl),"%s/%s/%s",lpszUrl,lpszDomain,lpszUser); + dwRetErrorCode=MraMPopSessionQueueAddUrl(hMPopSessionQueue,szUrl,dwUrlSize); + } + }else{ + dwRetErrorCode=ERROR_INVALID_HANDLE; + } +return(dwRetErrorCode); +} + +DWORD MraMPopSessionQueueStart(HANDLE hMPopSessionQueue) +{ + DWORD dwRetErrorCode; + + if (hMPopSessionQueue) + { + MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue=(MRA_MPOP_SESSION_QUEUE*)hMPopSessionQueue; + MRA_MPOP_SESSION_QUEUE_ITEM *pmpsqi; + + dwRetErrorCode=NO_ERROR; + if (pmpsqMPopSessionQueue->bKeyValid==TRUE) + if (FifoMTItemPop(&pmpsqMPopSessionQueue->ffmtQueueToQuery,NULL,(LPVOID*)&pmpsqi)==NO_ERROR) + { + char szUrl[BUFF_SIZE_URL],szEMail[MAX_EMAIL_LEN]; + SIZE_T dwUrlSize,dwEMailSize; + + if (DB_Mra_GetStaticStringA(NULL,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) + { + pmpsqMPopSessionQueue->bKeyValid=FALSE; + BuffToLowerCase(szEMail,szEMail,dwEMailSize); + dwUrlSize=mir_snprintf(szUrl,SIZEOF(szUrl),MRA_MPOP_AUTH_URL,szEMail,pmpsqMPopSessionQueue->lpszMPOPKey,pmpsqi->lpszUrl); + + CallService(MS_UTILS_OPENURL,TRUE,(LPARAM)szUrl); + DebugPrint(L"Opening URL: ");DebugPrintCRLFA(szUrl); + //MraSendCMD(MRIM_CS_GET_MPOP_SESSION,NULL,0); + } + MEMFREE(pmpsqi); + } + }else{ + dwRetErrorCode=ERROR_INVALID_HANDLE; + } +return(dwRetErrorCode); +} + + +DWORD MraMPopSessionQueueSetNewMPopKey(HANDLE hMPopSessionQueue,LPSTR lpszKey,SIZE_T dwKeySize) +{ + DWORD dwRetErrorCode; + + if (hMPopSessionQueue) + { + MRA_MPOP_SESSION_QUEUE *pmpsqMPopSessionQueue=(MRA_MPOP_SESSION_QUEUE*)hMPopSessionQueue; + + if (lpszKey==NULL) dwKeySize=0; + if (pmpsqMPopSessionQueue->dwMPOPKeySizelpszMPOPKey); + pmpsqMPopSessionQueue->lpszMPOPKey=(LPSTR)MEMALLOC(dwKeySize+sizeof(SIZE_T)); + } + + if (pmpsqMPopSessionQueue->lpszMPOPKey) + { + pmpsqMPopSessionQueue->bKeyValid=TRUE; + pmpsqMPopSessionQueue->dwMPOPKeySize=dwKeySize; + memmove(pmpsqMPopSessionQueue->lpszMPOPKey,lpszKey,dwKeySize); + (*(pmpsqMPopSessionQueue->lpszMPOPKey+dwKeySize))=0; + + DebugPrint(L"New MPOP session key: ");DebugPrintCRLFA(pmpsqMPopSessionQueue->lpszMPOPKey); + dwRetErrorCode=NO_ERROR; + }else{ + pmpsqMPopSessionQueue->bKeyValid=FALSE; + pmpsqMPopSessionQueue->lpszMPOPKey=NULL; + pmpsqMPopSessionQueue->dwMPOPKeySize=0; + dwRetErrorCode=GetLastError(); + } + }else{ + dwRetErrorCode=ERROR_INVALID_HANDLE; + } +return(dwRetErrorCode); +} + + + + + -- cgit v1.2.3