Remove last trailing comma
[apps/livebox/data-provider-master.git] / include / slave_life.h
1 /*
2  * Copyright 2013  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.1 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://floralicense.org/license/
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /*!
18  * Managing the reference counter of a slave
19  */
20
21 struct slave_node;
22
23 enum slave_event {
24         SLAVE_EVENT_ACTIVATE,
25         SLAVE_EVENT_DEACTIVATE, /* deactivate callback, can return REACTIVATE, DEFAULT */
26         SLAVE_EVENT_DELETE,
27         SLAVE_EVENT_FAULT, /* Critical fault */
28
29         SLAVE_EVENT_PAUSE,
30         SLAVE_EVENT_RESUME,
31
32         SLAVE_NEED_TO_REACTIVATE
33 };
34
35 enum slave_state {
36         /*!
37          * Launch the slave but not yet receives "hello" packet
38          */
39         SLAVE_REQUEST_TO_LAUNCH,
40
41         /*!
42          * \note
43          * Terminate the slave but not yet receives dead signal
44          */
45         SLAVE_REQUEST_TO_TERMINATE,
46
47         /*!
48          * \note
49          * No slave process exists, just slave object created
50          */
51         SLAVE_TERMINATED,
52
53         /*!
54          * \note
55          * State change request is sent,
56          */
57         SLAVE_REQUEST_TO_PAUSE,
58         SLAVE_REQUEST_TO_RESUME,
59
60         /*!
61          * \note
62          * SLAVE_ACTIVATED = { SLAVE_PAUSED, SLAVE_RESUMED }
63          */
64         SLAVE_PAUSED,
65         SLAVE_RESUMED,
66
67         SLAVE_ERROR = 0xFF /* Explicitly define the size of this enum type */
68 };
69
70 extern struct slave_node *slave_ref(struct slave_node *slave);
71 extern struct slave_node *slave_unref(struct slave_node *slave);
72 extern const int const slave_refcnt(struct slave_node *slave);
73
74 /*!
75  * \brief
76  * Create a new slave object or destroy it
77  *
78  * \param[in] name
79  * \param[in] is_secured
80  * \param[in] abi
81  * \param[in] pkgname
82  * \param[in] period
83  * \return slave_node
84  */
85 extern struct slave_node *slave_create(const char *name, int is_secured, const char *abi, const char *pkgname, int network);
86
87 /*!
88  * \brief
89  * \param[in] slave
90  * \return void
91  */
92 extern void slave_destroy(struct slave_node *slave);
93
94 /*!
95  * \brief
96  * Launch or terminate a slave
97  * \param[in] slave
98  * \return int
99  */
100 extern int slave_activate(struct slave_node *slave);
101
102 /*!
103  * \brief After this function call, the slave object can be deleted
104  * \param[in] slave
105  */
106 extern struct slave_node *slave_deactivate(struct slave_node *slave) __attribute__((warn_unused_result));
107
108 /*!
109  * To check the slave's activation state
110  */
111 extern const int const slave_is_activated(struct slave_node *slave);
112 extern int slave_activated(struct slave_node *slave);
113
114 extern int slave_give_more_ttl(struct slave_node *slave);
115 extern int slave_freeze_ttl(struct slave_node *slave);
116 extern int slave_thaw_ttl(struct slave_node *slave);
117 extern int slave_expired_ttl(struct slave_node *slave);
118
119 /*!
120  * \NOTE
121  * To mangage the unexpected termination of a slave
122  * After this function call, the slave object can be deleted
123  */
124 extern struct slave_node *slave_deactivated_by_fault(struct slave_node *slave) __attribute__((warn_unused_result));
125
126 /*!
127  * \NOTE
128  * After this function, the slave object can be deleted
129  */
130 extern struct slave_node *slave_deactivated(struct slave_node *slave) __attribute__((warn_unused_result));
131
132 extern int slave_event_callback_add(struct slave_node *slave, enum slave_event event, int (*cb)(struct slave_node *, void *), void *data);
133 extern int slave_event_callback_del(struct slave_node *slave, enum slave_event event, int (*cb)(struct slave_node *, void *), void *data);
134
135 extern int slave_set_data(struct slave_node *slave, const char *tag, void *data);
136 extern void *slave_del_data(struct slave_node *slave, const char *tag);
137 extern void *slave_data(struct slave_node *slave, const char *tag);
138
139 extern struct slave_node *slave_find_by_pid(pid_t pid);
140 extern struct slave_node *slave_find_by_name(const char *name);
141 extern struct slave_node *slave_find_by_pkgname(const char *pkgname);
142 extern struct slave_node *slave_find_by_rpc_handle(int handle);
143
144 extern void slave_dead_handler(struct slave_node *slave);
145 extern const int const slave_is_secured(const struct slave_node *slave);
146 extern const char * const slave_name(const struct slave_node *slave);
147 extern const pid_t const slave_pid(const struct slave_node *slave);
148 extern const char * const slave_abi(const struct slave_node *slave);
149 extern int slave_set_pid(struct slave_node *slave, pid_t pid);
150
151 /*!
152  * \note
153  * Used for making decision of destroying a slave or not
154  * Used for balancing load of the slave.
155  */
156 extern void slave_load_package(struct slave_node *slave);
157 extern void slave_unload_package(struct slave_node *slave);
158 extern int const slave_loaded_package(struct slave_node *slave);
159 extern struct slave_node *slave_find_available(const char *abi, int secured, int network);
160
161 extern double const slave_ttl(const struct slave_node *slave);
162
163 /*!
164  * \note
165  * Used for making decision of activating a slave or not
166  */
167 extern void slave_load_instance(struct slave_node *slave);
168
169 /*!
170  * \NOTE
171  * After this function call, the slave object can be deleted.
172  */
173 extern struct slave_node *slave_unload_instance(struct slave_node *slave) __attribute__((warn_unused_result));
174
175 extern int const slave_loaded_instance(struct slave_node *slave);
176
177 extern int slave_resume(struct slave_node *slave);
178 extern int slave_pause(struct slave_node *slave);
179
180 extern const char *slave_pkgname(const struct slave_node *slave);
181 extern enum slave_state slave_state(const struct slave_node *slave);
182 extern const char *slave_state_string(const struct slave_node *slave);
183
184 extern const void *slave_list(void);
185 extern int const slave_fault_count(const struct slave_node *slave);
186
187 extern int slave_need_to_reactivate_instances(struct slave_node *slave);
188 extern void slave_set_reactivate_instances(struct slave_node *slave, int reactivate);
189
190 extern void slave_set_reactivation(struct slave_node *slave, int flag);
191 extern int slave_need_to_reactivate(struct slave_node *slave);
192
193 extern int slave_network(const struct slave_node *slave);
194 extern void slave_set_network(struct slave_node *slave, int network);
195
196 extern int slave_deactivate_all(int reactivate, int reactivate_instances);
197 extern int slave_activate_all(void);
198
199 /* End of a file */