27 |
#include <gnutls/gnutls.h> |
#include <gnutls/gnutls.h> |
28 |
#include <gcrypt.h> |
#include <gcrypt.h> |
29 |
|
|
30 |
|
#ifdef ENABLE_SMP |
31 |
|
pthread_mutex_t ssl_session_cache_lock = PTHREAD_MUTEX_INITIALIZER; |
32 |
|
#endif |
33 |
|
|
34 |
extern int ssl_session_cache; |
extern int ssl_session_cache; |
35 |
extern int ssl_session_timeout; |
extern int ssl_session_timeout; |
36 |
|
|
368 |
} CACHE; |
} CACHE; |
369 |
|
|
370 |
static CACHE *cache_db; |
static CACHE *cache_db; |
371 |
int cache_db_ptr = 0; |
static int cache_db_ptr; |
372 |
|
|
373 |
static void wrap_db_init(void) |
static void wrap_db_init(void) |
374 |
{ |
{ |
388 |
if (data.size > SESSION_DATA_SIZE) |
if (data.size > SESSION_DATA_SIZE) |
389 |
return -1; |
return -1; |
390 |
|
|
391 |
|
#ifdef ENABLE_SMP |
392 |
|
pthread_mutex_lock( &ssl_session_cache_lock); |
393 |
|
#endif |
394 |
|
|
395 |
memcpy(cache_db[cache_db_ptr].session_id, key.data, key.size); |
memcpy(cache_db[cache_db_ptr].session_id, key.data, key.size); |
396 |
cache_db[cache_db_ptr].session_id_size = key.size; |
cache_db[cache_db_ptr].session_id_size = key.size; |
397 |
|
|
398 |
memcpy(cache_db[cache_db_ptr].session_data, data.data, data.size); |
memcpy(cache_db[cache_db_ptr].session_data, data.data, data.size); |
399 |
cache_db[cache_db_ptr].session_data_size = data.size; |
cache_db[cache_db_ptr].session_data_size = data.size; |
400 |
|
|
401 |
cache_db_ptr++; |
++cache_db_ptr %= ssl_session_cache; |
402 |
cache_db_ptr %= ssl_session_cache; |
|
403 |
|
#ifdef ENABLE_SMP |
404 |
|
pthread_mutex_unlock( &ssl_session_cache_lock); |
405 |
|
#endif |
406 |
|
|
407 |
return 0; |
return 0; |
408 |
} |
} |
415 |
if (cache_db == NULL) |
if (cache_db == NULL) |
416 |
return res; |
return res; |
417 |
|
|
418 |
|
#ifdef ENABLE_SMP |
419 |
|
pthread_mutex_lock( &ssl_session_cache_lock); |
420 |
|
#endif |
421 |
|
|
422 |
for (i = 0; i < ssl_session_cache; i++) { |
for (i = 0; i < ssl_session_cache; i++) { |
423 |
if (key.size == cache_db[i].session_id_size && |
if (key.size == cache_db[i].session_id_size && |
424 |
memcmp(key.data, cache_db[i].session_id, key.size) == 0) { |
memcmp(key.data, cache_db[i].session_id, key.size) == 0) { |
425 |
|
|
|
|
|
426 |
res.size = cache_db[i].session_data_size; |
res.size = cache_db[i].session_data_size; |
427 |
|
|
428 |
res.data = malloc(res.size); |
res.data = malloc(res.size); |
429 |
if (res.data == NULL) |
if (res.data == NULL) { |
430 |
|
#ifdef ENABLE_SMP |
431 |
|
pthread_mutex_unlock( &ssl_session_cache_lock); |
432 |
|
#endif |
433 |
return res; |
return res; |
434 |
|
} |
435 |
|
|
436 |
memcpy(res.data, cache_db[i].session_data, res.size); |
memcpy(res.data, cache_db[i].session_data, res.size); |
437 |
|
|
438 |
|
#ifdef ENABLE_SMP |
439 |
|
pthread_mutex_unlock( &ssl_session_cache_lock); |
440 |
|
#endif |
441 |
return res; |
return res; |
442 |
} |
} |
443 |
} |
} |
444 |
|
|
445 |
|
#ifdef ENABLE_SMP |
446 |
|
pthread_mutex_unlock( &ssl_session_cache_lock); |
447 |
|
#endif |
448 |
|
|
449 |
return res; |
return res; |
450 |
} |
} |
451 |
|
|
456 |
if (cache_db == NULL) |
if (cache_db == NULL) |
457 |
return -1; |
return -1; |
458 |
|
|
459 |
|
#ifdef ENABLE_SMP |
460 |
|
pthread_mutex_lock( &ssl_session_cache_lock); |
461 |
|
#endif |
462 |
|
|
463 |
for (i = 0; i < ssl_session_cache; i++) { |
for (i = 0; i < ssl_session_cache; i++) { |
464 |
if (key.size == cache_db[i].session_id_size && |
if (key.size == cache_db[i].session_id_size && |
465 |
memcmp(key.data, cache_db[i].session_id, key.size) == 0) { |
memcmp(key.data, cache_db[i].session_id, key.size) == 0) { |
467 |
cache_db[i].session_id_size = 0; |
cache_db[i].session_id_size = 0; |
468 |
cache_db[i].session_data_size = 0; |
cache_db[i].session_data_size = 0; |
469 |
|
|
470 |
|
#ifdef ENABLE_SMP |
471 |
|
pthread_mutex_unlock( &ssl_session_cache_lock); |
472 |
|
#endif |
473 |
|
|
474 |
return 0; |
return 0; |
475 |
} |
} |
476 |
} |
} |
477 |
|
|
478 |
|
#ifdef ENABLE_SMP |
479 |
|
pthread_mutex_unlock( &ssl_session_cache_lock); |
480 |
|
#endif |
481 |
return -1; |
return -1; |
482 |
|
|
483 |
} |
} |