summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/afb-session.c36
-rw-r--r--src/afb-session.h2
2 files changed, 38 insertions, 0 deletions
diff --git a/src/afb-session.c b/src/afb-session.c
index 00aac69d..2cfbff99 100644
--- a/src/afb-session.c
+++ b/src/afb-session.c
@@ -65,6 +65,7 @@ struct afb_session
time_t expiration; /**< expiration time of the token */
pthread_mutex_t mutex; /**< mutex of the session */
struct cookie *cookies[COOKIECOUNT]; /**< cookies of the session */
+ char *lang; /**< current language setting for the session */
uint8_t closed: 1; /**< is the session closed ? */
uint8_t autoclose: 1; /**< close the session when unreferenced */
uint8_t notinset: 1; /**< session removed from the set of sessions */
@@ -259,6 +260,7 @@ static void session_destroy (struct afb_session *session)
{
afb_hook_session_destroy(session);
pthread_mutex_destroy(&session->mutex);
+ free(session->lang);
free(session);
}
@@ -738,3 +740,37 @@ int afb_session_set_cookie(struct afb_session *session, const void *key, void *v
return -(value != afb_session_cookie(session, key, NULL, freecb, value, 1));
}
+/**
+ * Set the language attached to the session
+ *
+ * @param session the session to set
+ * @param lang the language specifiction to set to session
+ *
+ * @return 0 in case of success or -1 in case of error
+ */
+int afb_session_set_language(struct afb_session *session, const char *lang)
+{
+ char *oldl, *newl;
+
+ newl = strdup(lang);
+ if (newl == NULL)
+ return -1;
+
+ oldl = session->lang;
+ session->lang = newl;
+ free(oldl);
+ return 0;
+}
+
+/**
+ * Get the language attached to the session
+ *
+ * @param session the session to query
+ * @param lang a default language specifiction
+ *
+ * @return the langauage specification to use for session
+ */
+const char *afb_session_get_language(struct afb_session *session, const char *lang)
+{
+ return session->lang ?: lang;
+}
diff --git a/src/afb-session.h b/src/afb-session.h
index 12b30c41..bad07eeb 100644
--- a/src/afb-session.h
+++ b/src/afb-session.h
@@ -50,3 +50,5 @@ 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);
extern int afb_session_set_cookie(struct afb_session *session, const void *key, void *value, void (*freecb)(void*));
+extern int afb_session_set_language(struct afb_session *session, const char *lang);
+extern const char *afb_session_get_language(struct afb_session *session, const char *lang);