44 #define REST_XML_BEGIN(CONTEXT) do { \
45 if (rest_xml_global_context) HPD_LOG_WARN((CONTEXT), "Global context is already set (trying anyways)..."); \
46 rest_xml_global_context = (CONTEXT); \
47 mxmlSetErrorCallback(rest_xml_on_mxml_error); \
50 #define REST_XML_END() do { \
51 rest_xml_global_context = NULL; \
54 #define REST_XML_RETURN_XML_ERROR(CONTEXT) HPD_LOG_RETURN(context, HPD_E_UNKNOWN, "Xml error")
58 mxmlElementSetAttr(parent, key, val);
68 const char *
key, *val;
220 #ifdef CURL_ICONV_CODESET_OF_HOST
221 curl_version_info_data *curl_ver = curl_version_info(CURLVERSION_NOW);
222 if (curl_ver->features & CURL_VERSION_CONV && curl_ver->iconv_ver_num != 0)
254 if (!((*out) = mxmlSaveAllocString(xml, MXML_NO_CALLBACK))) {
300 if (!((*out) = mxmlSaveAllocString(xml, MXML_NO_CALLBACK))) {
321 if (!(xml = mxmlLoadString(NULL, in, MXML_TEXT_CALLBACK))) {
336 for (node = node->child; node && node->type == MXML_TEXT; node = node->next) {
337 int whitespaces = node->value.text.whitespace;
338 char *
string = node->value.text.string;
339 HPD_REALLOC(*out, len + whitespaces + strlen(
string),
char);
340 for (
int i = 0; i < whitespaces; i++) strcat(*out,
" ");
341 strcat(*out,
string);
static const char *const HPD_REST_KEY_CONFIGURATION
static hpd_error_t rest_xml_add_value(mxml_node_t *parent, char *value, const hpd_module_t *context)
#define hpd_device_foreach_service(RC, SERVICE, DEVICE)
#define HPD_LOG_RETURN(CONTEXT, E, FMT,...)
static const char *const HPD_REST_KEY_VALUE
static const char *const HPD_REST_VAL_ASCII
#define hpd_service_foreach_parameter(RC, PARAMETER, SERVICE)
static const char *const REST_XML_VERSION
static hpd_error_t rest_xml_add_adapter(mxml_node_t *parent, hpd_adapter_id_t *adapter, hpd_rest_t *rest, const hpd_module_t *context)
#define REST_XML_BEGIN(CONTEXT)
static const char *const HPD_REST_KEY_PARAMETER
static hpd_error_t rest_xml_add(mxml_node_t *parent, const char *key, const char *val, const hpd_module_t *context)
static hpd_error_t rest_xml_add_configuration(mxml_node_t *parent, hpd_t *hpd, hpd_rest_t *rest, const hpd_module_t *context)
#define hpd_parameter_foreach_attr(RC, PAIR, ID)
const hpd_module_t * context
static const char *const HPD_REST_KEY_URL_ENCODED_CHARSET
hpd_error_t hpd_rest_get_timestamp(const hpd_module_t *context, char *str)
#define HPD_CALLOC(PTR, NUM, CAST)
Allocates and zeros a structure.
#define hpd_service_foreach_attr(RC, PAIR, ID)
static const char *const HPD_REST_KEY_DEVICE
#define hpd_device_foreach_attr(RC, PAIR, ID)
hpd_error_t hpd_adapter_get_id(const hpd_adapter_id_t *aid, const char **id)
[id_t functions]
#define REST_XML_RETURN_XML_ERROR(CONTEXT)
hpd_error_t hpd_parameter_get_id(const hpd_parameter_id_t *pid, const char **id)
[hpd_service_t functions]
static const char *const HPD_REST_KEY_ID
hpd_error_t hpd_device_get_id(const hpd_device_id_t *did, const char **id)
[hpd_adapter_t functions]
#define hpd_adapter_foreach_device(RC, DEVICE, ADAPTER)
#define hpd_service_foreach_action(RC, ACTION, ID)
[hpd_parameter_t functions]
static const char *const HPD_REST_KEY_GET
hpd_error_t hpd_service_get_id(const hpd_service_id_t *sid, const char **id)
[hpd_device_t functions]
static const hpd_module_t * rest_xml_global_context
static const char *const HPD_REST_KEY_SERVICE
enum hpd_error hpd_error_t
#define HPD_LOG_RETURN_E_ALLOC(CONTEXT)
static const char *const HPD_REST_KEY_PUT
static hpd_error_t rest_xml_add_attr(mxml_node_t *parent, hpd_pair_t *pair, const hpd_module_t *context)
static const char *const HPD_REST_VAL_TRUE
static void rest_xml_on_mxml_error(const char *msg)
static const char *const HPD_REST_KEY_ADAPTER
static const char *const HPD_REST_KEY_URI
hpd_error_t hpd_rest_url_create(hpd_rest_t *rest, hpd_service_id_t *service, char **url)
hpd_error_t hpd_action_get_method(const hpd_action_t *action, hpd_method_t *method)
[model foreach loops]
hpd_error_t hpd_rest_xml_get_configuration(hpd_t *hpd, hpd_rest_t *rest, const hpd_module_t *context, char **out)
#define hpd_foreach_adapter(RC, ADAPTER, HPD)
[Browsing functions]
static hpd_error_t rest_xml_add_parameter(mxml_node_t *parent, hpd_parameter_id_t *parameter, const hpd_module_t *context)
hpd_error_t hpd_pair_get(const hpd_pair_t *pair, const char **key, const char **value)
hpd_error_t hpd_rest_xml_get_value(char *value, const hpd_module_t *context, char **out)
static hpd_error_t rest_xml_add_service(mxml_node_t *parent, hpd_service_id_t *service, hpd_rest_t *rest, const hpd_module_t *context)
#define HPD_REALLOC(PTR, NUM, CAST)
CAST is for c++ compatibility (tests).
enum hpd_method hpd_method_t
[hpd_log_level_t]
hpd_error_t hpd_rest_xml_parse_value(const char *in, const hpd_module_t *context, char **out)
static hpd_error_t rest_xml_add_device(mxml_node_t *parent, hpd_device_id_t *device, hpd_rest_t *rest, const hpd_module_t *context)
static const char *const HPD_REST_KEY_TIMESTAMP
#define HPD_LOG_DEBUG(CONTEXT, FMT,...)
#define hpd_adapter_foreach_attr(RC, PAIR, ID)