A device detection library that is used natively or by 51Degrees products

dataset.h

1/* *********************************************************************
2 * This Original Work is copyright of 51 Degrees Mobile Experts Limited.
3 * Copyright 2026 51 Degrees Mobile Experts Limited, Davidson House,
4 * Forbury Square, Reading, Berkshire, United Kingdom RG1 3EU.
5 *
6 * This Original Work is licensed under the European Union Public Licence
7 * (EUPL) v.1.2 and is subject to its terms as set out below.
8 *
9 * If a copy of the EUPL was not distributed with this file, You can obtain
10 * one at https://opensource.org/licenses/EUPL-1.2.
11 *
12 * The 'Compatible Licences' set out in the Appendix to the EUPL (as may be
13 * amended by the European Commission) shall be deemed incompatible for
14 * the purposes of the Work and the provisions of the compatibility
15 * clause in Article 5 of the EUPL shall not apply.
16 *
17 * If using the Work as, or as part of, a network application, by
18 * including the attribution notice(s) required under Article 5 of the EUPL
19 * in the end user terms of the application under an appropriate heading,
20 * such notice(s) shall fulfill the requirements of that article.
21 * ********************************************************************* */
22
23#ifndef FIFTYONE_DEGREES_DATASET_H_INCLUDED
24#define FIFTYONE_DEGREES_DATASET_H_INCLUDED
25
26#ifdef FIFTYONE_DEGREES_IPI_SYMBOLS
27#include "ipiSymbols.h"
28#endif
29
92
93#include "exceptions.h"
94#include "file.h"
95#include "memory.h"
96#include "resource.h"
97#include "properties.h"
98#include "headers.h"
99#include "config.h"
100#include "overrides.h"
101#include "common.h"
102#include "indices.h"
103
107typedef struct fiftyone_degrees_dataset_base_t {
138 const void *config;
140
158 void *dataSet,
159 const void *config,
161 void *memory,
163 fiftyoneDegreesException *exception);
164
185 void *dataSet,
186 const void *config,
188 const char *fileName,
189 fiftyoneDegreesException *exception);
190
208 void *state,
209 fiftyoneDegreesPropertiesGetMethod getPropertyMethod,
210 fiftyoneDegreesEvidencePropertiesGetMethod getEvidencePropertiesMethod);
211
228 void *state,
229 fiftyoneDegreesHeadersGetMethod getHeaderMethod,
230 fiftyoneDegreesException* exception);
231
247 const char *fileName,
248 fiftyoneDegreesFileOffset bytesToCompare);
249
261
267
277
284
291
320 void *source,
322 size_t dataSetSize,
324 void(*freeDataSet)(void*),
325 fiftyoneDegreesException *exception);
326
353 const char *fileName,
354 size_t dataSetSize,
356 void(*freeDataSet)(void*),
357 fiftyoneDegreesException *exception);
358
366#define FIFTYONE_DEGREES_DATASET_RELOAD(t) \
367 \
385fiftyoneDegreesStatusCode fiftyoneDegrees##t##ReloadManagerFromMemory( \
386fiftyoneDegreesResourceManager *manager, \
387void *source, \
388fiftyoneDegreesFileOffset length, \
389fiftyoneDegreesException *exception) { \
390 return fiftyoneDegreesDataSetReloadManagerFromMemory( \
391 manager, \
392 source, \
393 length, \
394 sizeof(DataSet##t), \
395 initDataSetFromMemory, \
396 freeDataSet, \
397 exception); \
398} \
399 \
415fiftyoneDegreesStatusCode fiftyoneDegrees##t##ReloadManagerFromFile( \
416fiftyoneDegreesResourceManager* manager, \
417const char *fileName, \
418fiftyoneDegreesException *exception) { \
419 return fiftyoneDegreesDataSetReloadManagerFromFile( \
420 manager, \
421 fileName, \
422 sizeof(DataSet##t), \
423 initDataSetFromFile, \
424 freeDataSet, \
425 exception); \
426} \
427 \
442fiftyoneDegreesStatusCode fiftyoneDegrees##t##ReloadManagerFromOriginalFile( \
443fiftyoneDegreesResourceManager* manager, \
444fiftyoneDegreesException *exception) { \
445 fiftyoneDegreesStatusCode status = FIFTYONE_DEGREES_STATUS_NOT_SET; \
446 DataSet##t* dataSet = fiftyoneDegreesDataSet##t##Get(manager); \
447 status = fiftyoneDegrees##t##ReloadManagerFromFile( \
448 manager, \
449 dataSet->b.b.masterFileName, \
450 exception); \
451 fiftyoneDegreesDataSet##t##Release(dataSet); \
452 return status; \
453}
454
458
459#endif
fiftyoneDegreesDataSetBase * fiftyoneDegreesDataSetGet(fiftyoneDegreesResourceManager *manager)
Gets a pointer to the active data set from a resource manager.
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetInitInMemory(fiftyoneDegreesDataSetBase *dataSet, fiftyoneDegreesMemoryReader *reader)
Initialses the data set from data stored in continuous memory.
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetReloadManagerFromFile(fiftyoneDegreesResourceManager *manager, const char *fileName, size_t dataSetSize, fiftyoneDegreesDataSetInitFromFileMethod initDataSet, void(*freeDataSet)(void *), fiftyoneDegreesException *exception)
Reload the data set being used by the resource manager using the data file location specified.
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetInitHeaders(fiftyoneDegreesDataSetBase *dataSet, void *state, fiftyoneDegreesHeadersGetMethod getHeaderMethod, fiftyoneDegreesException *exception)
Initialises the HTTP headers in the data set.
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetInitProperties(fiftyoneDegreesDataSetBase *dataSet, fiftyoneDegreesPropertiesRequired *properties, void *state, fiftyoneDegreesPropertiesGetMethod getPropertyMethod, fiftyoneDegreesEvidencePropertiesGetMethod getEvidencePropertiesMethod)
Initialises the properties in the data set.
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetReloadManagerFromMemory(fiftyoneDegreesResourceManager *manager, void *source, fiftyoneDegreesFileOffset length, size_t dataSetSize, fiftyoneDegreesDataSetInitFromMemoryMethod initDataSet, void(*freeDataSet)(void *), fiftyoneDegreesException *exception)
Reload the data set being used by the resource manager using a data file loaded into contiguous memor...
void fiftyoneDegreesDataSetFree(fiftyoneDegreesDataSetBase *dataSet)
Closes the data set by freeing anything which has been initialised at creation.
void fiftyoneDegreesDataSetReset(fiftyoneDegreesDataSetBase *dataSet)
Resets a newly allocated data set structure ready for initialisation.
fiftyoneDegreesStatusCode(* fiftyoneDegreesDataSetInitFromMemoryMethod)(void *dataSet, const void *config, fiftyoneDegreesPropertiesRequired *properties, void *memory, fiftyoneDegreesFileOffset size, fiftyoneDegreesException *exception)
Initialses the data set from data stored in continuous memory.
Definition dataset.h:157
fiftyoneDegreesStatusCode(* fiftyoneDegreesDataSetInitFromFileMethod)(void *dataSet, const void *config, fiftyoneDegreesPropertiesRequired *properties, const char *fileName, fiftyoneDegreesException *exception)
Initialses the data set from data stored on file.
Definition dataset.h:184
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetInitFromFile(fiftyoneDegreesDataSetBase *dataSet, const char *fileName, fiftyoneDegreesFileOffset bytesToCompare)
Initialses the data set from data stored on file.
void fiftyoneDegreesDataSetRelease(fiftyoneDegreesDataSetBase *dataSet)
Releases a reference to a data set which has been fetched via the DataSetGet method.
long fiftyoneDegreesFileOffset
Type for file offset in API.
Definition fileOffset.h:73
#define FIFTYONE_DEGREES_FILE_MAX_PATH
Define the max path length on the target system.
Definition file.h:218
fiftyoneDegreesHeaderArray fiftyoneDegreesHeaders
Array of headers used to easily access and track the size of the array.
Definition headers.h:171
long(* fiftyoneDegreesHeadersGetMethod)(void *state, uint32_t index, fiftyoneDegreesCollectionItem *nameItem)
Gets the unique id and name of the header at the requested index.
Definition headers.h:182
const fiftyoneDegreesString *(* fiftyoneDegreesPropertiesGetMethod)(void *state, uint32_t index, fiftyoneDegreesCollectionItem *item)
Returns a string for the property at the index provided or NULL if there is no property available at ...
Definition properties.h:249
uint32_t(* fiftyoneDegreesEvidencePropertiesGetMethod)(void *state, fiftyoneDegreesPropertyAvailable *property, fiftyoneDegreesEvidenceProperties *evidenceProperties)
Populates the evidence properties structure with the indexes of the properties required by the proper...
Definition properties.h:267
fiftyoneDegreesPropertyAvailableArray fiftyoneDegreesPropertiesAvailable
Array of properties which are available in a data set.
Definition properties.h:223
fiftyoneDegreesStatusCode
Status returned from the initialisation of a resource.
Definition status.h:81
Base data set structure which contains the 'must have's for all data sets.
Definition dataset.h:107
fiftyoneDegreesHeaders * uniqueHeaders
Related HTTP headers.
Definition dataset.h:130
const void * config
Pointer to the config used to create the dataset.
Definition dataset.h:138
const char fileName[FIFTYONE_DEGREES_FILE_MAX_PATH]
Path to the file used to initialise the data set.
Definition dataset.h:108
bool isInMemory
True if the data file has been read into continuous memory.
Definition dataset.h:124
fiftyoneDegreesOverridePropertyArray * overridable
Array of properties that can be overridden.
Definition dataset.h:131
const char masterFileName[FIFTYONE_DEGREES_FILE_MAX_PATH]
Path to the file used to initialise the data set.
Definition dataset.h:115
void * memoryToFree
A pointer to the memory where the data within the data set is held.
Definition dataset.h:119
fiftyoneDegreesIndicesPropertyProfile * indexPropertyProfile
Index to look up profile values by property.
Definition dataset.h:134
fiftyoneDegreesResourceHandle * handle
Pointer to the handle that tracks this data set instance.
Definition dataset.h:127
fiftyoneDegreesFilePool filePool
Linked list of file readers.
Definition dataset.h:126
fiftyoneDegreesPropertiesAvailable * available
Available properties.
Definition dataset.h:129
Structure used to represent a 51Degrees exception and passed into methods that might generate excepti...
Definition exceptions.h:115
Stack of handles used to read data from a single source file.
Definition file.h:233
Maps the profile index and the property index to the first value index of the profile for the propert...
Definition indices.h:121
Used to read data from memory in a similar manner to a file handle.
Definition memory.h:58
Array of items of type fiftyoneDegreesOverrideProperty used to easily access and track the size of th...
Definition overrides.h:107
Defines a set of properties which are required by a caller.
Definition properties.h:229
Handle for a shared resource.
Definition resource.h:161
Manager structure used to provide access to a shared and changing resource.
Definition resource.h:177