summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c52
-rw-r--r--html.c9
2 files changed, 31 insertions, 30 deletions
diff --git a/data.c b/data.c
index ecc227e..9c335be 100644
--- a/data.c
+++ b/data.c
@@ -1538,21 +1538,10 @@ int limited(snac *user, const char *id, int cmd)
/** static data **/
-xs_str *_static_fn(snac *snac, const char *id)
-/* gets the filename for a static file */
+static int _load_raw_file(const char *fn, xs_val **data, int *size,
+ const char *inm, xs_str **etag)
+/* loads a cached file */
{
- if (strchr(id, '/'))
- return NULL;
- else
- return xs_fmt("%s/static/%s", snac->basedir, id);
-}
-
-
-int static_get(snac *snac, const char *id, xs_val **data, int *size,
- const char *inm, xs_str **etag)
-/* returns static content */
-{
- xs *fn = _static_fn(snac, id);
int status = 404;
if (fn) {
@@ -1584,7 +1573,7 @@ int static_get(snac *snac, const char *id, xs_val **data, int *size,
if (etag != NULL)
*etag = xs_dup(e);
- srv_debug(1, xs_fmt("static_get(): %s %d", id, status));
+ srv_debug(1, xs_fmt("_load_raw_file(): %s %d", fn, status));
}
}
@@ -1592,6 +1581,26 @@ int static_get(snac *snac, const char *id, xs_val **data, int *size,
}
+xs_str *_static_fn(snac *snac, const char *id)
+/* gets the filename for a static file */
+{
+ if (strchr(id, '/'))
+ return NULL;
+ else
+ return xs_fmt("%s/static/%s", snac->basedir, id);
+}
+
+
+int static_get(snac *snac, const char *id, xs_val **data, int *size,
+ const char *inm, xs_str **etag)
+/* returns static content */
+{
+ xs *fn = _static_fn(snac, id);
+
+ return _load_raw_file(fn, data, size, inm, etag);
+}
+
+
void static_put(snac *snac, const char *id, const char *data, int size)
/* writes status content */
{
@@ -1685,19 +1694,8 @@ int history_get(snac *snac, const char *id, xs_str **content, int *size,
const char *inm, xs_str **etag)
{
xs *fn = _history_fn(snac, id);
- FILE *f;
- int status = 404;
-
- if (fn && (f = fopen(fn, "r")) != NULL) {
- *content = xs_readall(f);
- fclose(f);
- *size = strlen(*content);
-
- status = 200;
- }
-
- return status;
+ return _load_raw_file(fn, content, size, inm, etag);
}
diff --git a/html.c b/html.c
index 19ab6b7..11c1918 100644
--- a/html.c
+++ b/html.c
@@ -1875,7 +1875,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
if (cache && history_mtime(&snac, h) > timeline_mtime(&snac)) {
snac_debug(&snac, 1, xs_fmt("serving cached local timeline"));
- status = history_get(&snac, h, body, b_size, NULL, NULL);
+ status = history_get(&snac, h, body, b_size,
+ xs_dict_get(req, "if-none-match"), etag);
}
else {
xs *list = timeline_list(&snac, "public", skip, show);
@@ -1903,7 +1904,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
if (cache && history_mtime(&snac, "timeline.html_") > timeline_mtime(&snac)) {
snac_debug(&snac, 1, xs_fmt("serving cached timeline"));
- status = history_get(&snac, "timeline.html_", body, b_size, NULL, NULL);
+ status = history_get(&snac, "timeline.html_", body, b_size,
+ xs_dict_get(req, "if-none-match"), etag);
}
else {
snac_debug(&snac, 1, xs_fmt("building timeline"));
@@ -1992,7 +1994,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
status = 404;
}
else
- status = history_get(&snac, id, body, b_size, NULL, NULL);
+ status = history_get(&snac, id, body, b_size,
+ xs_dict_get(req, "if-none-match"), etag);
}
}
else