Commit e0abf3ac919ffecd891d7b7d3a4dd1c79646077b

Authored by Georg Hopp
1 parent f93d09b5

now every date header is formatted in GMT. Commment: We still have a very weak Etag implementation.

@@ -23,10 +23,13 @@ @@ -23,10 +23,13 @@
23 #ifndef __UTILS_HTTP_H__ 23 #ifndef __UTILS_HTTP_H__
24 #define __UTILS_HTTP_H__ 24 #define __UTILS_HTTP_H__
25 25
  26 +#include <time.h>
26 #include <sys/types.h> 27 #include <sys/types.h>
27 28
28 #include "http/message.h" 29 #include "http/message.h"
29 30
  31 +size_t rfc1123Gmt(char *, size_t, const time_t *);
  32 +size_t rfc1123GmtNow(char *, size_t);
30 char isHttpVersion(const char *, size_t); 33 char isHttpVersion(const char *, size_t);
31 HttpMessage httpGetMessage( 34 HttpMessage httpGetMessage(
32 const char *, size_t, 35 const char *, size_t,
@@ -43,6 +43,7 @@ @@ -43,6 +43,7 @@
43 43
44 #include "utils/mime_type.h" 44 #include "utils/mime_type.h"
45 #include "utils/hash.h" 45 #include "utils/hash.h"
  46 +#include "utils/http.h"
46 47
47 48
48 static 49 static
@@ -74,8 +75,10 @@ assetCtor(void * _this, va_list * params) @@ -74,8 +75,10 @@ assetCtor(void * _this, va_list * params)
74 75
75 tmp = localtime(&(st.st_mtime)); 76 tmp = localtime(&(st.st_mtime));
76 this->netag = strftime(this->etag, sizeof(this->etag), "%s", tmp); 77 this->netag = strftime(this->etag, sizeof(this->etag), "%s", tmp);
77 - this->nmtime = strftime(  
78 - this->mtime, sizeof(this->mtime), "%a, %d %b %Y %T %Z", tmp); 78 + this->nmtime = rfc1123Gmt(
  79 + this->mtime,
  80 + sizeof(this->mtime),
  81 + &(st.st_mtime));
79 82
80 this->size = st.st_size; 83 this->size = st.st_size;
81 84
@@ -20,7 +20,6 @@ @@ -20,7 +20,6 @@
20 * along with this program. If not, see <http://www.gnu.org/licenses/>. 20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 */ 21 */
22 22
23 -#include <time.h>  
24 #include <sys/types.h> 23 #include <sys/types.h>
25 24
26 #include "class.h" 25 #include "class.h"
@@ -29,23 +28,17 @@ @@ -29,23 +28,17 @@
29 #include "http/header.h" 28 #include "http/header.h"
30 #include "http/response.h" 29 #include "http/response.h"
31 30
32 -#include "utils/memory.h"  
33 #include "hash.h" 31 #include "hash.h"
34 32
35 -static const char *DAY_NAMES[] = {  
36 - "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };  
37 -static const char *MONTH_NAMES[] = {  
38 - "Jan", "Feb", "Mar", "Apr", "May", "Jun",  
39 - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; 33 +#include "utils/memory.h"
  34 +#include "utils/http.h"
40 35
41 36
42 void 37 void
43 httpWorkerAddCommonHeader(HttpMessage request, HttpMessage response) 38 httpWorkerAddCommonHeader(HttpMessage request, HttpMessage response)
44 { 39 {
45 - time_t t;  
46 - struct tm * tmp;  
47 - char buffer[200];  
48 - size_t nbuf; 40 + char buffer[200];
  41 + size_t nbuf;
49 42
50 if (httpMessageHasKeepAlive(request)) { 43 if (httpMessageHasKeepAlive(request)) {
51 hashAdd(response->header, 44 hashAdd(response->header,
@@ -69,12 +62,7 @@ httpWorkerAddCommonHeader(HttpMessage request, HttpMessage response) @@ -69,12 +62,7 @@ httpWorkerAddCommonHeader(HttpMessage request, HttpMessage response)
69 new(HttpHeader, CSTRA("Content-Length"), buffer, nbuf)); 62 new(HttpHeader, CSTRA("Content-Length"), buffer, nbuf));
70 } 63 }
71 64
72 - t = time(NULL);  
73 - tmp = gmtime(&t);  
74 - nbuf = strftime(buffer, sizeof(buffer), "---, %d --- %Y %T GMT", tmp);  
75 - memcpy(buffer, DAY_NAMES[tmp->tm_wday], 3);  
76 - memcpy(buffer+8, MONTH_NAMES[tmp->tm_mon], 3);  
77 - 65 + nbuf = rfc1123GmtNow(buffer, sizeof(buffer));
78 hashAdd(response->header, 66 hashAdd(response->header,
79 new(HttpHeader, CSTRA("Date"), buffer, nbuf)); 67 new(HttpHeader, CSTRA("Date"), buffer, nbuf));
80 } 68 }
@@ -20,6 +20,7 @@ @@ -20,6 +20,7 @@
20 * along with this program. If not, see <http://www.gnu.org/licenses/>. 20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 */ 21 */
22 22
  23 +#include <time.h>
23 #include <stdlib.h> 24 #include <stdlib.h>
24 #include <sys/types.h> 25 #include <sys/types.h>
25 #include <string.h> 26 #include <string.h>
@@ -32,6 +33,41 @@ @@ -32,6 +33,41 @@
32 33
33 #include "commons.h" 34 #include "commons.h"
34 35
  36 +
  37 +static const char *DAY_NAMES[] = {
  38 + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
  39 +static const char *MONTH_NAMES[] = {
  40 + "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  41 + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
  42 +
  43 +
  44 +/*
  45 + * This one is not thread save.
  46 + */
  47 +size_t
  48 +rfc1123Gmt(char * buffer, size_t _nbuf, const time_t * t)
  49 +{
  50 + struct tm * tmp = gmtime(t);
  51 + size_t nbuf;
  52 +
  53 + nbuf = strftime(buffer, _nbuf, "---, %d --- %Y %T GMT", tmp);
  54 + memcpy(buffer, DAY_NAMES[tmp->tm_wday], 3);
  55 + memcpy(buffer+8, MONTH_NAMES[tmp->tm_mon], 3);
  56 +
  57 + return nbuf;
  58 +}
  59 +
  60 +/*
  61 + * This one is not thread save.
  62 + */
  63 +size_t
  64 +rfc1123GmtNow(char * buffer, size_t _nbuf)
  65 +{
  66 + time_t t = time(NULL);
  67 +
  68 + return rfc1123Gmt(buffer, _nbuf, &t);
  69 +}
  70 +
35 char 71 char
36 isHttpVersion(const char * str, size_t len) 72 isHttpVersion(const char * str, size_t len)
37 { 73 {
Please register or login to post a comment