Changeset 886

Show
Ignore:
Timestamp:
08/09/07 11:21:47 (1 year ago)
Author:
alo
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • cherokee/trunk/ChangeLog

    r885 r886  
     12007-08-08  Alvaro Lopez Ortega  <alvaro@alobbs.com> 
     2 
     3        * cherokee/connection_info.c (cherokee_connection_info_list_thread): 
     4        Now, it includes polling connections as well. 
     5 
     6        * cherokee/connection_info.c (cherokee_connection_info_fill_up): 
     7        Bug fixed. It was failing to generate the IP property; the buffer 
     8        had length after the IP was added. 
     9 
     10        * cherokee/handler_server_info.c, cherokee/handler_server_info.h: 
     11        Added an additional configuration parameter "connection_details" 
     12        that, when activated, display data about all the connections that 
     13        the server is currently handling. 
     14 
     15        * cherokee/server.c (cherokee_server_del_connection): Integrated 
     16        with thread->ownership. Now it's safe (but slower) to use this 
     17        method. 
     18 
     19        * cherokee/socket.c (cherokee_socket_init_tls): Fail if the 
     20        internal initialization function fails. So far, it wasn't checking 
     21        the returning value. 
     22 
     23        * cherokee/virtual_server.h, cherokee/virtual_server.c, 
     24        cherokee/socket.c: Switched to use the new cherokee_avl_r_t. It 
     25        was using a avl_t plus a mutex; now it's slightly cleaner (and 
     26        should be faster as well). 
     27 
     28        * cherokee/avl_r.h, cherokee/avl_r.c: Added new class: Thread-safe 
     29        AVL. It uses cherokee_avl_t underneath. 
     30 
    1312007-08-07  Alvaro Lopez Ortega  <alvaro@alobbs.com> 
    232 
  • cherokee/trunk/cherokee/Makefile.am

    r884 r886  
    713713avl.h \ 
    714714avl.c \ 
     715avl_r.h \ 
     716avl_r.c \ 
    715717http.h \ 
    716718http.c \ 
     
    905907version.h \ 
    906908avl.h \ 
     909avl_r.h \ 
    907910buffer.h\ 
    908911fdpoll.h \ 
  • cherokee/trunk/cherokee/avl.h

    r852 r886  
    7070CHEROKEE_END_DECLS 
    7171 
    72 #endif /* CHEROKEE_TABLE_H */ 
     72#endif /* CHEROKEE_AVL_H */ 
  • cherokee/trunk/cherokee/connection_info.c

    r834 r886  
    143143        /* From 
    144144         */ 
    145         if (conn->socket.socket > 0) { 
     145        if (conn->socket.socket >= 0) { 
    146146                cherokee_buffer_ensure_size (&info->ip, CHE_INET_ADDRSTRLEN + 1); 
     147                memset (info->ip.buf, 0, info->ip.size); 
    147148                cherokee_socket_ntop (&conn->socket, info->ip.buf, info->ip.size - 1); 
     149                info->ip.len = strlen(info->ip.buf); 
    148150        } 
    149151 
     
    152154        if (! cherokee_buffer_is_empty (&conn->request_original)) { 
    153155                cherokee_buffer_add_buffer (&info->request, &conn->request_original); 
     156 
     157        } else if (! cherokee_buffer_is_empty (&conn->request)) { 
     158                cherokee_buffer_add_buffer (&info->request, &conn->request); 
    154159        }  
    155         else if (! cherokee_buffer_is_empty (&conn->request)) { 
    156                 cherokee_buffer_add_buffer (&info->request, &conn->request); 
    157         } 
    158160 
    159161        /* Transference 
     
    255257                cherokee_list_add (LIST(n), list); 
    256258        } 
     259 
     260        list_for_each (i, &thread->polling_list) { 
     261                CHEROKEE_NEW(n,connection_info); 
     262 
     263                cherokee_connection_info_fill_up (n, CONN(i)); 
     264                cherokee_list_add (LIST(n), list); 
     265        } 
     266 
    257267        ret = ret_ok; 
    258268        if (cherokee_list_empty (list)) 
  • cherokee/trunk/cherokee/handler_server_info.c

    r880 r886  
    3636#include "server-protected.h" 
    3737#include "plugin_loader.h" 
     38#include "connection_info.h" 
     39 
    3840 
    3941#define PAGE_HEADER                                                                                     \ 
     
    7678 
    7779#define LICENSE                                                                                         \ 
    78 "<p>Copyright (C) 2001, 2002, 2003, 2004, 2005 " AUTHOR "</p>"                                      CRLF\ 
     80"<p>Copyright (C) 2001 - 2007 " AUTHOR "</p>"                                                       CRLF\ 
    7981"<p>This program is free software; you can redistribute it and/or"                                  CRLF\ 
    8082"modify it under the terms of version 2 of the GNU General Public"                                  CRLF\ 
     
    122124                cherokee_module_props_init_base (MODULE_PROPS(n),  
    123125                                                 MODULE_PROPS_FREE(props_free));                 
    124                 n->just_about = false; 
     126                n->just_about         = false; 
     127                n->connection_details = false; 
     128 
    125129                *_props = MODULE_PROPS(n); 
    126130        } 
     
    133137                if (equal_buf_str (&subconf->key, "just_about")) { 
    134138                        props->just_about = atoi(subconf->val.buf); 
     139                } else if (equal_buf_str (&subconf->key, "connection_details")) { 
     140                        props->connection_details = atoi(subconf->val.buf); 
    135141                } else { 
    136142                        PRINT_MSG ("ERROR: Handler file: Unknown key: '%s'\n", subconf->key.buf); 
     
    156162{ 
    157163        cherokee_buffer_add_va (buf, "<tr><td class=\"e\">%s</td><td class=\"v\">%s</td></tr>"CRLF, name, value); 
     164} 
     165 
     166static void 
     167table_add_row_buf (cherokee_buffer_t *buf, const char *name, cherokee_buffer_t *value) 
     168{ 
     169        char *cvalue = (value->len > 0) ? value->buf : ""; 
     170        table_add_row_str (buf, name, cvalue); 
    158171} 
    159172 
     
    255268{ 
    256269        cuint_t conns_num = 0; 
    257         cuint_t active = 0; 
    258         cuint_t reusable = 0; 
     270        cuint_t active    = 0; 
     271        cuint_t reusable = 0; 
    259272         
    260273        cherokee_server_get_conns_num (srv, &conns_num); 
     
    341354                return; 
    342355 
    343         table_add_row_str (buf, "Default icon", (srv->icons->default_icon.len > 0) ? srv->icons->default_icon.buf : ""); 
    344         table_add_row_str (buf, "Directory icon", (srv->icons->directory_icon.len > 0) ? srv->icons->directory_icon.buf : ""); 
    345         table_add_row_str (buf, "Parent directory icon", (srv->icons->parentdir_icon.len > 0) ? srv->icons->parentdir_icon.buf : ""); 
    346 
     356        table_add_row_buf (buf, "Default icon", &srv->icons->default_icon); 
     357        table_add_row_buf (buf, "Directory icon", &srv->icons->directory_icon); 
     358        table_add_row_buf (buf, "Parent directory icon", &srv->icons->parentdir_icon); 
     359
     360 
     361 
     362static void 
     363build_connection_details_content (cherokee_buffer_t *buf, cherokee_list_t *infos)  
     364
     365        char tmp[8]; 
     366        cherokee_list_t *i, *j; 
     367 
     368        list_for_each_safe (i, j, infos) { 
     369                cherokee_connection_info_t *info = CONN_INFO(i); 
     370 
     371                table_add_row_buf (buf, "ID",            &info->id); 
     372                table_add_row_buf (buf, "Remote IP",     &info->ip); 
     373                table_add_row_buf (buf, "Phase",         &info->phase); 
     374                table_add_row_buf (buf, "Request",       &info->request); 
     375                table_add_row_buf (buf, "Handler",       &info->handler); 
     376 
     377                cherokee_strfsize (atoi(info->rx.buf), tmp); 
     378                table_add_row_str (buf, "Info sent", tmp); 
     379 
     380                cherokee_strfsize (atoi(info->tx.buf), tmp); 
     381                table_add_row_str (buf, "Info received", tmp); 
     382 
     383                if (! cherokee_buffer_is_empty (&info->total_size)) { 
     384                        cherokee_strfsize (atoi(info->total_size.buf), tmp); 
     385                        table_add_row_str (buf, "Total Size", tmp); 
     386                } 
     387 
     388                if (! cherokee_buffer_is_empty (&info->percent)) { 
     389                        cherokee_buffer_add_str (&info->percent, "%"); 
     390                        table_add_row_buf (buf, "Percentage", &info->percent); 
     391                } 
     392 
     393                if (! cherokee_buffer_is_empty (&info->icon)) 
     394                        table_add_row_buf (buf, "Icon", &info->icon); 
     395 
     396                table_add_row_str (buf, "", ""); 
     397                cherokee_connection_info_free (info); 
     398        } 
     399
     400 
    347401 
    348402static void 
    349403server_info_build_page (cherokee_handler_server_info_t *hdl) 
    350404{ 
     405        ret_t              ret; 
    351406        cherokee_server_t *srv; 
    352407        cherokee_buffer_t *buf; 
     
    387442                cherokee_buffer_clean (&table); 
    388443                build_modules_table_content (&table, srv); 
    389                 server_info_add_table (buf, "Modules", "modules", &table); 
     444                server_info_add_table (buf, "Loaded Modules", "modules", &table); 
    390445 
    391446                /* Icons 
     
    394449                build_icons_table_content (&table, srv); 
    395450                server_info_add_table (buf, "Icons", "icons", &table); 
    396  
    397                 cherokee_buffer_mrproper (&table); 
    398         } 
     451        } 
     452 
     453        /* Print all the current connections details 
     454         */ 
     455        if  (HDL_SRV_INFO_PROPS(hdl)->connection_details) { 
     456                cherokee_list_t infos; 
     457                
     458                INIT_LIST_HEAD (&infos); 
     459 
     460                ret = cherokee_connection_info_list_server (&infos, HANDLER_SRV(hdl), HANDLER(hdl)); 
     461                if (ret == ret_ok) {                             
     462                        cherokee_buffer_clean (&table); 
     463                        build_connection_details_content (&table, &infos); 
     464                        server_info_add_table (buf, "Current connections details", "connection_details", &table);                        
     465                } 
     466        } 
     467 
    399468 
    400469        /* Add the page ending 
    401470         */ 
     471        cherokee_buffer_mrproper (&table); 
    402472        cherokee_buffer_add_str (buf, PAGE_FOOT); 
    403473 
  • cherokee/trunk/cherokee/handler_server_info.h

    r597 r886  
    3838        cherokee_module_props_t  base; 
    3939        cherokee_boolean_t       just_about; 
     40        cherokee_boolean_t       connection_details; 
    4041} cherokee_handler_server_info_props_t; 
    4142 
  • cherokee/trunk/cherokee/server.c

    r883 r886  
    19241924 
    19251925        list_for_each (t, &srv->thread_list) { 
     1926                cherokee_thread_t *thread = THREAD(t); 
     1927 
     1928                CHEROKEE_MUTEX_LOCK (&thread->ownership); 
     1929 
    19261930                list_for_each (c, &THREAD(t)->active_list) { 
    19271931                        cherokee_connection_t *conn = CONN(c); 
     
    19321936                                { 
    19331937                                        conn->phase = phase_shutdown; 
     1938                                        CHEROKEE_MUTEX_UNLOCK (&thread->ownership); 
    19341939                                        return ret_ok; 
    19351940                                } 
    19361941                        } 
    19371942                } 
     1943                CHEROKEE_MUTEX_UNLOCK (&thread->ownership); 
    19381944        } 
    19391945 
  • cherokee/trunk/cherokee/socket.c

    r883 r886  
    205205{ 
    206206        ret_t                      ret; 
    207         cherokee_avl_          *cache; 
     207        cherokee_avl_r_t          *cache; 
    208208        cherokee_virtual_server_t *vserver; 
    209209        gnutls_datum               session; 
     
    233233        /* Get (and remove) the object from the session cache 
    234234         */ 
    235         CHEROKEE_MUTEX_LOCK (&vserver->session_cache_mutex); 
    236         ret = cherokee_avl_get (cache, &strkey, (void **)&session); 
    237         CHEROKEE_MUTEX_UNLOCK (&vserver->session_cache_mutex); 
    238  
     235        ret = cherokee_avl_r_get (cache, &strkey, (void **)&session); 
    239236        if (ret == ret_ok) { 
    240237                TRACE (ENTRIES",ssl", "fd=%d key=%s - found=%p\n", socket->socket, strkey.buf, session); 
     
    254251{ 
    255252        ret_t                      ret; 
    256         cherokee_avl_          *cache; 
     253        cherokee_avl_r_t          *cache; 
    257254        cherokee_virtual_server_t *vserver; 
    258255        cherokee_buffer_t          faked; 
     
    282279        /* Remove the entry 
    283280         */ 
    284         CHEROKEE_MUTEX_LOCK (&vserver->session_cache_mutex); 
    285         ret = cherokee_avl_del (cache, &strkey, (void **)&n); 
    286         CHEROKEE_MUTEX_UNLOCK (&vserver->session_cache_mutex); 
    287  
     281        ret = cherokee_avl_r_del (cache, &strkey, (void **)&n); 
    288282        if ((ret == ret_ok) && (n != NULL)) { 
    289283                TRACE (ENTRIES",ssl", "fd=%d key=%s - found=%p ret=%d\n", socket->socket, strkey.buf, n, ret); 
     
    303297{ 
    304298        ret_t                      ret; 
    305         cherokee_avl_          *cache; 
     299        cherokee_avl_r_t          *cache; 
    306300        cherokee_virtual_server_t *vserver; 
    307301        cherokee_buffer_t          faked; 
    308         cherokee_buffer_t          strkey = CHEROKEE_BUF_INIT; 
     302        cherokee_buffer_t          strkey = CHEROKEE_BUF_INIT; 
    309303        cherokee_socket_t         *socket = SOCKET(ptr); 
    310304 
     
    330324        /* Add the copy to the table 
    331325         */ 
    332         CHEROKEE_MUTEX_LOCK (&vserver->session_cache_mutex); 
    333         ret = cherokee_avl_add (cache, &strkey, &data); 
    334         CHEROKEE_MUTEX_UNLOCK (&vserver->session_cache_mutex); 
     326        ret = cherokee_avl_r_add (cache, &strkey, &data); 
    335327 
    336328        TRACE (ENTRIES",ssl", "fd=%d key=%s - added=%p ret=%d\n", socket->socket, strkey.buf, &data, ret); 
     
    391383        gnutls_dh_set_prime_bits (socket->session, 1024); 
    392384 
    393         /* Set the session DB manage functions 
     385        /* Set the session DB management functions 
    394386         */ 
    395387        gnutls_db_set_retrieve_function (socket->session, db_retrieve); 
     
    440432{ 
    441433#ifdef HAVE_TLS 
    442         int re; 
     434        int   re; 
     435        ret_t ret; 
    443436         
    444437        socket->is_tls = TLS; 
    445438 
    446439        if (socket->initialized == false) { 
    447                 initialize_tls_session (socket, vserver); 
     440                ret = initialize_tls_session (socket, vserver); 
     441                if (ret != ret_ok) return ret; 
     442 
    448443                socket->initialized = true; 
    449444        } 
  • cherokee/trunk/cherokee/virtual_server.c

    r881 r886  
    7878 
    7979#ifdef HAVE_TLS 
    80         ret = cherokee_avl_init (&n->session_cache); 
     80        ret = cherokee_avl_r_init (&n->session_cache); 
    8181        if (unlikely(ret < ret_ok)) 
    8282                return ret; 
    83  
    84         CHEROKEE_MUTEX_INIT(&n->session_cache_mutex, NULL); 
    8583 
    8684# ifdef HAVE_GNUTLS 
     
    132130 
    133131#ifdef HAVE_TLS 
    134         cherokee_avl_mrproper (&vserver->session_cache, NULL); //FIXIT 
    135         CHEROKEE_MUTEX_DESTROY (&vserver->session_cache_mutex); 
     132        cherokee_avl_r_mrproper (&vserver->session_cache, NULL); //FIXIT 
    136133 
    137134# ifdef HAVE_GNUTLS 
  • cherokee/trunk/cherokee/virtual_server.h

    r881 r886  
    3939 
    4040#include "avl.h" 
     41#include "avl_r.h" 
    4142#include "list.h" 
    4243#include "handler.h" 
     
    8182 
    8283#ifdef HAVE_TLS 
    83         cherokee_avl_t               session_cache; 
    84         CHEROKEE_MUTEX_T            (session_cache_mutex); 
     84        cherokee_avl_r_t             session_cache; 
    8585 
    8686# ifdef HAVE_GNUTLS