Code Review
/
src
/
app-framework-binder.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
fix bug
[src/app-framework-binder.git]
/
src
/
session.c
diff --git
a/src/session.c
b/src/session.c
index
9569b46
..
3ebd982
100644
(file)
--- a/
src/session.c
+++ b/
src/session.c
@@
-31,6
+31,7
@@
#include <search.h>
#include "afb-apis.h"
#include <search.h>
#include "afb-apis.h"
+#include "session.h"
// Session UUID are store in a simple array [for 10 sessions this should be enough]
static struct {
// Session UUID are store in a simple array [for 10 sessions this should be enough]
static struct {
@@
-38,6
+39,8
@@
static struct {
AFB_clientCtx **store; // sessions store
int count; // current number of sessions
int max;
AFB_clientCtx **store; // sessions store
int count; // current number of sessions
int max;
+ int timeout;
+ int apicount;
} sessions;
static const char key_uuid[] = "uuid";
} sessions;
static const char key_uuid[] = "uuid";
@@
-46,14
+49,13
@@
static const char key_token[] = "token";
// Free context [XXXX Should be protected again memory abort XXXX]
static void ctxUuidFreeCB (AFB_clientCtx *client)
{
// Free context [XXXX Should be protected again memory abort XXXX]
static void ctxUuidFreeCB (AFB_clientCtx *client)
{
- int idx
, cnt
;
+ int idx;
// If application add a handle let's free it now
if (client->contexts != NULL) {
// If application add a handle let's free it now
if (client->contexts != NULL) {
- cnt = afb_apis_count();
// Free client handle with a standard Free function, with app callback or ignore it
// Free client handle with a standard Free function, with app callback or ignore it
- for (idx=0; idx <
c
nt; idx ++) {
+ for (idx=0; idx <
sessions.apicou
nt; idx ++) {
if (client->contexts[idx] != NULL) {
afb_apis_free_context(idx, client->contexts[idx]);
}
if (client->contexts[idx] != NULL) {
afb_apis_free_context(idx, client->contexts[idx]);
}
@@
-62,12
+64,14
@@
static void ctxUuidFreeCB (AFB_clientCtx *client)
}
// Create a new store in RAM, not that is too small it will be automatically extended
}
// Create a new store in RAM, not that is too small it will be automatically extended
-void ctxStoreInit (int nbSession)
+void ctxStoreInit (int nbSession
, int timeout, int apicount
)
{
// let's create as store as hashtable does not have any
sessions.store = calloc (1 + (unsigned)nbSession, sizeof(AFB_clientCtx));
sessions.max = nbSession;
{
// let's create as store as hashtable does not have any
sessions.store = calloc (1 + (unsigned)nbSession, sizeof(AFB_clientCtx));
sessions.max = nbSession;
+ sessions.timeout = timeout;
+ sessions.apicount = apicount;
}
static AFB_clientCtx *ctxStoreSearch (const char* uuid)
}
static AFB_clientCtx *ctxStoreSearch (const char* uuid)
@@
-169,7
+173,7
@@
void ctxStoreGarbage (const int timeout)
}
// This function will return exiting client context or newly created client context
}
// This function will return exiting client context or newly created client context
-AFB_clientCtx *ctxClientGet (AFB_request *request
, int apiidx
)
+AFB_clientCtx *ctxClientGet (AFB_request *request)
{
AFB_clientCtx *clientCtx=NULL;
const char *uuid;
{
AFB_clientCtx *clientCtx=NULL;
const char *uuid;
@@
-196,13
+200,11
@@
AFB_clientCtx *ctxClientGet (AFB_request *request, int apiidx)
clientCtx = ctxStoreSearch (uuid);
if (clientCtx) {
clientCtx = ctxStoreSearch (uuid);
if (clientCtx) {
- if (ctxStoreTooOld (clientCtx,
request->config->cntxT
imeout)) {
+ if (ctxStoreTooOld (clientCtx,
sessions.t
imeout)) {
// this session is too old let's delete it
ctxStoreDel (clientCtx);
clientCtx = NULL;
} else {
// this session is too old let's delete it
ctxStoreDel (clientCtx);
clientCtx = NULL;
} else {
- request->context = clientCtx->contexts[apiidx];
- request->uuid = uuid;
return clientCtx;
}
}
return clientCtx;
}
}
@@
-211,24
+213,20
@@
AFB_clientCtx *ctxClientGet (AFB_request *request, int apiidx)
// we have no session let's create one otherwise let's clean any exiting values
if (clientCtx == NULL) {
clientCtx = calloc(1, sizeof(AFB_clientCtx)); // init NULL clientContext
// we have no session let's create one otherwise let's clean any exiting values
if (clientCtx == NULL) {
clientCtx = calloc(1, sizeof(AFB_clientCtx)); // init NULL clientContext
- clientCtx->contexts = calloc ((unsigned)
afb_apis_count()
, sizeof (void*));
+ clientCtx->contexts = calloc ((unsigned)
sessions.apicount
, sizeof (void*));
}
uuid_generate(newuuid); // create a new UUID
uuid_unparse_lower(newuuid, clientCtx->uuid);
// if table is full at 50% let's clean it up
}
uuid_generate(newuuid); // create a new UUID
uuid_unparse_lower(newuuid, clientCtx->uuid);
// if table is full at 50% let's clean it up
- if(sessions.count > (sessions.max / 2)) ctxStoreGarbage(
request->config->cntxT
imeout);
+ if(sessions.count > (sessions.max / 2)) ctxStoreGarbage(
sessions.t
imeout);
// finally add uuid into hashtable
if (AFB_SUCCESS != ctxStoreAdd (clientCtx)) {
free (clientCtx);
return NULL;
}
// finally add uuid into hashtable
if (AFB_SUCCESS != ctxStoreAdd (clientCtx)) {
free (clientCtx);
return NULL;
}
-
- // if (verbose) fprintf (stderr, "ctxClientGet New uuid=[%s] token=[%s] timestamp=%d\n", clientCtx->uuid, clientCtx->token, clientCtx->timeStamp);
- request->context = clientCtx->contexts[apiidx];
- request->uuid = clientCtx->uuid;
return clientCtx;
}
return clientCtx;
}
@@
-248,7
+246,7
@@
AFB_error ctxTokenCheck (AFB_clientCtx *clientCtx, AFB_request *request)
return AFB_FALSE;
// compare current token with previous one
return AFB_FALSE;
// compare current token with previous one
- if ((0 == strcmp (token, clientCtx->token)) && (!ctxStoreTooOld (clientCtx,
request->config->cntxT
imeout))) {
+ if ((0 == strcmp (token, clientCtx->token)) && (!ctxStoreTooOld (clientCtx,
sessions.t
imeout))) {
return AFB_SUCCESS;
}
return AFB_SUCCESS;
}