afb-session: remove unused access time
[src/app-framework-binder.git] / src / afb-session.c
index e1d5a45..68de672 100644 (file)
@@ -49,7 +49,6 @@ struct afb_session
        unsigned refcount;
        int timeout;
        time_t expiration;    // expiration time of the token
-       time_t access;
        pthread_mutex_t mutex;
        char uuid[37];        // long term authentication of remote client
        char token[37];       // short term authentication of remote client
@@ -240,6 +239,12 @@ static struct afb_session *make_session (const char *uuid, int timeout, time_t n
 {
        struct afb_session *session;
 
+       if (!AFB_SESSION_TIMEOUT_IS_VALID(timeout)
+        || (uuid && strlen(uuid) >= sizeof session->uuid)) {
+               errno = EINVAL;
+               goto error;
+       }
+
        /* allocates a new one */
        session = calloc(1, sizeof *session);
        if (session == NULL) {
@@ -252,19 +257,18 @@ static struct afb_session *make_session (const char *uuid, int timeout, time_t n
        if (uuid == NULL) {
                do { new_uuid(session->uuid); } while(search(session->uuid));
        } else {
-               if (strlen(uuid) >= sizeof session->uuid) {
-                       errno = EINVAL;
-                       goto error2;
-               }
                strcpy(session->uuid, uuid);
        }
 
        /* init the token */
        strcpy(session->token, sessions.initok);
+
+       /* init timeout */
+       if (timeout == AFB_SESSION_TIMEOUT_DEFAULT)
+               timeout = sessions.timeout;
        session->timeout = timeout;
-       if (timeout != 0)
-               session->expiration = now + timeout;
-       else {
+       session->expiration = now + timeout;
+       if (timeout == AFB_SESSION_TIMEOUT_INFINITE || session->expiration < 0) {
                session->expiration = (time_t)(~(time_t)0);
                if (session->expiration < 0)
                        session->expiration = (time_t)(((unsigned long long)session->expiration) >> 1);
@@ -274,7 +278,6 @@ static struct afb_session *make_session (const char *uuid, int timeout, time_t n
                goto error2;
        }
 
-       session->access = now;
        session->refcount = 1;
        return session;
 
@@ -284,6 +287,7 @@ error:
        return NULL;
 }
 
+/* Creates a new session with 'timeout' */
 struct afb_session *afb_session_create (int timeout)
 {
        time_t now;
@@ -295,8 +299,22 @@ struct afb_session *afb_session_create (int timeout)
        return make_session(NULL, timeout, now);
 }
 
-// This function will return exiting session or newly created session
-struct afb_session *afb_session_get (const char *uuid, int *created)
+/* Searchs the session of 'uuid' */
+struct afb_session *afb_session_search (const char *uuid)
+{
+       time_t now;
+       struct afb_session *session;
+
+       /* cleaning */
+       now = NOW;
+       cleanup (now);
+       session = search(uuid);
+       return session;
+
+}
+
+/* This function will return exiting session or newly created session */
+struct afb_session *afb_session_get (const char *uuid, int timeout, int *created)
 {
        struct afb_session *session;
        time_t now;
@@ -308,20 +326,20 @@ struct afb_session *afb_session_get (const char *uuid, int *created)
        /* search for an existing one not too old */
        if (uuid != NULL) {
                session = search(uuid);
-               if (!created)
-                       return session;
                if (session != NULL) {
-                       *created = 0;
-                       session->access = now;
+                       if (created)
+                               *created = 0;
                        session->refcount++;
                        return session;
                }
        }
 
+       /* no existing session found, create it */
+       session = make_session(uuid, timeout, now);
        if (created)
-               *created = 1;
+               *created = !!session;
 
-       return make_session(uuid, sessions.timeout, now);
+       return session;
 }
 
 struct afb_session *afb_session_addref(struct afb_session *session)