Files
FlaxEngine/Source/ThirdParty/UniversalAnalytics/universal-analytics.h
Wojtek Figat d4b2171c19 Fix warnings
2021-02-24 20:12:13 +01:00

245 lines
6.8 KiB
C

/******************************************************************************
* Universal Analytics for C
* Copyright (c) 2013, Analytics Pros
*
* This project is free software, distributed under the BSD license.
* Analytics Pros offers consulting and integration services if your firm needs
* assistance in strategy, implementation, or auditing existing work.
******************************************************************************/
/* Header guard, prevent multiple definition */
#ifndef UNIVERSALANALYTICS_HEADER_GUARD
#define UNIVERSALANALYTICS_HEADER_GUARD 1
#include "http.h"
#include "string/encode.h"
/* These definitions are primarily for planning memory allocation and loop sentinels;
* eventually they'll be converted to enums... */
#define UA_MAX_TYPES 8
#define UA_MAX_FIELD_INDEX 69
#define UA_MAX_CUSTOM_DIMENSION 200
#define UA_MAX_CUSTOM_METRIC 200
#define UA_START_CDIMENSIONS 57
#define UA_START_CMETRICS 257
#define UA_MAX_PARAMETERS (UA_MAX_FIELD_INDEX + UA_MAX_CUSTOM_DIMENSION + UA_MAX_CUSTOM_METRIC)
#define UA_CUSTOM_PARAM_LEN 6
#define UA_CUSTOM_PARAM_BUFFER ((UA_MAX_CUSTOM_DIMENSION + UA_MAX_CUSTOM_METRIC) * UA_CUSTOM_PARAM_LEN)
#define UA_MAX_TRACKER_OPTION 1
/* Boolean aliases for precise evaluation */
typedef enum {
UA_FALSE = 0,
UA_TRUE = 1
} UABoolean_t;
/* Tracking types
* These signify pageviews, events, transactions, etc.
* Some behaviors (e.g. required parameters) may be altered by
* this option (in future versions).
*/
typedef enum trackingType {
UA_PAGEVIEW = 0,
UA_APPVIEW,
UA_SCREENVIEW,
UA_EVENT,
UA_TRANSACTION,
UA_TRANSACTION_ITEM,
UA_TIMING,
UA_SOCIAL,
UA_EXCEPTION
} trackingType_t;
/* Tracking fields
* These represent named parameters on the resulting URL query
* sent to Google Analytics servers. They act as indices into
* the array of parameter nodes for URL composition.
*/
typedef enum trackingField {
UA_TRACKING_TYPE = 0,
UA_VERSION_NUMBER,
UA_TRACKING_ID, /* string like UA-XXXXX-Y */
UA_CLIENT_ID,
UA_USER_ID,
UA_ANONYMIZE_IP,
UA_DOCUMENT_PATH,
UA_DOCUMENT_TITLE,
UA_DOCUMENT_LOCATION,
UA_DOCUMENT_HOSTNAME,
UA_DOCUMENT_REFERRER,
UA_DOCUMENT_ENCODING,
UA_QUEUE_TIME_MS,
UA_CACHE_BUSTER,
UA_SESSION_CONTROL,
UA_CAMPAIGN_NAME,
UA_CAMPAIGN_SOURCE,
UA_CAMPAIGN_MEDIUM,
UA_CAMPAIGN_KEYWORD,
UA_CAMPAIGN_CONTENT,
UA_CAMPAIGN_ID,
UA_SCREEN_RESOLUTION,
UA_VIEWPORT_SIZE,
UA_SCREEN_COLORS,
UA_USER_LANGUAGE,
UA_USER_AGENT,
UA_APP_NAME,
UA_APP_VERSION,
UA_APP_ID,
UA_APP_INSTALLER_ID,
UA_CONTENT_DESCRIPTION,
UA_SCREEN_NAME,
UA_EVENT_CATEGORY,
UA_EVENT_ACTION,
UA_EVENT_LABEL,
UA_EVENT_VALUE,
UA_NON_INTERACTIVE,
UA_SOCIAL_ACTION,
UA_SOCIAL_NETWORK,
UA_SOCIAL_TARGET,
UA_EXCEPTION_DESCRIPTION,
UA_EXCEPTION_FATAL,
UA_TRANSACTION_ID,
UA_TRANSACTION_AFFILIATION,
UA_TRANSACTION_REVENUE,
UA_TRANSACTION_SHIPPING,
UA_TRANSACTION_TAX,
UA_TRANSACTION_CURRENCY,
UA_CURRENCY_CODE,
UA_ITEM_CODE,
UA_ITEM_NAME,
UA_ITEM_VARIATION,
UA_ITEM_CATEGORY,
UA_ITEM_PRICE,
UA_ITEM_QUANTITY,
UA_TIMING_CATEGORY,
UA_TIMING_VARIABLE,
UA_TIMING_LABEL,
UA_TIMING_TIME,
UA_TIMING_DNS,
UA_TIMING_PAGE_LOAD,
UA_TIMING_REDIRECT,
UA_TIMING_TCP_CONNECT,
UA_TIMING_SERVER_RESPONSE,
UA_ADWORDS_ID,
UA_DISPLAY_AD_ID,
UA_LINK_ID,
UA_JAVA_ENABLED,
UA_FLASH_VERSION,
UA_CUSTOM_DIMENSION,
UA_CUSTOM_METRIC
} trackingField_t;
/* Name/Value pair with slot ID for URL composition */
typedef struct UAParameter_t {
trackingField_t field;
unsigned int slot_id;
const char* name;
const char* value;
} UAParameter_t;
/* Flag to specify which level of tracker state to update */
typedef enum stateScopeFlag_t {
UA_PERMANENT = 0,
UA_EPHEMERAL = 1
} stateScopeFlag_t;
/* Configuration flags */
typedef enum UATrackerOption_t {
UA_OPTION_QUEUE = 0
} UATrackerOption_t;
/* Tracker layout intended to maximize stack allocation and
* minimize heap/dynamic allocation */
typedef struct UATracker_t {
int __configured__;
/* Configuration flags */
int options[ UA_MAX_TRACKER_OPTION ];
/* State maps for the tracker's resulting parameter values */
struct UAParameter_t lifetime_parameters[ UA_MAX_PARAMETERS ];
struct UAParameter_t ephemeral_parameters[ UA_MAX_PARAMETERS ];
/* Custom parameter names (e.g. cm1, cm199, cd1, cd199).
* These are dynamically populated during tracker initialization
* and linked in pointer-arrays below; this merely allocates
* space (statically) as a component of the tracker */
char map_custom[ UA_CUSTOM_PARAM_BUFFER ];
/* Standard parameter names (e.g. cid, tid, ea, ec...)
* These are populated in stack space by |populateParameterNames|
* during tracker initialization */
const char* map_parameters[ UA_MAX_PARAMETERS ];
/* Standard tracking type names (e.g. pageview, event, etc)
* These are populated in stack space by |populateTypeNames|
* during tracker initialization */
const char* map_types[ UA_MAX_TYPES ];
/* Placeholder for HTTP "User-Agent" header */
const char* user_agent;
/* Stash space for the query strings generated through |sendTracking| */
char query[ UA_MAX_QUERY_LEN ];
int query_len;
/* HTTP handler (from http.h) */
struct HTTPQueue_t queue;
} UATracker_t;
/* Field/Value pairs with slot ID for convenient static specification */
typedef struct UAOptionNode_t {
trackingField_t field;
unsigned int slot_id;
const char* value;
} UAOptionNode_t;
/* List of options (field/value pairs with slot ID */
typedef struct UAOptions_t {
struct UAOptionNode_t options[ UA_MAX_PARAMETERS ];
} UAOptions_t;
/* Other shortcuts for external interfaces */
typedef UATracker_t* UATracker;
typedef UAParameter_t UAParameter;
typedef UAOptions_t UASettings;
typedef UAOptions_t UAOptions;
/* Creates Google Analytics tracker state objects */
UATracker createTracker(const char* trackingId, const char* clientId, const char* userId);
/* Initialize tracker state */
void initTracker(UATracker tracker, const char* trackingId, const char* clientId, const char* userId);
/* Set flags to tune the funcionality of the tracker */
void setTrackerOption(UATracker tracker, UATrackerOption_t option, int value);
/* Stores option-values for the life of the tracker */
void setParameters(UATracker tracker, UAOptions_t* opts);
/* Store a single option-value pair */
void setParameter(UATracker tracker, trackingField_t type, unsigned int slot_id, const char* value);
/* Processes tracker state with a tracking type and ephemeral options
* Dispatches resulting query to Google Analytics */
void sendTracking(UATracker state, trackingType_t type, UAOptions_t* opts);
/* Safely wipe tracker state without free() */
void cleanTracker(UATracker);
/* Clears tracker memory & free()s all allocated heap space */
void removeTracker(UATracker);
#endif /* UNIVERSALANALYTICS_HEADER_GUARD */