/[hydra]/hydra/src/ssl.c
ViewVC logotype

Diff of /hydra/src/ssl.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by nmav, Sun Sep 22 15:10:36 2002 UTC revision 1.3 by nmav, Fri Sep 27 07:03:45 2002 UTC
# Line 27  Line 27 
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    
# Line 364  typedef struct { Line 368  typedef struct {
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  {  {
# Line 384  static int wrap_db_store(void *dbf, gnut Line 388  static int wrap_db_store(void *dbf, gnut
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  }  }
# Line 404  static gnutls_datum wrap_db_fetch(void * Line 415  static gnutls_datum wrap_db_fetch(void *
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    
# Line 430  int i; Line 456  int i;
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) {
# Line 437  int i; Line 467  int i;
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  }  }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26