initial event handler
[src/app-framework-binder.git] / src / session.h
1 /*
2  * Copyright 2016 IoT.bzh
3  * Author: José Bollo <jose.bollo@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #pragma once
19
20 struct json_object;
21
22 struct afb_context
23 {
24         void *context;
25         void (*free_context)(void*);
26 };
27
28 extern void *afb_context_get(struct afb_context *actx);
29 extern void afb_context_set(struct afb_context *actx, void *context, void (*free_context)(void*));
30
31 struct afb_event_sender_itf
32 {
33         void (*send)(void *closure, const char *event, struct json_object *object);
34 };
35
36 struct afb_event_sender
37 {
38         const struct afb_event_sender_itf *itf;
39         void *closure;
40 };
41
42 struct afb_event_sender_list;
43
44 struct AFB_clientCtx
45 {
46         time_t expiration;    // expiration time of the token
47         int created;
48         unsigned refcount;
49         struct afb_context *contexts;
50         char uuid[37];        // long term authentication of remote client
51         char token[37];       // short term authentication of remote client
52         struct afb_event_sender_list *senders;
53 };
54
55 extern void ctxStoreInit (int max_session_count, int timeout, const char *initok, int context_count);
56
57 extern struct AFB_clientCtx *ctxClientGetForUuid (const char *uuid);
58 extern struct AFB_clientCtx *ctxClientGet(struct AFB_clientCtx *clientCtx);
59 extern void ctxClientPut(struct AFB_clientCtx *clientCtx);
60 extern void ctxClientClose (struct AFB_clientCtx *clientCtx);
61
62 extern int ctxClientEventSenderAdd(struct AFB_clientCtx *clientCtx, struct afb_event_sender sender);
63 extern void ctxClientEventSenderRemove(struct AFB_clientCtx *clientCtx, struct afb_event_sender sender);
64 extern int ctxClientEventSend(struct AFB_clientCtx *clientCtx, const char *event, struct json_object *object);
65
66 extern int ctxTokenCheck (struct AFB_clientCtx *clientCtx, const char *token);
67 extern int ctxTokenCheckLen (struct AFB_clientCtx *clientCtx, const char *token, size_t length);
68 extern void ctxTokenNew (struct AFB_clientCtx *clientCtx);
69