[vlc-commits] https: revector time handling
Rémi Denis-Courmont
git at videolan.org
Wed Dec 16 21:31:19 CET 2015
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Dec 16 22:21:25 2015 +0200| [c6dac3c621e67161155dc0cdb6f0e50a62a9bbd5] | committer: Rémi Denis-Courmont
https: revector time handling
Also robustify time test.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c6dac3c621e67161155dc0cdb6f0e50a62a9bbd5
---
modules/access/http/message.c | 36 +++++++++++++++++++++---------------
modules/access/http/message.h | 18 ++++++++++++++++++
modules/access/http/message_test.c | 2 ++
3 files changed, 41 insertions(+), 15 deletions(-)
diff --git a/modules/access/http/message.c b/modules/access/http/message.c
index 13cd053..e7f5853 100644
--- a/modules/access/http/message.c
+++ b/modules/access/http/message.c
@@ -605,27 +605,27 @@ static const char vlc_http_months[12][4] = {
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
-static int vlc_http_msg_add_time(struct vlc_http_msg *m, const char *hname,
- const struct tm *restrict tm)
+int vlc_http_msg_add_time(struct vlc_http_msg *m, const char *hname,
+ const time_t *t)
{
+ struct tm tm;
+
+ if (gmtime_r(t, &tm) == NULL)
+ return -1;
return vlc_http_msg_add_header(m, hname,
"%s, %02d %s %04d %02d:%02d:%02d GMT",
- vlc_http_days[tm->tm_wday], tm->tm_mday,
- vlc_http_months[tm->tm_mon],
- 1900 + tm->tm_year,
- tm->tm_hour, tm->tm_min, tm->tm_sec);
+ vlc_http_days[tm.tm_wday], tm.tm_mday,
+ vlc_http_months[tm.tm_mon],
+ 1900 + tm.tm_year,
+ tm.tm_hour, tm.tm_min, tm.tm_sec);
}
int vlc_http_msg_add_atime(struct vlc_http_msg *m)
{
- struct tm tm;
time_t now;
time(&now);
- if (gmtime_r(&now, &tm) == NULL)
- return -1;
-
- return vlc_http_msg_add_time(m, "Date", &tm);
+ return vlc_http_msg_add_time(m, "Date", &now);
}
static time_t vlc_http_mktime(const char *str)
@@ -658,16 +658,22 @@ error:
return -1; /* invalid month */
}
+time_t vlc_http_msg_get_time(const struct vlc_http_msg *m, const char *name)
+{
+ const char *str = vlc_http_msg_get_header(m, name);
+ if (str == NULL)
+ return -1;
+ return vlc_http_mktime(str);
+}
+
time_t vlc_http_msg_get_atime(const struct vlc_http_msg *m)
{
- const char *str = vlc_http_msg_get_header(m, "Date");
- return (str != NULL) ? vlc_http_mktime(str) : -1;
+ return vlc_http_msg_get_time(m, "Date");
}
time_t vlc_http_msg_get_mtime(const struct vlc_http_msg *m)
{
- const char *str = vlc_http_msg_get_header(m, "Last-Modified");
- return (str != NULL) ? vlc_http_mktime(str) : -1;
+ return vlc_http_msg_get_time(m, "Last-Modified");
}
unsigned vlc_http_msg_get_retry_after(const struct vlc_http_msg *m)
diff --git a/modules/access/http/message.h b/modules/access/http/message.h
index e96ffa1..93be452 100644
--- a/modules/access/http/message.h
+++ b/modules/access/http/message.h
@@ -75,6 +75,24 @@ int vlc_http_msg_add_agent(struct vlc_http_msg *m, const char *str);
const char *vlc_http_msg_get_agent(const struct vlc_http_msg *m);
/**
+ * Parses a timestamp header.
+ *
+ * @param name header field name
+ * @return a timestamp value, or -1 on error.
+ */
+time_t vlc_http_msg_get_time(const struct vlc_http_msg *m, const char *name);
+
+/**
+ * Adds a timestamp header.
+ *
+ * @param name header field name
+ * @param t pointer to timestamp
+ * @return 0 on success, -1 on error (errno is set accordingly)
+ */
+int vlc_http_msg_add_time(struct vlc_http_msg *m, const char *name,
+ const time_t *t);
+
+/**
* Adds a Date header.
*/
int vlc_http_msg_add_atime(struct vlc_http_msg *m);
diff --git a/modules/access/http/message_test.c b/modules/access/http/message_test.c
index 821fb72..9653807 100644
--- a/modules/access/http/message_test.c
+++ b/modules/access/http/message_test.c
@@ -210,6 +210,8 @@ int main(void)
assert(vlc_http_msg_add_atime(m) == 0);
time_t t = vlc_http_msg_get_atime(m);
assert(t != (time_t)-1);
+ assert(vlc_http_msg_add_time(m, "Last-Modified", &t) == 0);
+ assert(t == vlc_http_msg_get_mtime(m));
vlc_http_msg_add_header(m, "Content-Length", "1234");
assert(vlc_http_msg_get_size(m) == 1234);
More information about the vlc-commits
mailing list