Files
dial-reference/server/dial_data.h

106 lines
3.5 KiB
C

/*
* Copyright (c) 2014-2019 Netflix, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY NETFLIX, INC. AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL NETFLIX OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Defines functions for persisting and retrieving DIAL data.
*/
#ifndef SRC_SERVER_DIAL_DATA_H_
#define SRC_SERVER_DIAL_DATA_H_
/*
* Slash-terminated directory of where to persist the DIAL data.
*/
#define DIAL_DATA_DIR "/tmp/"
/*
* The maximum DIAL data payload accepted per the 'DIAL extension for smooth
* pairing' specification'.
*/
#define DIAL_DATA_MAX_PAYLOAD (4096) /* 4 KB */
/*
* Url path where DIAL data should be posted according to the 'DIAL extension
* for smooth pairing' specification.
*/
#define DIAL_DATA_URI "/dial_data"
/**
* The DIAL data key and value values cannot contain any spaces. They are
* expected to be URL-escaped strings, so any spaces would be represented as
* the '+' character. They have a max length of 255 characters.
*
* THE STRINGS key AND value POINT TO MUST BE DYNAMICALLY ALLOCATED
*/
struct DIALData_ {
struct DIALData_ *next;
char *key;
char *value;
};
typedef struct DIALData_ DIALData;
#define DIAL_KEY_OR_VALUE_MAX_LEN (255)
#define DIAL_KEY_OR_VALUE_MAX_LEN_STR "255"
/**
* Store the DIAL data key/value pairs in the application data store.
*
* Will exit immediately if the data output file cannot be accessed due to
* out-of-memory or I/O errors.
*
* Keys and values are truncated to DIAL_KEY_OR_VALUE_MAX_LEN.
*
* @param app_name application name.
* @param data pointer to head of DIAL data linked list.
*/
void store_dial_data(char *app_name, DIALData *data);
/**
* Retrieve the DIAL data key/value pairs from the application data store.
*
* @param app_name application name.
* @return data pointer to head of DIAL data linked list or NULL if
* there is no valid data or if the data output file cannot be accessed
* due to out-of-memory or I/O errors.
*/
DIALData *retrieve_dial_data(char *app_name);
/**
* Set the DIAL data directory.
*
* @param data_dir the DIAL data directory path, which must include the
* trailing directory separator (e.g. '/' character).
*/
void set_dial_data_dir(const char *data_dir);
/**
* Frees the DIAL data linked list memory.
*
* @param dialData pointer to the DIAL data linked list.
*/
void free_dial_data(DIALData **dialData);
#endif /* SRC_SERVER_DIAL_DATA_H_ */