From 72eb97b648861bcd03744a027eb09d0410acdf1e Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 12 Nov 2013 19:51:48 +0000 Subject: first MS_CRYPTO_REGISTER_ENGINE implementation git-svn-id: http://svn.miranda-ng.org/main/trunk@6879 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/modules/crypt/encrypt.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/modules/crypt/encrypt.cpp') diff --git a/src/modules/crypt/encrypt.cpp b/src/modules/crypt/encrypt.cpp index 659e75cc53..ab73ac5671 100644 --- a/src/modules/crypt/encrypt.cpp +++ b/src/modules/crypt/encrypt.cpp @@ -49,9 +49,49 @@ static INT_PTR DecodeString(WPARAM wParam, LPARAM lParam) return 0; } +///////////////////////////////////////////////////////////////////////////////////////// + +static int CompareFunc(const CRYPTO_PROVIDER *p1, const CRYPTO_PROVIDER *p2) +{ + return strcmp(p1->pszName, p2->pszName); +} + +static LIST arProviders(5, CompareFunc); + +static INT_PTR srvRegister(WPARAM wParam, LPARAM lParam) +{ + CRYPTO_PROVIDER *p = (CRYPTO_PROVIDER*)lParam; + if (p == NULL || p->dwSize != sizeof(CRYPTO_PROVIDER)) + return 1; + + CRYPTO_PROVIDER *pNew = new CRYPTO_PROVIDER(*p); + pNew->pszName = mir_strdup(p->pszName); + if (pNew->dwFlags & CPF_UNICODE) + pNew->ptszDescr = mir_u2t(TranslateW_LP(p->pwszDescr, wParam)); + else + pNew->ptszDescr = mir_a2t(TranslateA_LP(p->pszDescr, wParam)); + arProviders.insert(pNew); + return 0; +} + +///////////////////////////////////////////////////////////////////////////////////////// + int InitCrypt(void) { CreateServiceFunction(MS_DB_CRYPT_ENCODESTRING, EncodeString); CreateServiceFunction(MS_DB_CRYPT_DECODESTRING, DecodeString); + + CreateServiceFunction(MS_CRYPTO_REGISTER_ENGINE, srvRegister); return 0; } + +void UninitCrypt(void) +{ + for (int i = 0; i < arProviders.getCount(); i++) { + CRYPTO_PROVIDER *p = arProviders[i]; + mir_free(p->pszName); + mir_free(p->pszDescr); + delete p; + } + arDbPlugins.destroy(); +} -- cgit v1.2.3