From f53a76ce91ab83c7345a104b57f148738101c58d Mon Sep 17 00:00:00 2001 From: Jose Bollo Date: Mon, 14 Oct 2019 12:25:35 +0200 Subject: Transmit expiration in relative values This will at the end allow unsynchronized clients to query the server efficiently. Signed-off-by: Jose Bollo --- src/cynagora.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/cynagora.c') diff --git a/src/cynagora.c b/src/cynagora.c index 4434d89..96c6466 100644 --- a/src/cynagora.c +++ b/src/cynagora.c @@ -41,6 +41,7 @@ #include "cynagora.h" #include "cache.h" #include "socket.h" +#include "expire.h" #define MIN_CACHE_SIZE 400 #define CACHESIZE(x) ((x) >= MIN_CACHE_SIZE ? (x) : (x) ? MIN_CACHE_SIZE : 0) @@ -185,7 +186,7 @@ putxkv( if (!optval->expire) text[0] = 0; else - snprintf(text, sizeof text, "%lld", (long long)optval->expire); + exp2txt(optval->expire, true, text, sizeof text); rc = prot_put_field(prot, text); } } @@ -368,7 +369,7 @@ status_check( else if (cynagora->reply.fields[1][0] == '-') *expire = -1; else - *expire = strtoll(cynagora->reply.fields[1], NULL, 10); + txt2exp(cynagora->reply.fields[1], expire, true); return rc; } @@ -556,7 +557,7 @@ check_or_test( if (rc >= 0) { rc = status_check(cynagora, &expire); if (rc >= 0 && action == _check_) - cache_put(cynagora->cache, key, rc, expire); + cache_put(cynagora->cache, key, rc, expire, true); } } return rc; @@ -721,7 +722,10 @@ cynagora_get( k.user = cynagora->reply.fields[3]; k.permission = cynagora->reply.fields[4]; v.value = cynagora->reply.fields[5]; - v.expire = rc == 6 ? 0 : (time_t)strtoll(cynagora->reply.fields[6], NULL, 10); + if (rc == 6) + v.expire = 0; + else if (!txt2exp(cynagora->reply.fields[6], &v.expire, true)) + v.expire = -1; callback(closure, &k, &v); rc = wait_reply(cynagora, true); } @@ -910,7 +914,7 @@ cynagora_async_process( key.session = &key.client[1 + strlen(key.client)]; key.user = &key.session[1 + strlen(key.session)]; key.permission = &key.user[1 + strlen(key.user)]; - cache_put(cynagora->cache, &key, rc, expire); + cache_put(cynagora->cache, &key, rc, expire, true); } ar->callback(ar->closure, rc); free(ar); -- cgit 1.2.3-korg