Changeset 946

Show
Ignore:
Timestamp:
11/03/07 12:53:18 (1 year ago)
Author:
adefacc
Message:

forced strict RFC-1123 date-time format in server time string (fix issue 24)

Files:

Legend:

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

    r945 r946  
     12007-11-03  A.D.F  <adefacc@tin.it> 
     2 
     3        * cherokee/server-protected.h, cherokee/server.c, 
     4          cherokee/thread.h, cherokee/thread.c, 
     5          cherokee/connection.c, 
     6          cherokee/logger_ncsa.c, cherokee/logger_w3c.c 
     7          - added RFC-1123 date-time format to try to fix issue 24 
     8            (http://code.google.com/p/cherokee/issues/detail?id=24); 
     9            now there are two distinct times: local and GMT time, 
     10            right now only RFC-1123 date-time string is generated and 
     11            stored into bogo_now_strgmt;  should a local time string 
     12            be useful, then it could be easily added; things changed: 
     13            - added new fields to cherokee_server struct: 
     14                - bogo_now_tzloc_sign; 
     15                - bogo_now_tzloc_offset; 
     16                - bogo_now_tmloc; 
     17                - bogo_now_tmgmt; 
     18                - bogo_now_strgmt; 
     19            - removed a few fields from cherokee_server struct: 
     20                - bogo_now_tm; 
     21                - bogo_now_string; 
     22            - server.c -> update_bogo_now: changed; 
     23            - connection.c, use new date-time string in RFC-1123 format; 
     24            - logger*.c use the new localtime variable names 
     25              (no functional change). 
     26 
    1272007-11-02  Alvaro Lopez Ortega  <alvaro@alobbs.com> 
    228 
  • cherokee/trunk/cherokee/connection.c

    r911 r946  
    476476         */ 
    477477        cherokee_buffer_add_str (buffer, "Date: "); 
    478         cherokee_buffer_add_buffer (buffer, &CONN_SRV(conn)->bogo_now_string); 
     478        cherokee_buffer_add_buffer (buffer, &CONN_SRV(conn)->bogo_now_strgmt); 
    479479        cherokee_buffer_add_str (buffer, CRLF); 
    480480 
  • cherokee/trunk/cherokee/logger_ncsa.c

    r638 r946  
    211211 
    212212                logger->now_time = CONN_THREAD(cnt)->bogo_now; 
    213                 pnow_tm = &CONN_THREAD(cnt)->bogo_now_tm
     213                pnow_tm = &CONN_THREAD(cnt)->bogo_now_tmloc
    214214                cherokee_buffer_clean (&logger->now_dtm); 
    215215                cherokee_buffer_add_va (&logger->now_dtm,  
  • cherokee/trunk/cherokee/logger_w3c.c

    r638 r946  
    188188 
    189189                logger->now_time = CONN_THREAD(cnt)->bogo_now; 
    190                 pnow_tm = &CONN_THREAD(cnt)->bogo_now_tm
     190                pnow_tm = &CONN_THREAD(cnt)->bogo_now_tmloc
    191191 
    192192                cherokee_buffer_clean (&logger->now_buf); 
     
    199199 
    200200        if (unlikely (! logger->header_added)) { 
    201                 struct tm *pnow_tm = &CONN_THREAD(cnt)->bogo_now_tm
     201                struct tm *pnow_tm = &CONN_THREAD(cnt)->bogo_now_tmloc
    202202 
    203203                cherokee_buffer_add_va (log, 
     
    284284 
    285285                logger->now_time = CONN_THREAD(cnt)->bogo_now; 
    286                 pnow_tm = &CONN_THREAD(cnt)->bogo_now_tm
     286                pnow_tm = &CONN_THREAD(cnt)->bogo_now_tmloc
    287287 
    288288                cherokee_buffer_clean (&logger->now_buf); 
     
    295295 
    296296        if (unlikely (! logger->header_added)) { 
    297                 struct tm *pnow_tm = &CONN_THREAD(cnt)->bogo_now_tm
     297                struct tm *pnow_tm = &CONN_THREAD(cnt)->bogo_now_tmloc
    298298 
    299299                cherokee_buffer_add_va (log, 
  • cherokee/trunk/cherokee/server-protected.h

    r852 r946  
    6464        time_t                       start_time; 
    6565        time_t                       bogo_now; 
    66         struct tm                    bogo_now_tm; 
    67         cherokee_buffer_t            bogo_now_string; 
     66        struct tm                    bogo_now_tmloc; 
     67        struct tm                    bogo_now_tmgmt; 
     68        int                          bogo_now_tzloc_sign; 
     69        cuint_t                      bogo_now_tzloc_offset; 
     70        cherokee_buffer_t            bogo_now_strgmt; 
    6871        CHEROKEE_RWLOCK_T           (bogo_now_mutex); 
    6972 
  • cherokee/trunk/cherokee/server.c

    r941 r946  
    9999{ 
    100100        ret_t ret; 
    101         CHEROKEE_NEW_STRUCT(n, server); 
     101        CHEROKEE_CNEW_STRUCT(1, n, server); 
    102102 
    103103        cherokee_trace_init (); 
     
    178178         */ 
    179179        n->bogo_now        = 0; 
     180        n->bogo_now_tzloc_sign = '+'; 
     181        n->bogo_now_tzloc_offset = 0; 
    180182        CHEROKEE_RWLOCK_INIT (&n->bogo_now_mutex, NULL); 
    181183 
    182184        CHEROKEE_RWLOCK_WRITER (&n->bogo_now_mutex); 
    183         cherokee_buffer_init (&n->bogo_now_string); 
    184         cherokee_buffer_ensure_size (&n->bogo_now_string,  
    185                                      sizeof("Sun, 01 Sep 2006 00:00:00 GMT+00")); 
     185        cherokee_buffer_init (&n->bogo_now_strgmt); 
     186        cherokee_buffer_ensure_size (&n->bogo_now_strgmt, DTM_SIZE_GMTTM_STR); 
    186187        CHEROKEE_RWLOCK_UNLOCK (&n->bogo_now_mutex); 
    187188 
     
    367368        srv->vserver_default = NULL; 
    368369 
    369         cherokee_buffer_mrproper (&srv->bogo_now_string); 
     370        cherokee_buffer_mrproper (&srv->bogo_now_strgmt); 
    370371        cherokee_buffer_mrproper (&srv->timeout_header); 
    371372 
     
    12641265update_bogo_now (cherokee_server_t *srv) 
    12651266{ 
    1266         char    sign; 
    1267         cuint_t offset; 
    12681267        time_t  newtime; 
    12691268 
     
    12741273                return; 
    12751274 
    1276         /* Update the internal variable 
     1275        /* Update internal variables 
    12771276         */ 
    12781277        CHEROKEE_RWLOCK_WRITER (&srv->bogo_now_mutex);      /* 1.- lock as writer */ 
     1278 
     1279        srv->bogo_now = newtime; 
     1280 
     1281        /* Convert time to both GMT and local time struct 
     1282         */ 
     1283        cherokee_gmtime    (&newtime, &srv->bogo_now_tmgmt); 
     1284        cherokee_localtime (&newtime, &srv->bogo_now_tmloc); 
     1285 
     1286#ifdef HAVE_STRUCT_TM_GMTOFF 
     1287        srv->bogo_now_tzloc_sign = srv->bogo_now_tmloc.tm_gmtoff < 0 ? '-' : '+'; 
     1288        srv->bogo_now_tzloc_offset = abs(srv->bogo_now_tmloc.tm_gmtoff / 3600); 
     1289#else 
     1290        srv->bogo_now_tzloc_sign = timezone < 0 ? '-' : '+'; 
     1291        srv->bogo_now_tzloc_offset = abs(timezone / 3600); 
     1292#endif 
    12791293         
    1280         srv->bogo_now = newtime; 
    1281         cherokee_localtime (&newtime, &srv->bogo_now_tm); 
    1282  
    1283 #ifdef HAVE_STRUCT_TM_GMTOFF 
    1284         sign = srv->bogo_now_tm.tm_gmtoff < 0 ? '-' : '+'; 
    1285         offset = abs(srv->bogo_now_tm.tm_gmtoff / 3600); 
    1286 #else 
    1287         sign = timezone < 0 ? '-' : '+'; 
    1288         offset = abs(timezone / 3600); 
    1289 #endif 
    1290          
    1291         cherokee_buffer_clean (&srv->bogo_now_string); 
    1292         cherokee_buffer_add_va_fixed ( 
    1293                 &srv->bogo_now_string, 
    1294                 "%s, %02d %s %d %02d:%02d:%02d GMT%c%d", 
    1295                 cherokee_dtm_wday_name(srv->bogo_now_tm.tm_wday), 
    1296                 srv->bogo_now_tm.tm_mday, 
    1297                 cherokee_dtm_month_name(srv->bogo_now_tm.tm_mon), 
    1298                 srv->bogo_now_tm.tm_year + 1900, 
    1299                 srv->bogo_now_tm.tm_hour, 
    1300                 srv->bogo_now_tm.tm_min, 
    1301                 srv->bogo_now_tm.tm_sec, 
    1302                 sign, offset); 
     1294        cherokee_buffer_clean (&srv->bogo_now_strgmt); 
     1295        { 
     1296        size_t  szlen = 0; 
     1297        char bufstr[DTM_SIZE_GMTTM_STR + 2]; 
     1298 
     1299        szlen = cherokee_dtm_gmttm2str (bufstr, sizeof(bufstr), 
     1300                                        &srv->bogo_now_tmgmt); 
     1301        cherokee_buffer_add (&srv->bogo_now_strgmt, bufstr, szlen); 
     1302        } 
     1303 
     1304        /* NOTE: a local time string should have {+-}timezone_offset (hours) 
     1305         *       added to date-time GMT string. 
     1306         */ 
    13031307 
    13041308        CHEROKEE_RWLOCK_UNLOCK (&srv->bogo_now_mutex);      /* 2.- release */ 
  • cherokee/trunk/cherokee/thread.c

    r910 r946  
    8989        /* Update struct tm 
    9090         */ 
    91         memcpy (&thd->bogo_now_tm, &srv->bogo_now_tm, sizeof(struct tm)); 
     91        memcpy (&thd->bogo_now_tmgmt, &srv->bogo_now_tmgmt, sizeof(struct tm)); 
     92        memcpy (&thd->bogo_now_tmloc, &srv->bogo_now_tmloc, sizeof(struct tm)); 
    9293 
    9394        /* Update cherokee_buffer_t 
    9495         */ 
    95         cherokee_buffer_clean (&thd->bogo_now_string); 
    96         cherokee_buffer_add_buffer (&thd->bogo_now_string, &srv->bogo_now_string); 
     96        cherokee_buffer_clean (&thd->bogo_now_strgmt); 
     97        cherokee_buffer_add_buffer (&thd->bogo_now_strgmt, &srv->bogo_now_strgmt); 
    9798 
    9899} 
     
    256257         */ 
    257258        n->bogo_now = 0; 
    258         memset (&n->bogo_now_tm, 0, sizeof (struct tm)); 
    259         cherokee_buffer_init (&n->bogo_now_string); 
     259        memset (&n->bogo_now_tmgmt, 0, sizeof (struct tm)); 
     260        cherokee_buffer_init (&n->bogo_now_strgmt); 
    260261 
    261262        /* Temporary buffer used by utility functions 
     
    13551356        cherokee_list_t *i, *tmp; 
    13561357 
    1357         cherokee_buffer_mrproper (&thd->bogo_now_string); 
     1358        cherokee_buffer_mrproper (&thd->bogo_now_strgmt); 
    13581359        cherokee_buffer_mrproper (&thd->tmp_buf1); 
    13591360        cherokee_buffer_mrproper (&thd->tmp_buf2); 
  • cherokee/trunk/cherokee/thread.h

    r852 r946  
    6565 
    6666        time_t                  bogo_now; 
    67         struct tm               bogo_now_tm; 
    68         cherokee_buffer_t       bogo_now_string; 
     67        struct tm               bogo_now_tmgmt; 
     68        struct tm               bogo_now_tmloc; 
     69        cherokee_buffer_t       bogo_now_strgmt; 
    6970 
    7071        cherokee_buffer_t       tmp_buf1;