mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-07 11:20:16 -04:00
http: do not use local settings for Date header
This commit is contained in:
parent
23f9a20e8d
commit
db60ade81d
@ -145,6 +145,34 @@ evutil_usleep_(const struct timeval *tv)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
evutil_date_rfc1123(char *date, const size_t datelen, struct tm *cur_p) {
|
||||||
|
static const char *DAYS[] =
|
||||||
|
{ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
|
||||||
|
static const char *MONTHS[] =
|
||||||
|
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
|
||||||
|
|
||||||
|
time_t t = time(NULL);
|
||||||
|
|
||||||
|
/* If `cur_p` is null, set system's current time. */
|
||||||
|
if (cur_p == NULL) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
cur_p = gmtime(&t);
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
struct tm cur;
|
||||||
|
gmtime_r(&t, &cur);
|
||||||
|
cur_p = &cur;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return evutil_snprintf(
|
||||||
|
date, datelen, "%s, %02d %s %4d %02d:%02d:%02d GMT",
|
||||||
|
DAYS[cur_p->tm_wday], cur_p->tm_mday, MONTHS[cur_p->tm_mon],
|
||||||
|
1900+cur_p->tm_year, cur_p->tm_hour, cur_p->tm_min, cur_p->tm_sec);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This function assumes it's called repeatedly with a
|
This function assumes it's called repeatedly with a
|
||||||
not-actually-so-monotonic time source whose outputs are in 'tv'. It
|
not-actually-so-monotonic time source whose outputs are in 'tv'. It
|
||||||
|
15
http.c
15
http.c
@ -80,7 +80,6 @@
|
|||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#endif
|
#endif
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <time.h>
|
|
||||||
#ifdef EVENT__HAVE_UNISTD_H
|
#ifdef EVENT__HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
@ -491,19 +490,7 @@ evhttp_maybe_add_date_header(struct evkeyvalq *headers)
|
|||||||
{
|
{
|
||||||
if (evhttp_find_header(headers, "Date") == NULL) {
|
if (evhttp_find_header(headers, "Date") == NULL) {
|
||||||
char date[50];
|
char date[50];
|
||||||
#ifndef _WIN32
|
if (sizeof(date) - evutil_date_rfc1123(date, sizeof(date), NULL) > 0) {
|
||||||
struct tm cur;
|
|
||||||
#endif
|
|
||||||
struct tm *cur_p;
|
|
||||||
time_t t = time(NULL);
|
|
||||||
#ifdef _WIN32
|
|
||||||
cur_p = gmtime(&t);
|
|
||||||
#else
|
|
||||||
gmtime_r(&t, &cur);
|
|
||||||
cur_p = &cur;
|
|
||||||
#endif
|
|
||||||
if (strftime(date, sizeof(date),
|
|
||||||
"%a, %d %b %Y %H:%M:%S GMT", cur_p) != 0) {
|
|
||||||
evhttp_add_header(headers, "Date", date);
|
evhttp_add_header(headers, "Date", date);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,6 +77,8 @@ extern "C" {
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
/* Some openbsd autoconf versions get the name of this macro wrong. */
|
/* Some openbsd autoconf versions get the name of this macro wrong. */
|
||||||
#if defined(EVENT__SIZEOF_VOID__) && !defined(EVENT__SIZEOF_VOID_P)
|
#if defined(EVENT__SIZEOF_VOID__) && !defined(EVENT__SIZEOF_VOID_P)
|
||||||
#define EVENT__SIZEOF_VOID_P EVENT__SIZEOF_VOID__
|
#define EVENT__SIZEOF_VOID_P EVENT__SIZEOF_VOID__
|
||||||
@ -331,6 +333,15 @@ struct evutil_monotonic_timer
|
|||||||
#define EV_MONOT_PRECISE 1
|
#define EV_MONOT_PRECISE 1
|
||||||
#define EV_MONOT_FALLBACK 2
|
#define EV_MONOT_FALLBACK 2
|
||||||
|
|
||||||
|
/** Format a date string using RFC 1123 format (used in HTTP).
|
||||||
|
* If `cur_p` is NULL, current system's time will be used.
|
||||||
|
* The number of characters written will be returned.
|
||||||
|
* One should check if the return value is smaller than `datelen` to check if
|
||||||
|
* the result is truncated or not.
|
||||||
|
*/
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
|
int evutil_date_rfc1123(char *date, const size_t datelen, struct tm *cur_p);
|
||||||
|
|
||||||
/** Allocate a new struct evutil_monotonic_timer for use with the
|
/** Allocate a new struct evutil_monotonic_timer for use with the
|
||||||
* evutil_configure_monotonic_time() and evutil_gettime_monotonic()
|
* evutil_configure_monotonic_time() and evutil_gettime_monotonic()
|
||||||
* functions. You must configure the timer with
|
* functions. You must configure the timer with
|
||||||
|
Loading…
x
Reference in New Issue
Block a user