diff options
author | Fulup Ar Foll <fulup@iot.bzh> | 2015-12-22 23:09:04 +0100 |
---|---|---|
committer | Fulup Ar Foll <fulup@iot.bzh> | 2015-12-22 23:09:04 +0100 |
commit | 00857f9da5ae802794a4cb94aca576b11bfe6628 (patch) | |
tree | fb17939c9488de74e345bd5cc68a94b8894b8968 /plugins | |
parent | 1398adf363c182f25603f7d0c1ff52c5be8267b2 (diff) |
New Session Model [compile but not tested]
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/audio/audio-api.c | 33 | ||||
-rw-r--r-- | plugins/samples/SamplePost.c | 3 | ||||
-rw-r--r-- | plugins/session/token-api.c | 21 |
3 files changed, 23 insertions, 34 deletions
diff --git a/plugins/audio/audio-api.c b/plugins/audio/audio-api.c index 915f8c6e..8671a879 100644 --- a/plugins/audio/audio-api.c +++ b/plugins/audio/audio-api.c @@ -51,12 +51,8 @@ STATIC AFB_error releaseAudio (audioCtxHandleT *ctx) { } /* called when client session dies [e.g. client quits for more than 15mns] */ -STATIC json_object* freeAudio (AFB_clientCtx *client) { - - releaseAudio (client->ctx); - free (client->ctx); - - return jsonNewMessage (AFB_SUCCESS, "Released radio and client context"); +STATIC void freeAudio (void *context) { + free (context); } @@ -69,19 +65,18 @@ STATIC json_object* init (AFB_request *request) { /* AFB_SESSION_CREATE */ int idx; /* create a private client context */ - ctx = initAudioCtx(); - request->client->ctx = (audioCtxHandleT*)ctx; + request->context = initAudioCtx(); _alsa_init("default", ctx); jresp = json_object_new_object(); - json_object_object_add (jresp, "token", json_object_new_string (request->client->token)); - return jresp; + json_object_object_add (jresp, "info", json_object_new_string ("Radio initialised")); + return (jresp); } STATIC json_object* volume (AFB_request *request) { /* AFB_SESSION_CHECK */ - audioCtxHandleT *ctx = (audioCtxHandleT*)request->client->ctx; + audioCtxHandleT *ctx = (audioCtxHandleT*)request->context; const char *value = getQueryValue (request, "value"); json_object *jresp; int volume[8], i; @@ -138,7 +133,7 @@ STATIC json_object* volume (AFB_request *request) { /* AFB_SESSION_CHECK */ STATIC json_object* channels (AFB_request *request) { /* AFB_SESSION_CHECK */ - audioCtxHandleT *ctx = (audioCtxHandleT*)request->client->ctx; + audioCtxHandleT *ctx = (audioCtxHandleT*)request->context; const char *value = getQueryValue (request, "value"); json_object *jresp = json_object_new_object(); char channels_str[256]; @@ -163,7 +158,7 @@ STATIC json_object* channels (AFB_request *request) { /* AFB_SESSION_CHECK */ STATIC json_object* mute (AFB_request *request) { /* AFB_SESSION_CHECK */ - audioCtxHandleT *ctx = (audioCtxHandleT*)request->client->ctx; + audioCtxHandleT *ctx = (audioCtxHandleT*)request->context; const char *value = getQueryValue (request, "value"); json_object *jresp = json_object_new_object(); @@ -196,7 +191,7 @@ STATIC json_object* mute (AFB_request *request) { /* AFB_SESSION_CHECK */ STATIC json_object* play (AFB_request *request) { /* AFB_SESSION_CHECK */ - audioCtxHandleT *ctx = (audioCtxHandleT*)request->client->ctx; + audioCtxHandleT *ctx = (audioCtxHandleT*)request->context; const char *value = getQueryValue (request, "value"); json_object *jresp = json_object_new_object(); @@ -226,24 +221,16 @@ STATIC json_object* play (AFB_request *request) { /* AFB_SESSION_CHECK */ return jresp; } -STATIC json_object* refresh (AFB_request *request) { /* AFB_SESSION_RENEW */ - json_object *jresp = json_object_new_object(); - json_object_object_add(jresp, "token", json_object_new_string (request->client->token)); - return jresp; -} - STATIC json_object* ping (AFB_request *request) { /* AFB_SESSION_NONE */ return jsonNewMessage(AFB_SUCCESS, "Ping Binder Daemon - Radio API"); } - STATIC AFB_restapi pluginApis[]= { {"init" , AFB_SESSION_CREATE, (AFB_apiCB)init , "Audio API - init"}, {"volume" , AFB_SESSION_CHECK, (AFB_apiCB)volume , "Audio API - volume"}, {"channels", AFB_SESSION_CHECK, (AFB_apiCB)channels , "Audio API - channels"}, {"mute" , AFB_SESSION_CHECK, (AFB_apiCB)mute , "Audio API - mute"}, {"play" , AFB_SESSION_CHECK, (AFB_apiCB)play , "Audio API - play"}, - {"refresh" , AFB_SESSION_RENEW, (AFB_apiCB)refresh , "Audio API - refresh"}, {"ping" , AFB_SESSION_NONE, (AFB_apiCB)ping , "Audio API - ping"}, {NULL} }; @@ -255,7 +242,7 @@ PUBLIC AFB_plugin *pluginRegister () { plugin->prefix = "audio"; plugin->apis = pluginApis; - plugin->freeCtxCB = freeAudio; + plugin->freeCtxCB = (AFB_freeCtxCB)freeAudio; return (plugin); }; diff --git a/plugins/samples/SamplePost.c b/plugins/samples/SamplePost.c index 53d065ae..beadb774 100644 --- a/plugins/samples/SamplePost.c +++ b/plugins/samples/SamplePost.c @@ -48,7 +48,8 @@ STATIC json_object* UploadAppli (AFB_request *request, AFB_PostItem *item) { // This is called after PostForm and then after DonePostForm if (item == NULL) { AFB_PostCtx *postFileCtx = getPostContext(request); - if (postFileCtx != NULL) { + if (postFileCtx != NULL) { + // Do something intelligent here to install application postFileCtx->errcode = MHD_HTTP_OK; // or error is something went wrong; diff --git a/plugins/session/token-api.c b/plugins/session/token-api.c index 585c3432..0a5a2be4 100644 --- a/plugins/session/token-api.c +++ b/plugins/session/token-api.c @@ -31,7 +31,7 @@ STATIC json_object* clientContextCreate (AFB_request *request) { json_object *jresp; // add an application specific client context to session - request->client->ctx = malloc (sizeof (MyClientApplicationHandle)); + request->context = malloc (sizeof (MyClientApplicationHandle)); // Send response to UI jresp = json_object_new_object(); @@ -66,23 +66,24 @@ STATIC json_object* clientContextCheck (AFB_request *request) { STATIC json_object* clientContextReset (AFB_request *request) { json_object *jresp; + /* after this call token will be reset + * - no further access to API will be possible + * - every context from any used plugin will be freed + */ + jresp = json_object_new_object(); - json_object_object_add(jresp, "uuid", json_object_new_string (request->client->uuid)); + json_object_object_add(jresp, "info", json_object_new_string ("Token and all resources are released")); + // WARNING: if you free context resource manually here do not forget to set request->context=NULL; return (jresp); } -// In this case or handle is quite basic -typedef struct { - int fd; -} appPostCtx; - // This function is call when Client Session Context is removed // Note: when freeCtxCB==NULL standard free/malloc is called -STATIC void clientContextFree(AFB_clientCtx *client) { - fprintf (stderr,"Plugin[%s] Closing Session uuid=[%s]\n", client->plugin->prefix, client->uuid); - free (client->ctx); +STATIC void clientContextFree(void *context, char* uuid) { + fprintf (stderr,"Plugin[token] Closing Session uuid=[%s]\n", uuid); + free (context); } STATIC AFB_restapi pluginApis[]= { |