summaryrefslogtreecommitdiff
path: root/plugins/CryptoPP/src/cpp_cntx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/CryptoPP/src/cpp_cntx.cpp')
-rw-r--r--plugins/CryptoPP/src/cpp_cntx.cpp104
1 files changed, 13 insertions, 91 deletions
diff --git a/plugins/CryptoPP/src/cpp_cntx.cpp b/plugins/CryptoPP/src/cpp_cntx.cpp
index 72c35dcc96..c4d2c46338 100644
--- a/plugins/CryptoPP/src/cpp_cntx.cpp
+++ b/plugins/CryptoPP/src/cpp_cntx.cpp
@@ -1,68 +1,26 @@
#include "commonheaders.h"
-
-list<pCNTX> CL; // CL.size() CL.empty()
-
-HANDLE thread_timeout = 0;
-
-unsigned __stdcall sttTimeoutThread(LPVOID);
-
-
// get context data on context id
pCNTX get_context_on_id(HANDLE context) {
-
- if ( !thread_timeout ) {
- unsigned int tID;
- thread_timeout = (HANDLE) _beginthreadex(NULL, 0, sttTimeoutThread, NULL, 0, &tID);
- }
-
- if ( context ) {
- pCNTX cntx = (pCNTX) context;
- if ( cntx->header == HEADER && cntx->footer == FOOTER )
- return cntx;
-#if defined(_DEBUG) || defined(NETLIB_LOG)
- else
- Sent_NetLog("get_context_on_id: corrupted context %08X", cntx);
-#endif
- }
- return NULL;
-}
-
-/*
-pCNTX get_context_on_id(HANDLE context) {
- return get_context_on_id((int)context);
+ if ( context ) {
+ pCNTX cntx = (pCNTX) context;
+ if ( cntx->header == HEADER && cntx->footer == FOOTER )
+ return cntx;
+
+ #if defined(_DEBUG) || defined(NETLIB_LOG)
+ Sent_NetLog("get_context_on_id: corrupted context %08X", cntx);
+ #endif
+ }
+ return NULL;
}
-*/
// create context, return context id
HANDLE __cdecl cpp_create_context(int mode) {
-
- list<pCNTX>::iterator i;
- pCNTX cntx = NULL;
-
- EnterCriticalSection(&localContextMutex);
-
- if ( !CL.empty() ) {
- for(i=CL.begin(); i!=CL.end(); ++i) { // ищем пустой
- if ( (*i)->header==EMPTYH && (*i)->footer==EMPTYH ) {
- cntx = (pCNTX) *i;
- break;
- }
- }
- }
-
- if ( !cntx ) { // не нашли - создаем новый
- cntx = (pCNTX) malloc(sizeof(CNTX));
- CL.push_back(cntx); // добавили в конец списка
- }
-
+ pCNTX cntx = (pCNTX) malloc(sizeof(CNTX));
memset(cntx,0,sizeof(CNTX)); // очищаем выделенный блок
cntx->header = HEADER;
cntx->footer = FOOTER;
cntx->mode = mode;
-
- LeaveCriticalSection(&localContextMutex);
-
return (HANDLE)cntx;
}
@@ -72,7 +30,8 @@ void __cdecl cpp_delete_context(HANDLE context) {
pCNTX tmp = get_context_on_id(context);
if (tmp) { // помечаем на удаление
- tmp->deleted = gettime()+10; // будет удален через 10 секунд
+ cpp_free_keys(tmp);
+ free(tmp);
}
}
@@ -144,41 +103,4 @@ void cpp_free_keys(pCNTX ptr) {
}
}
-
-// search not established RSA/AES contexts && clear deleted contexts
-unsigned __stdcall sttTimeoutThread( LPVOID ) {
-
- list<pCNTX>::iterator i;
- while(1) {
- Sleep( 1000 ); // раз в секунду
- if ( CL.empty() ) continue;
- u_int time = gettime();
- // пробегаем все контексты
- EnterCriticalSection(&localContextMutex);
- for(i=CL.begin(); i!=CL.end(); ++i) {
- pCNTX tmp = *i;
- if ( tmp->header!=HEADER || tmp->footer!=FOOTER ) continue;
- // пропускаем приватные ключи
- if ( tmp->mode&MODE_PRIV_KEY ) continue;
- else
- if ( tmp->deleted && tmp->deleted < time ) {
- // удалить помеченный для удаления контекст
- cpp_free_keys(tmp);
- tmp->deleted = 0;
- tmp->header = tmp->footer = EMPTYH;
- }
- else
- if ( tmp->mode&MODE_RSA && tmp->pdata ) {
- // проверяем не протухло ли соединение
- pRSADATA p = (pRSADATA) tmp->pdata;
- if ( p->time && p->time < time ) {
- rsa_timeout((HANDLE)tmp,p);
- }
- }
- } // for
- LeaveCriticalSection(&localContextMutex);
- } //while
-}
-
-
// EOF