51Degrees Common C/C++  4.1

A shared functionality library that is used by 51Degrees products

evidence.h

1 /* *********************************************************************
2  * This Source Code Form is copyright of 51 Degrees Mobile Experts Limited.
3  * Copyright 2019 51 Degrees Mobile Experts Limited, 5 Charlotte Close,
4  * Caversham, Reading, Berkshire, United Kingdom RG4 7BY
5  *
6  * This Source Code Form is subject to the terms of the Mozilla Public
7  * License, v. 2.0.
8  *
9  * If a copy of the MPL was not distributed with this file, You can obtain
10  * one at http://mozilla.org/MPL/2.0/.
11  *
12  * This Source Code Form is "Incompatible With Secondary Licenses", as
13  * defined by the Mozilla Public License, v. 2.0.
14  * ******************************************************************** */
15 
16 #ifndef FIFTYONE_DEGREES_EVIDENCE_H_INCLUDED
17 #define FIFTYONE_DEGREES_EVIDENCE_H_INCLUDED
18 
113 #include <stdint.h>
114 #include <stdbool.h>
115 #include <stdlib.h>
116 #include "data.h"
117 #include "ip.h"
118 #include "string.h"
119 #include "array.h"
120 
121 #ifdef __cplusplus
122 #define EXTERNAL extern "C"
123 #else
124 #define EXTERNAL
125 #endif
126 
131 typedef enum e_fiftyone_degrees_evidence_prefix {
147 
149 typedef struct fiftyone_degrees_evidence_prefix_map_t {
150  const char *prefix;
151  size_t prefixLength;
154 
158 typedef struct fiftyone_degrees_evidence_key_value_pair_t {
160  const char *field;
161  const void *originalValue;
162  const void *parsedValue;
164 
166 
167 
174  void *state,
176 
183 fiftyoneDegreesEvidenceCreate(uint32_t capacity);
184 
189 EXTERNAL void fiftyoneDegreesEvidenceFree(
191 
204  const char *field,
205  const char *originalValue);
206 
213  const char *key);
214 
224 EXTERNAL uint32_t fiftyoneDegreesEvidenceIterate(
226  int prefixes,
227  void *state,
229 
234 #endif
bool(* fiftyoneDegreesEvidenceIterateMethod)(void *state, fiftyoneDegreesEvidenceKeyValuePair *pair)
Callback method used to iterate evidence key value pairs.
Definition: evidence.h:173
fiftyoneDegreesEvidencePrefix prefix
e.g.
Definition: evidence.h:159
A query string parameter.
Definition: evidence.h:142
const void * parsedValue
The parsed value which may not be a string.
Definition: evidence.h:162
const char * field
e.g.
Definition: evidence.h:160
EXTERNAL void fiftyoneDegreesEvidenceFree(fiftyoneDegreesEvidenceKeyValuePairArray *evidence)
Frees the memory used by an evidence array.
Definition: evidence.c:66
fiftyoneDegreesEvidencePrefix prefixEnum
Enum value of prefix name.
Definition: evidence.h:152
Map of prefix strings to prefix enum values.
Definition: evidence.h:149
EXTERNAL uint32_t fiftyoneDegreesEvidenceIterate(fiftyoneDegreesEvidenceKeyValuePairArray *evidence, int prefixes, void *state, fiftyoneDegreesEvidenceIterateMethod callback)
Iterates over the evidence calling the callback method for any values that match the prefixes provide...
Definition: evidence.c:87
A cookie value.
Definition: evidence.h:143
EXTERNAL fiftyoneDegreesEvidenceKeyValuePairArray * fiftyoneDegreesEvidenceCreate(uint32_t capacity)
Creates a new evidence array with the capacity requested.
Definition: evidence.c:51
Evidence key value pair structure which combines the prefix, key and value.
Definition: evidence.h:158
fiftyoneDegreesEvidencePrefix
Evidence prefixes used to determine the category a piece of evidence belongs to.
Definition: evidence.h:131
The evidence is invalid and should be ignored.
Definition: evidence.h:144
EXTERNAL fiftyoneDegreesEvidencePrefixMap * fiftyoneDegreesEvidenceMapPrefix(const char *key)
Determines the evidence map prefix from the key.
Definition: evidence.c:108
const void * originalValue
The original unparsed value.
Definition: evidence.h:161
An HTTP header value.
Definition: evidence.h:132
Array of items of type fiftyoneDegreesEvidenceKeyValuePair used to easily access and track the size o...
Definition: evidence.h:165
A list of IP addresses as a string to be parsed into a IP addresses collection.
Definition: evidence.h:134
EXTERNAL fiftyoneDegreesEvidenceKeyValuePair * fiftyoneDegreesEvidenceAddString(fiftyoneDegreesEvidenceKeyValuePairArray *evidence, fiftyoneDegreesEvidencePrefix prefix, const char *field, const char *originalValue)
Adds a new entry to the evidence.
Definition: evidence.c:71
A server value e.g.
Definition: evidence.h:140
#define FIFTYONE_DEGREES_ARRAY_TYPE(t, m)
Simple array structure definition macro used for generic types.
Definition: array.h:41
const char * prefix
Name of the prefix.
Definition: evidence.h:150
size_t prefixLength
Length of the prefix string.
Definition: evidence.h:151