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

hash.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 the subject of the following patents and patent
7 * applications, owned by 51 Degrees Mobile Experts Limited of 5 Charlotte
8 * Close, Caversham, Reading, Berkshire, United Kingdom RG4 7BY:
9 * European Patent No. 3438848; and
10 * United States Patent No. 10,482,175.
11 *
12 * This Original Work is licensed under the European Union Public Licence
13 * (EUPL) v.1.2 and is subject to its terms as set out below.
14 *
15 * If a copy of the EUPL was not distributed with this file, You can obtain
16 * one at https://opensource.org/licenses/EUPL-1.2.
17 *
18 * The 'Compatible Licences' set out in the Appendix to the EUPL (as may be
19 * amended by the European Commission) shall be deemed incompatible for
20 * the purposes of the Work and the provisions of the compatibility
21 * clause in Article 5 of the EUPL shall not apply.
22 *
23 * If using the Work as, or as part of, a network application, by
24 * including the attribution notice(s) required under Article 5 of the EUPL
25 * in the end user terms of the application under an appropriate heading,
26 * such notice(s) shall fulfill the requirements of that article.
27 * ********************************************************************* */
28
29#ifndef FIFTYONE_DEGREES_HASH_INCLUDED
30#define FIFTYONE_DEGREES_HASH_INCLUDED
31
39
40#if !defined(DEBUG) && !defined(_DEBUG) && !defined(NDEBUG)
41#define NDEBUG
42#endif
43
44#include <stdlib.h>
45#include <stdio.h>
46#include <string.h>
47#include <limits.h>
48#include <math.h>
49#include <time.h>
50#include <ctype.h>
51#include <assert.h>
52#ifdef _MSC_VER
53#pragma warning(push)
54#pragma warning(disable : 5105)
55#include <windows.h>
56#pragma warning(pop)
57#endif
58#include "../../common/common.h"
59#include "../../common/data.h"
60#include "../../common/exceptions.h"
61#include "../../common/threading.h"
62#include "../../common/file.h"
63#include "../../common/collection.h"
64#include "../../common/evidence.h"
65#include "../../common/list.h"
66#include "../../common/resource.h"
67#include "../../common/properties.h"
68#include "../../common/status.h"
69#include "../../common/date.h"
70#include "../../common/pool.h"
71#include "../../common/component.h"
72#include "../../common/property.h"
73#include "../../common/value.h"
74#include "../../common/profile.h"
75#include "../../common/overrides.h"
76#include "../../common/json.h"
77
78#include "../config-dd.h"
79#include "../dataset-dd.h"
80#include "../results-dd.h"
81#include "graph.h"
82
84#ifndef FIFTYONE_DEGREES_CACHE_CONCURRENCY
85#ifndef FIFTYONE_DEGREES_NO_THREADING
86#define FIFTYONE_DEGREES_CACHE_CONCURRENCY 10
87#else
88#define FIFTYONE_DEGREES_CACHE_CONCURRENCY 1
89#endif
90#endif
91
95#ifndef FIFTYONE_DEGREES_EVIDENCE_HIGH_ENTROPY_VALUES
96#define FIFTYONE_DEGREES_EVIDENCE_HIGH_ENTROPY_VALUES \
97 (FIFTYONE_DEGREES_COMMON_COOKIE_PREFIX \
98 "gethighentropyvalues")
99#endif
100
104#ifndef FIFTYONE_DEGREES_EVIDENCE_STRUCTURED_USER_AGENT
105#define FIFTYONE_DEGREES_EVIDENCE_STRUCTURED_USER_AGENT \
106 (FIFTYONE_DEGREES_COMMON_COOKIE_PREFIX \
107 "structureduseragent")
108#endif
109
113#ifndef FIFTYONE_DEGREES_EVIDENCE_DEVICE_ID
114#define FIFTYONE_DEGREES_EVIDENCE_DEVICE_ID \
115 (FIFTYONE_DEGREES_COMMON_COOKIE_PREFIX \
116 "deviceId")
117#endif
118
122
127typedef enum e_fiftyone_degrees_hash_match_method {
128 FIFTYONE_DEGREES_HASH_MATCH_METHOD_NONE,
129 FIFTYONE_DEGREES_HASH_MATCH_METHOD_PERFORMANCE,
130 FIFTYONE_DEGREES_HASH_MATCH_METHOD_COMBINED,
131 FIFTYONE_DEGREES_HASH_MATCH_METHOD_PREDICTIVE,
134
136#pragma pack(push, 1)
137typedef struct fiftyoneDegrees_hash_dataset_header_t {
138 const int32_t versionMajor;
139 const int32_t versionMinor;
140 const int32_t versionBuild;
141 const int32_t versionRevision;
143 const byte tag[16];
144 const byte exportTag[16];
145 const int32_t copyrightOffset;
147 const int16_t age;
148 const int32_t minUserAgentCount;
150 const int32_t nameOffset;
152 const int32_t formatOffset;
180#pragma pack(pop)
181
187typedef struct fiftyone_degrees_config_hash_t {
202 int32_t difference;
206 int32_t drift;
218
223typedef struct fiftyone_degrees_hash_rootnodes_t {
229
243typedef struct fiftyone_degrees_hash_value_profiles_t {
245 uint32_t keysCount;
246 uint32_t profilesCount;
247 const char **names;
249 uint32_t *propertyIndexes;
254 uint32_t *firstKeys;
256 uint32_t *starts;
258 uint32_t *profiles;
260
270typedef struct fiftyone_degrees_dataset_hash_t {
278 fiftyoneDegreesHeaderPtrs** componentHeaders;
299
301typedef struct fiftyone_degrees_result_hash_t fiftyoneDegreesResultHash;
303
309typedef struct fiftyone_degrees_result_hash_t {
311 uint32_t *profileOffsets;
318 int32_t iterations;
320 int32_t difference;
322 int32_t drift;
324 int32_t matchedNodes;
335
339#define FIFTYONE_DEGREES_RESULTS_HASH_MEMBERS \
340 fiftyoneDegreesResultsDeviceDetection b; \
341 fiftyoneDegreesCollectionItem propertyItem; \
343 fiftyoneDegreesList values; \
345 fiftyoneDegreesEvidenceKeyValuePairArray *evidence; \
356 size_t evidenceBytes; \
357 int evidencePrefixes; \
359 bool profileIdsOverridden;
362
366
367
378
382
391
401
414
429
439
450
454
475 const char *fileName,
476 fiftyoneDegreesException *exception);
477
502 const char *fileName,
503 fiftyoneDegreesException *exception);
504
535 const char *fileName,
536 const char **indexedProperties,
537 int indexedPropertiesCount,
538 fiftyoneDegreesException *exception);
539
563 void *memory,
564 long size,
565 fiftyoneDegreesException *exception);
566
592 void *memory,
593 long size,
594 fiftyoneDegreesException *exception);
595
626 void *memory,
627 long size,
628 const char **indexedProperties,
629 int indexedPropertiesCount,
630 fiftyoneDegreesException *exception);
631
677 fiftyoneDegreesException *exception);
678
698 const char* userAgent,
699 size_t userAgentLength,
700 fiftyoneDegreesException *exception);
716 const char* deviceId,
717 size_t deviceIdLength,
718 fiftyoneDegreesException *exception);
719
741 uint32_t userAgentCapacity,
742 uint32_t overridesCapacity);
743
752
774 int requiredPropertyIndex,
775 fiftyoneDegreesException *exception);
776
799 int requiredPropertyIndex,
800 fiftyoneDegreesException *exception);
801
809
834 int requiredPropertyIndex,
835 fiftyoneDegreesException *exception);
851 const char *propertyName,
852 char* const buffer,
853 size_t const length,
854 char* const separator,
855 fiftyoneDegreesException *exception);
856
873 char* const buffer,
874 size_t const length,
875 fiftyoneDegreesException* exception);
876
892EXTERNAL size_t
895 const int requiredPropertyIndex,
896 char* const buffer,
897 size_t const length,
898 char* const separator,
899 fiftyoneDegreesException *exception);
900
917 char* const buffer,
918 size_t const length,
919 char* const separator,
920 fiftyoneDegreesException* exception);
921
942 fiftyoneDegreesException *exception);
943
965 const char *fileName,
966 fiftyoneDegreesException *exception);
967
991 void *source,
992 long length,
993 fiftyoneDegreesException *exception);
994
1007
1016
1017
1042 const char *propertyName,
1043 const char *valueName,
1044 void *state,
1046 fiftyoneDegreesException *exception);
1047
1066 const char *propertyName,
1067 const char *valueName,
1068 uint32_t *profileIds,
1069 uint32_t length,
1070 fiftyoneDegreesException *exception);
1071
1088 char* const buffer,
1089 size_t const length,
1091
1105 char* const buffer,
1106 size_t const length,
1107 fiftyoneDegreesException *exception);
1108
1112
1113#endif
#define FIFTYONE_DEGREES_ARRAY_TYPE(t, m)
Simple array structure definition macro used for generic types.
Definition array.h:55
size_t fiftyoneDegreesResultsHashGetValuesJson(fiftyoneDegreesResultsHash *results, char *const buffer, size_t const length, fiftyoneDegreesException *exception)
Sets the buffer to a JSON string that represents all the available properties and values in the resul...
fiftyoneDegreesResultsNoValueReason fiftyoneDegreesResultsHashGetNoValueReason(fiftyoneDegreesResultsHash *results, int requiredPropertyIndex, fiftyoneDegreesException *exception)
Gets the reason why a results does not contain valid values for a given property.
char * fiftyoneDegreesHashGetDeviceIdFromResult(fiftyoneDegreesDataSetHash *dataSet, fiftyoneDegreesResultHash *result, char *const buffer, size_t const length, fiftyoneDegreesException *exception)
Get the device id string from the single result provided.
#define FIFTYONE_DEGREES_RESULTS_HASH_MEMBERS
Macro defining the common members of a Hash result.
Definition hash.h:339
size_t fiftyoneDegreesResultsHashGetValuesString(fiftyoneDegreesResultsHash *results, const char *propertyName, char *const buffer, size_t const length, char *const separator, fiftyoneDegreesException *exception)
Sets the buffer the values associated in the results for the property name.
uint32_t fiftyoneDegreesHashGetProfileIdsForPropertyAndValue(fiftyoneDegreesResourceManager *manager, const char *propertyName, const char *valueName, uint32_t *profileIds, uint32_t length, fiftyoneDegreesException *exception)
Gets the ids of the profiles that contain the property and value provided.
EXTERNAL_VAR fiftyoneDegreesConfigHash fiftyoneDegreesHashDefaultConfig
Default detection configuration.
Definition hash.h:436
fiftyoneDegreesStatusCode fiftyoneDegreesHashReloadManagerFromFile(fiftyoneDegreesResourceManager *manager, const char *fileName, fiftyoneDegreesException *exception)
Reload the data set being used by the resource manager using the data file location specified.
fiftyoneDegreesResultHashArray fiftyoneDegreesResultsHash
Array of Hash results used to easily access and track the size of the array.
Definition hash.h:364
EXTERNAL_VAR fiftyoneDegreesConfigHash fiftyoneDegreesHashInMemoryConfig
DETECTION CONFIGURATIONS.
Definition hash.h:377
fiftyoneDegreesStatusCode fiftyoneDegreesHashInitManagerFromFileWithIndexedProperties(fiftyoneDegreesResourceManager *manager, fiftyoneDegreesConfigHash *config, fiftyoneDegreesPropertiesRequired *properties, const char *fileName, const char **indexedProperties, int indexedPropertiesCount, fiftyoneDegreesException *exception)
Initialises the resource manager as fiftyoneDegreesHashInitManagerFromFile does, and indexes the prof...
size_t fiftyoneDegreesResultsHashGetValuesStringAllProperties(fiftyoneDegreesResultsHash *results, char *const buffer, size_t const length, char *const separator, fiftyoneDegreesException *exception)
Sets the buffer to the values in the results of every required property index, one line for each inde...
fiftyoneDegreesDataSetHash * fiftyoneDegreesDataSetHashGet(fiftyoneDegreesResourceManager *manager)
Gets a safe reference to the Hash data set from the resource manager.
fiftyoneDegreesStatusCode fiftyoneDegreesHashInitManagerFromMemoryWithIndexedProperties(fiftyoneDegreesResourceManager *manager, fiftyoneDegreesConfigHash *config, fiftyoneDegreesPropertiesRequired *properties, void *memory, long size, const char **indexedProperties, int indexedPropertiesCount, fiftyoneDegreesException *exception)
Initialises the resource manager as fiftyoneDegreesHashInitManagerFromMemory does,...
fiftyoneDegreesHashMatchMethod
DATA STRUCTURES.
Definition hash.h:127
void fiftyoneDegreesDataSetHashRelease(fiftyoneDegreesDataSetHash *dataSet)
Release the reference to a data set returned by the fiftyoneDegreesDataSetHashGet method.
const char * fiftyoneDegreesResultsHashGetNoValueReasonMessage(fiftyoneDegreesResultsNoValueReason reason)
Gets a fuller description of the reason why a value is missing.
char * fiftyoneDegreesHashGetDeviceIdFromResults(fiftyoneDegreesResultsHash *results, char *const buffer, size_t const length, fiftyoneDegreesException *exception)
Get the device id string from the results provided.
fiftyoneDegreesStatusCode fiftyoneDegreesHashReloadManagerFromOriginalFile(fiftyoneDegreesResourceManager *manager, fiftyoneDegreesException *exception)
Reload the data set being used by the resource manager using the data file location which was used wh...
bool fiftyoneDegreesResultsHashGetHasValues(fiftyoneDegreesResultsHash *results, int requiredPropertyIndex, fiftyoneDegreesException *exception)
Gets whether or not the results provided contain valid values for the property index provided.
EXTERNAL_VAR fiftyoneDegreesConfigHash fiftyoneDegreesHashLowMemoryConfig
Low memory configuration.
Definition hash.h:400
fiftyoneDegreesResultsHash * fiftyoneDegreesResultsHashCreate(fiftyoneDegreesResourceManager *manager, uint32_t userAgentCapacity, uint32_t overridesCapacity)
Allocates a results structure containing a reference to the Hash data set managed by the resource man...
void fiftyoneDegreesResultsHashFree(fiftyoneDegreesResultsHash *results)
Frees the results structure created by the fiftyoneDegreesResultsHashCreate method.
size_t fiftyoneDegreesHashSizeManagerFromFile(fiftyoneDegreesConfigHash *config, fiftyoneDegreesPropertiesRequired *properties, const char *fileName, fiftyoneDegreesException *exception)
EXTERNAL METHODS.
int fiftyoneDegreesResultsHashFromDeviceId(fiftyoneDegreesResultsHash *results, const char *deviceId, size_t deviceIdLength, fiftyoneDegreesException *exception)
Process a single Device Id and populate the device offsets in the results structure.
EXTERNAL_VAR fiftyoneDegreesConfigHash fiftyoneDegreesHashBalancedTempConfig
Balanced configuration modified to create a temporary file copy of the source data file to avoid lock...
Definition hash.h:425
fiftyoneDegreesStatusCode fiftyoneDegreesHashInitManagerFromMemory(fiftyoneDegreesResourceManager *manager, fiftyoneDegreesConfigHash *config, fiftyoneDegreesPropertiesRequired *properties, void *memory, long size, fiftyoneDegreesException *exception)
Initialises the resource manager with a Hash data set resource populated from the Hash data set point...
void fiftyoneDegreesResultsHashFromEvidence(fiftyoneDegreesResultsHash *results, fiftyoneDegreesEvidenceKeyValuePairArray *evidence, fiftyoneDegreesException *exception)
Processes the evidence value pairs in the evidence collection and populates the result in the results...
uint32_t fiftyoneDegreesHashIterateProfilesForPropertyAndValue(fiftyoneDegreesResourceManager *manager, const char *propertyName, const char *valueName, void *state, fiftyoneDegreesProfileIterateMethod callback, fiftyoneDegreesException *exception)
Iterates over the profiles in the data set calling the callback method for any profiles that contain ...
size_t fiftyoneDegreesHashSizeManagerFromMemory(fiftyoneDegreesConfigHash *config, fiftyoneDegreesPropertiesRequired *properties, void *memory, long size, fiftyoneDegreesException *exception)
Gets the total size in bytes which will be allocated when intialising a Hash resource and associated ...
fiftyoneDegreesStatusCode fiftyoneDegreesHashReloadManagerFromMemory(fiftyoneDegreesResourceManager *manager, void *source, long length, fiftyoneDegreesException *exception)
Reload the data set being used by the resource manager using a data file loaded into contiguous memor...
void fiftyoneDegreesResultsHashFromUserAgent(fiftyoneDegreesResultsHash *results, const char *userAgent, size_t userAgentLength, fiftyoneDegreesException *exception)
Process a single User-Agent and populate the device offsets in the results structure.
fiftyoneDegreesStatusCode fiftyoneDegreesHashInitManagerFromFile(fiftyoneDegreesResourceManager *manager, fiftyoneDegreesConfigHash *config, fiftyoneDegreesPropertiesRequired *properties, const char *fileName, fiftyoneDegreesException *exception)
Initialises the resource manager with a Hash data set resource populated from the Hash data file refe...
size_t fiftyoneDegreesResultsHashGetValuesStringByRequiredPropertyIndex(fiftyoneDegreesResultsHash *results, const int requiredPropertyIndex, char *const buffer, size_t const length, char *const separator, fiftyoneDegreesException *exception)
Sets the buffer the values associated in the results for the property name.
fiftyoneDegreesCollectionItem * fiftyoneDegreesResultsHashGetValues(fiftyoneDegreesResultsHash *results, int requiredPropertyIndex, fiftyoneDegreesException *exception)
Populates the list of values in the results instance with value structure instances associated with t...
EXTERNAL_VAR fiftyoneDegreesConfigHash fiftyoneDegreesHashHighPerformanceConfig
Highest performance configuration.
Definition hash.h:387
EXTERNAL_VAR fiftyoneDegreesConfigHash fiftyoneDegreesHashBalancedConfig
Uses caching to balance memory usage and performance.
Definition hash.h:415
@ FIFTYONE_DEGREES_HASH_MATCH_METHODS_LENGTH
The length of the enum.
Definition hash.h:132
bool(* fiftyoneDegreesProfileIterateMethod)(void *state, fiftyoneDegreesCollectionItem *item)
Definition of a callback function which is passed an item of a type determined by the iteration metho...
Definition profile.h:163
fiftyoneDegreesResultsNoValueReason
Enum containing reasons which cause a value to not be present or valid.
Definition results.h:95
fiftyoneDegreesStatusCode
Status returned from the initialisation of a resource.
Definition status.h:81
Definition GettingStarted.c:67
Collection configuration structure which defines how the collection should be created by the create m...
Definition collection.h:295
Collection header structure which defines the size and location of the collection data.
Definition collection.h:282
All the shared methods and fields required by file, memory and cached collections.
Definition collection.h:408
Used to store a handle to the underlying item that could be used to release the item when it's finish...
Definition collection.h:315
Device detection configuration structure containing device detection specific configuration options,...
Definition config-dd.h:52
Hash specific configuration structure.
Definition hash.h:187
fiftyoneDegreesCollectionConfig maps
Maps collection config.
Definition hash.h:192
bool usePerformanceGraph
True if the performance optimized graph should be used for processing.
Definition hash.h:209
fiftyoneDegreesCollectionConfig rootNodes
Root nodes collection config.
Definition hash.h:197
bool usePredictiveGraph
True if the predictive optimized graph should be used for processing.
Definition hash.h:211
fiftyoneDegreesCollectionConfig properties
Properties collection config.
Definition hash.h:193
fiftyoneDegreesCollectionConfig nodes
Nodes collection config.
Definition hash.h:199
fiftyoneDegreesCollectionConfig values
Values collection config.
Definition hash.h:195
fiftyoneDegreesConfigDeviceDetection b
Base configuration.
Definition hash.h:188
fiftyoneDegreesCollectionConfig strings
Strings collection config.
Definition hash.h:189
int32_t drift
The maximum drift to allow when matching hashes.
Definition hash.h:206
bool traceRoute
True if the route through each graph should be traced during processing.
Definition hash.h:213
int32_t difference
The maximum difference to allow when matching hashes.
Definition hash.h:202
fiftyoneDegreesCollectionConfig profiles
Profiles collection config.
Definition hash.h:196
fiftyoneDegreesCollectionConfig components
Components collection config.
Definition hash.h:190
fiftyoneDegreesCollectionConfig profileOffsets
Profile offsets collection config.
Definition hash.h:200
Device detection data set structure which contains the 'must have's for all device detection data set...
Definition dataset-dd.h:52
Dataset header containing information about the dataset.
Definition hash.h:137
const fiftyoneDegreesDate nextUpdate
Date when the next data file will be available.
Definition hash.h:156
const int16_t age
Age of the data set format.
Definition hash.h:147
const int32_t copyrightOffset
Offset of the copyright string in the strings collection.
Definition hash.h:145
const int32_t versionMajor
Major version of the data file loaded.
Definition hash.h:138
const int32_t formatOffset
Offset of the data file format in the strings collection.
Definition hash.h:152
const int32_t versionBuild
Build version of the data file loaded.
Definition hash.h:140
const fiftyoneDegreesCollectionHeader profileOffsets
Size and location of the profile offsets collection.
Definition hash.h:175
const fiftyoneDegreesCollectionHeader rootNodes
Root nodes which point to the start of each graph used in detection.
Definition hash.h:170
const fiftyoneDegreesDate published
Date when the data file was published.
Definition hash.h:154
const int32_t nameOffset
Offset of the data file name in the strings collection.
Definition hash.h:150
const fiftyoneDegreesCollectionHeader properties
Size and location of the properties collection.
Definition hash.h:164
const byte tag[16]
Unique data file tag.
Definition hash.h:143
const fiftyoneDegreesCollectionHeader nodes
Size and location of the nodes collection.
Definition hash.h:173
const fiftyoneDegreesCollectionHeader values
Size and location of the values collection.
Definition hash.h:166
const int32_t versionRevision
Revision version of the data file loaded.
Definition hash.h:141
const int32_t versionMinor
Minor version of the data file loaded.
Definition hash.h:139
const fiftyoneDegreesCollectionHeader components
Size and location of the components collection.
Definition hash.h:160
const byte exportTag[16]
Tag identifying the data file export.
Definition hash.h:144
const int32_t minUserAgentCount
Minimum count for a User-Agent to be included in the data file export.
Definition hash.h:148
const fiftyoneDegreesCollectionHeader maps
Size and location of the maps collection.
Definition hash.h:162
const fiftyoneDegreesCollectionHeader strings
Size and location of the strings collection.
Definition hash.h:158
const fiftyoneDegreesCollectionHeader profiles
Size and location of the profiles collection.
Definition hash.h:168
Data set structure containing all the components used for detections.
Definition hash.h:270
fiftyoneDegreesCollection * profiles
Collection of all profiles.
Definition hash.h:288
uint32_t componentsAvailableCount
Number of components with properties.
Definition hash.h:283
fiftyoneDegreesHeaderPtrs ** componentHeaders
Array of headers for each component index.
Definition hash.h:278
const fiftyoneDegreesDataSetHashHeader header
Dataset header.
Definition hash.h:272
fiftyoneDegreesDataSetDeviceDetection b
Base data set.
Definition hash.h:271
fiftyoneDegreesList componentsList
List of component items from the components collection.
Definition hash.h:276
fiftyoneDegreesCollection * maps
Collection data file maps.
Definition hash.h:285
bool * componentsAvailable
Array of flags indicating if there are any properties available for the component with the matching i...
Definition hash.h:280
fiftyoneDegreesCollection * nodes
Collection of all hash nodes.
Definition hash.h:290
fiftyoneDegreesCollection * components
Collection of all components.
Definition hash.h:275
fiftyoneDegreesCollection * strings
Collection of all strings.
Definition hash.h:274
const fiftyoneDegreesConfigHash config
Copy of the configuration.
Definition hash.h:273
fiftyoneDegreesCollection * rootNodes
Collection of all root nodes.
Definition hash.h:289
fiftyoneDegreesCollection * profileOffsets
Collection of all offsets to profiles in the profiles collection.
Definition hash.h:291
fiftyoneDegreesCollection * properties
Collection of all properties.
Definition hash.h:286
fiftyoneDegreesCollection * values
Collection of all values.
Definition hash.h:287
fiftyoneDegreesHashValueProfiles * valueProfiles
Profiles holding each value of the properties named to index, or NULL when none were named.
Definition hash.h:294
Used to store the date when the dataset was produced and next date 51Degrees expect to provide a new ...
Definition date.h:62
Array of evidence key value pairs and a pointer to the next array if present or NULL of not present.
Definition evidence.h:195
Structure used to represent a 51Degrees exception and passed into methods that might generate excepti...
Definition exceptions.h:115
Trace node structure used to trace the route taken when evaluating a graph.
Definition graph.h:159
Data structure containing the root nodes for the combination of an evidence item and a component.
Definition hash.h:223
uint32_t predictiveNodeOffset
Offset in the nodes collection of the root node for the predictive graph.
Definition hash.h:226
uint32_t performanceNodeOffset
Offset in the nodes collection of the root node for the performance graph.
Definition hash.h:224
Index from each value of the properties named when the data set is initialised to the profiles holdin...
Definition hash.h:243
uint32_t propertiesCount
Number of properties named.
Definition hash.h:244
uint32_t * starts
Position in profiles of the first profile of each key, then profilesCount.
Definition hash.h:256
uint32_t keysCount
Number of values with a key.
Definition hash.h:245
uint32_t * profiles
Positions in the profile offsets collection.
Definition hash.h:258
uint32_t * propertyIndexes
Index in the properties collection of each property, or UINT32_MAX when the data file has no property...
Definition hash.h:249
uint32_t * firstKeys
Key of the first value of each property, then keysCount.
Definition hash.h:254
uint32_t * firstValueIndexes
Index in the values collection of the first value of each property.
Definition hash.h:252
uint32_t profilesCount
Number of entries in profiles.
Definition hash.h:246
const char ** names
Copy of each name the caller gave, in the order given, without nulls or repeats.
Definition hash.h:247
List structure which contains a list of collection items.
Definition list.h:116
Defines a set of properties which are required by a caller.
Definition properties.h:229
Manager structure used to provide access to a shared and changing resource.
Definition resource.h:177
Array of items of type fiftyoneDegreesResultHash used to easily access and track the size of the arra...
Definition hash.h:352
Singular User-Agent result returned by a Hash process method.
Definition hash.h:309
byte componentIndex
Index of the component the result was taken for when the results were populated, or UINT8_MAX if none...
Definition hash.h:325
fiftyoneDegreesResultUserAgent b
Base User-Agent result.
Definition hash.h:310
int32_t iterations
Number of iterations required to get the device offset.
Definition hash.h:318
int32_t matchedNodes
The number of hashes matched in the User-Agent.
Definition hash.h:324
int32_t drift
The maximum drift for a matched substring from the character position where it was expected to be fou...
Definition hash.h:322
uint32_t * profileOffsets
Array of profile offsets where the index is the component index.
Definition hash.h:311
int32_t difference
The total difference in hash code values between the matched substring and the actual substring.
Definition hash.h:320
fiftyoneDegreesGraphTraceNode * trace
The graph trace constructed during processing if the option was enabled (and the executable was compi...
Definition hash.h:328
fiftyoneDegreesHashMatchMethod method
The method used to provide the match result.
Definition hash.h:316
bool * profileIsOverriden
Array of boolean flags indicating whether the result profile offset at the same index is one which ha...
Definition hash.h:313
Singular User-Agent result returned by a device detection process method.
Definition results-dd.h:49