summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/afb-session.c38
-rw-r--r--src/afb-session.h2
2 files changed, 29 insertions, 11 deletions
diff --git a/src/afb-session.c b/src/afb-session.c
index c312b46c..c63c6c46 100644
--- a/src/afb-session.c
+++ b/src/afb-session.c
@@ -22,6 +22,7 @@
#include <pthread.h>
#include <stdlib.h>
#include <stdint.h>
+#include <limits.h>
#include <string.h>
#include <uuid/uuid.h>
#include <errno.h>
@@ -227,21 +228,12 @@ static void session_destroy (struct afb_session *session)
/* update expiration of 'session' according to 'now' */
static void session_update_expiration(struct afb_session *session, time_t now)
{
- int timeout;
time_t expiration;
/* compute expiration */
- timeout = session->timeout;
- if (timeout == AFB_SESSION_TIMEOUT_INFINITE)
+ expiration = now + afb_session_timeout(session);
+ if (expiration < 0)
expiration = MAX_EXPIRATION;
- else {
- if (timeout == AFB_SESSION_TIMEOUT_DEFAULT)
- expiration = now + sessions.timeout;
- else
- expiration = now + timeout;
- if (expiration < 0)
- expiration = MAX_EXPIRATION;
- }
/* record the expiration */
session->expiration = expiration;
@@ -416,6 +408,30 @@ struct afb_session *afb_session_create (int timeout)
return afb_session_get(NULL, timeout, NULL);
}
+/**
+ * Returns the timeout of 'session' in seconds
+ */
+int afb_session_timeout(struct afb_session *session)
+{
+ int timeout;
+
+ /* compute timeout */
+ timeout = session->timeout;
+ if (timeout == AFB_SESSION_TIMEOUT_DEFAULT)
+ timeout = sessions.timeout;
+ if (timeout < 0)
+ timeout = INT_MAX;
+ return timeout;
+}
+
+/**
+ * Returns the second remaining before expiration of 'session'
+ */
+int afb_session_what_remains(struct afb_session *session)
+{
+ return (int)(session->expiration - NOW);
+}
+
/* This function will return exiting session or newly created session */
struct afb_session *afb_session_get (const char *uuid, int timeout, int *created)
{
diff --git a/src/afb-session.h b/src/afb-session.h
index c93db5c4..8e2ee3d6 100644
--- a/src/afb-session.h
+++ b/src/afb-session.h
@@ -43,6 +43,8 @@ extern int afb_session_is_closed (struct afb_session *session);
extern int afb_session_check_token(struct afb_session *session, const char *token);
extern void afb_session_new_token(struct afb_session *session);
extern const char *afb_session_token(struct afb_session *session);
+extern int afb_session_timeout(struct afb_session *session);
+extern int afb_session_what_remains(struct afb_session *session);
extern void *afb_session_get_cookie(struct afb_session *session, const void *key);
extern void *afb_session_cookie(struct afb_session *session, const void *key, void *(*makecb)(void *closure), void (*freecb)(void *item), void *closure, int replace);