1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
/*
* Copyright (C) 2018 "IoT.bzh"
* Author Loïc Collignon <loic.collignon@iot.bzh>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "ahl-binding.hpp"
/**
* @brief Callback invoked on new api creation.
* @param[in] handle Handle to the new api.
* @return Status code, zero if success.
*/
int ahl_api_create(void*, afb_api_t handle)
{
return ahl_binding_t::instance().preinit(handle);
}
/**
* @brief Entry point for API.
* @param[in] handle Handle to start with for API creation.
* @return Status code, zero if success.
*/
int afbBindingEntry(afb_api_t handle)
{
using namespace std::placeholders;
assert(handle != nullptr);
afb_api_new_api(
handle,
HL_API_NAME,
HL_API_INFO,
1,
ahl_api_create,
nullptr
);
return 0;
}
/**
* @brief Callback invoked when API enter the init phase.
* @return Status code, zero if success.
*/
int ahl_api_init(afb_api_t)
{
return ahl_binding_t::instance().init();
}
/**
* @brief Callback invoked when an event is received.
* @param[in] e Event's name.
* @param[in] o Event's args.
*/
void ahl_api_on_event(afb_api_t, const char* e, struct json_object* o)
{
ahl_binding_t::instance().event(e, o);
}
/**
* @brief Callback invoked when a 'roles' section is found in config file.
* @param[in] o Config section to handle.
* @return Status code, zero if success.
*/
int ahl_api_config_roles(afb_api_t, CtlSectionT*, json_object* o)
{
return ahl_binding_t::instance().parse_roles_config(o);
}
/**
* @brief Callback invoked when clients call the verb 'get_roles'.
* @param[in] req Request to handle.
*/
void ahl_api_get_roles(afb_req_t req)
{
ahl_binding_t::instance().get_roles(req);
}
/**
* @brief Callback invoked when clients call the verb 'subscribe'.
* @param[in] req Request to handle.
*/
void ahl_api_subscribe(afb_req_t req)
{
ahl_binding_t::instance().subscribe(req);
}
/**
* @brief Callback invoked when clients call the verb 'unsubscribe'.
* @param[in] req Request to handle.
*/
void ahl_api_unsubscribe(afb_req_t req)
{
ahl_binding_t::instance().unsubscribe(req);
}
/**
* @brief Callback invoked when clients call a 'role' verb.
* @param[in] req Request to handle.
*
* Handle dynamic verbs based on role name ('multimedia', 'navigation', ...)
*/
void ahl_api_role(afb_req_t req)
{
role_t* role = (role_t*)req->vcbdata;
assert(role != nullptr);
role->invoke(req);
}
|