summaryrefslogtreecommitdiff
path: root/src/persistence_client_library_handle.h
blob: 1a1a9984498cf2564b020f78ec019915d473bb0d (plain)
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
#ifndef PERSISTENCE_CLIENT_LIBRARY_HANDLE_H
#define PERSISTENCE_CLIENT_LIBRARY_HANDLE_H

/******************************************************************************
 * Project         Persistency
 * (c) copyright   2012
 * Company         XS Embedded GmbH
 *****************************************************************************/
/******************************************************************************
 * This Source Code Form is subject to the terms of the
 * Mozilla Public License, v. 2.0. If a  copy of the MPL was not distributed
 * with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
******************************************************************************/
 /**
 * @file           persistence_client_library_handle.h
 * @ingroup        Persistence client library
 * @author         Ingo Huerner
 * @brief          Header of the persistence client library handle.
 *                 Library provides an API to access persistent data
 * @see            
 */

#include "persistence_client_library_data_organization.h"


/// key handle structure definition
typedef struct _PersistenceKeyHandle_s
{
   /// logical database id
   unsigned int ldbid;
   /// User No
   unsigned int user_no;
   /// Seat No
   unsigned int seat_no;
   /// Resource ID
   char resource_id[PERS_DB_MAX_LENGTH_KEY_NAME];
} PersistenceKeyHandle_s;



typedef struct _PersList_item_s
{
  int fd;
  struct _PersList_item_s *next;
} PersList_item_s;



/// file handle structure definition
typedef struct _PersistenceFileHandle_s
{
	/// access permission read/write
	PersistencePermission_e permission;
	/// flag to indicate if a backup has already been created
   int backupCreated;
   /// flag to indicate if file must be cached
   int cacheStatus;
   /// the user id
   int userId;
   /// path to the backup file
   char backupPath[PERS_ORG_MAX_LENGTH_PATH_FILENAME];
   /// path to the checksum file
   char csumPath[PERS_ORG_MAX_LENGTH_PATH_FILENAME];
   /// the file path
   char* filePath;
} PersistenceFileHandle_s;



/// list to store open file handles (pclFileCreatePath and pclFileReleasePath)
extern PersList_item_s* gCPOpenFdList;

/// list to store open file handles
extern PersList_item_s* gOpenFdList;


//----------------------------------------------------------------
//----------------------------------------------------------------


/**
 * @brief delete handle trees
 */
void deleteHandleTrees(void);


/**
 * @brief get persistence handle
 *
 * @return a new handle or 0 if an error occurred or EPERS_MAXHANDLE if max no of handles is reached
 */
int get_persistence_handle_idx();


/**
 * @brief close persistence handle
 *
 * @param handle to close
 */
void set_persistence_handle_close_idx(int handle);


/**
 * @brief close open key handles
 *
 */
void close_all_persistence_handle();

//----------------------------------------------------------------
//----------------------------------------------------------------

/**
 * @brief set data to the key handle
 *
 * @param idx the index
 * @param id the resource id
 * @param ldbid the logical database id
 * @param user_no the user identifier
 * @param seat_no the seat number
 *
 * @return a positive value (0 or greather) or -1 on error
 */
int set_key_handle_data(int idx, const char* id, unsigned int ldbid,  unsigned int user_no, unsigned int seat_no);


/**
 * @brief set data to the key handle
 *
 * @param idx the index
 * @param handleStruct the handle structure
 *
 * @return 0 on success, -1 on error
 */
int get_key_handle_data(int idx, PersistenceKeyHandle_s* handleStruct);


/**
 * @brief initialize the key handle array to defined values
 */
void init_key_handle_array();


/**
 * @brief set data to the key handle
 *
 * @param idx the index
 *
 */
void clear_key_handle_array(int idx);

//----------------------------------------------------------------
//----------------------------------------------------------------

/**
 * @brief set data to the key handle
 *
 * @param idx the index
 * @param permission the permission (read/write, read only, write only)
 * @param backupCreated 0 is a backup has not been created or 1 if a backup has been created
 * @param backup path to the backup file
 * @param csumPath the path to the checksum file
 * @param filePath the path to the file
 *
 */
int set_file_handle_data(int idx, PersistencePermission_e permission, const char* backup, const char* csumPath,  char* filePath);


/**
 * @brief remove file handle from file tree
 *
 * @param idx the index
 */
int remove_file_handle_data(int idx);

/**
 * @brief set data to the key handle
 *
 * @param idx the index
 *
 * @return the file permission
 */
int get_file_permission(int idx);


/**
 * @brief set data to the key handle
 * @attention "N index check will be done"
 *
 * @param idx the index
 *
 * @return the path to the backup
 */
char* get_file_backup_path(int idx);


/**
 * @brief get the file checksum path
 * @attention "N index check will be done"
 *
 * @param idx the index
 *
 * @return the checksum path
 */
char* get_file_checksum_path(int idx);


/**
 * @brief set the file backup status of the file
 * @attention "No index check will be done"
 *
 * @param idx the index
 * @param status the backup status, 0 backup has been created,
 *                                  1 backup has not been created
 */
void set_file_backup_status(int idx, int status);


/**
 * @brief get the backup status of the file
 * @attention "No index check will be done"
 *
 * @param idx the index
 *
 * @return 0 if no backup has been created,
 *         1 if backup has been created
 */
int get_file_backup_status(int idx);


/**
 * @brief set the file cache status
 * @attention "No index check will be done"
 *
 * @param idx the index
 * @param status the cache status, 0 file must not be cached,
 *                                 1 file must be cached
 */
void set_file_cache_status(int idx, int status);


/**
 * @brief get the cache status of the file
 * @attention "No index check will be done"
 *
 * @param idx the index
 *
 * @return 0 if file must not be cached,
 *         1 if file must be cached
 */
int get_file_cache_status(int idx);


/**
 * @brief set the user id
 * @attention "No index check will be done"
 *
 * @param idx the index
 * @param userID the user id
 */
void set_file_user_id(int idx, int userID);


/**
 * @brief get the user id of the file
 * @attention "No index check will be done"
 *
 * @param idx the index
 *
 * @return the user id
 */
int get_file_user_id(int idx);
//----------------------------------------------------------------
//----------------------------------------------------------------

/**
 * @brief set data to the key handle
 *
 * @param idx the index
 * @param permission the permission (read/write, read only, write only)
 * @param backupCreated 0 is a backup has not been created or 1 if a backup has been created
 * @param backup path to the backup file
 * @param csumPath the path to the checksum file
 * @param filePath the path to the file
 *
 */
int set_ossfile_handle_data(int idx, PersistencePermission_e permission, int backupCreated,
		                   const char* backup, const char* csumPath,  char* filePath);


/**
 * @brief set data to the key handle
 *
 * @param idx the index
 *
 * @return the file permission
 */
int get_ossfile_permission(int idx);


/**
 * @brief get file backup path
 * @attention "No index check will be done"
 *
 * @param idx the index
 *
 * @return the path to the backup
 */
char* get_ossfile_backup_path(int idx);


/**
 * @brief get file path
 * @attention "No index check will be done"
 *
 * @param idx the index
 *
 * @return the path to the backup
 */
char* get_ossfile_file_path(int idx);


/**
 * @brief get the file checksum path
 * @attention "No index check will be done"
 *
 * @param idx the index
 *
 * @return the checksum path
 */
char* get_ossfile_checksum_path(int idx);

/**
 * @brief get the file checksum path
 * @attention "No index check will be done"
 *
 * @param idx the index
 * @param file pointer to the file and path
 *
 * @return the checksum path
 */
void set_ossfile_file_path(int idx, char* file);

/**
 * @brief set the file backup status of the file
 * @attention "No index check will be done"
 *
 * @param idx the index
 * @param status the backup status, 0 backup has been created,
 *                                  1 backup has not been created
 */
void set_ossfile_backup_status(int idx, int status);


/**
 * @brief get the backup status of the file
 * @attention "No index check will be done"
 *
 * @param idx the index
 *
 * @return 0 if no backup has been created,
 *         1 if backup has been created
 */
int get_ossfile_backup_status(int idx);


/**
 * @brief remove file handle from ass file tree
 *
 * @param idx the index
 */
int remove_ossfile_handle_data(int idx);


//----------------------------------------------------------------
//----------------------------------------------------------------

/**
 * @brief insert a list item at the end of the list
 *
 * @param list the list to append the item to
 * @param fd the file handle
 */
int list_item_insert(PersList_item_s** list, int fd);


/**
 * @brief check if a item is in a list
 *
 * @param handle of the item
 * @param fd the file handle
 */
int list_item_get_data(PersList_item_s** list, int fd);


/**
 * @brief remove a list item from the given list with the matching handle
 *
 * @param list the list to remove the item from
 * @param fd the file handle
 */
int  list_item_remove(PersList_item_s** list, int fd);


/**
 * @brief destroy a list (free all items)
 *
 * @param list the list to destroy
 */
void list_destroy(PersList_item_s** list);


/**
 * @brief insert a list item at the end of the list
 *
 * @param list the list to append the item to
 * @param fd the file handle
 */
void list_iterate(PersList_item_s** list, int(*callback)(int a));

#endif /* PERSISTENCY_CLIENT_LIBRARY_HANDLE_H */