Change-Id: I05850b05dc6747563ef38800821bfcaf5c45b5d0
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
// Session UUID are store in a simple array [for 10 sessions this should be enough]
static struct {
pthread_mutex_t mutex; // declare a mutex to protect hash table
// Session UUID are store in a simple array [for 10 sessions this should be enough]
static struct {
pthread_mutex_t mutex; // declare a mutex to protect hash table
- struct afb_session **store; // sessions store
+ struct afb_session **store; // sessions store
int count; // current number of sessions
int max;
int timeout;
int count; // current number of sessions
int max;
int timeout;
}
// Free context [XXXX Should be protected again memory abort XXXX]
}
// Free context [XXXX Should be protected again memory abort XXXX]
-static void free_data (struct afb_session *session)
+static void remove_all_cookies(struct afb_session *session)
{
int idx;
struct cookie *cookie, *next;
{
int idx;
struct cookie *cookie, *next;
assert(session != NULL);
if (session->uuid[0] != 0) {
session->uuid[0] = 0;
assert(session != NULL);
if (session->uuid[0] != 0) {
session->uuid[0] = 0;
+ remove_all_cookies(session);
if (session->refcount == 0) {
destroy (session);
free(session);
if (session->refcount == 0) {
destroy (session);
free(session);
session->expiration = NOW + session->timeout;
}
session->expiration = NOW + session->timeout;
}
+/* Returns the uuid of 'session' */
const char *afb_session_uuid (struct afb_session *session)
{
assert(session != NULL);
return session->uuid;
}
const char *afb_session_uuid (struct afb_session *session)
{
assert(session != NULL);
return session->uuid;
}
+/* Returns the token of 'session' */
const char *afb_session_token (struct afb_session *session)
{
assert(session != NULL);
return session->token;
}
const char *afb_session_token (struct afb_session *session)
{
assert(session != NULL);
return session->token;
}
+/* Set, get, replace, remove a cookie key */
void *afb_session_cookie(struct afb_session *session, const void *key, void *(*makecb)(void *closure), void (*freecb)(void *item), void *closure, int replace)
{
int idx;
void *afb_session_cookie(struct afb_session *session, const void *key, void *(*makecb)(void *closure), void (*freecb)(void *item), void *closure, int replace)
{
int idx;