// TODO String/TLV format lwm2m_resource *parse_resource(lwm2m_object *object, int resource_id, char *message, int message_len) { lwm2m_resource *resource = create_resource(object, resource_id); if (resource->multiple) { resource->instances = parse_multiple_resource(object, resource_id, message, message_len); } else { lwm2m_value value = parse_value_text(message, message_len, resource->type); __set_value(resource, &value, message_len); } return resource; }
// TODO in multiple resource map there should be map <ID, lwm2m_resource*> list *parse_multiple_resource(lwm2m_object *object, int resource_id, char *message, int message_len) { list *resources = list_new(); tlv_header resource_header; char *curr = message; while (curr < message + message_len) { curr = parse_tlv_header(curr, &resource_header); lwm2m_resource *resource_instance = create_resource(object, resource_id); resource_instance->id = resource_header.id; lwm2m_value value = parse_value(curr, resource_header.length, resource_instance->type); __set_value(resource_instance, &value, resource_header.length); ladd(resources, resource_instance->id, resource_instance); curr = curr + resource_header.length; } return resources; }
/** Returns map of resources **/ list *parse_instance(lwm2m_object *object, char *message, int message_len) { list *resources = list_new(); tlv_header resource_header; char *curr = message; while (curr < message + message_len) { curr = parse_tlv_header(curr, &resource_header); lwm2m_resource *resource = create_resource(object, resource_header.id); if (resource_header.type == MULTIPLE_RESOURCE_TYPE) { resource->instances = parse_multiple_resource(object, resource->id, curr, resource_header.length); resource->multiple = true; } else { lwm2m_value value = parse_value(curr, resource_header.length, resource->type); __set_value(resource, &value, resource_header.length); } ladd(resources, resource->id, resource); curr = curr + resource_header.length; } return resources; }
static void __midgard_query_property_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { MidgardQueryProperty *self = (MidgardQueryProperty *) (object); switch (property_id) { case MIDGARD_QUERY_PROPERTY_PROPNAME: __set_value (MIDGARD_QUERY_HOLDER (object), (GValue *)value); break; case MIDGARD_QUERY_PROPERTY_STORAGE: if (self->priv->storage) g_object_unref (self->priv->storage); self->priv->storage = g_value_dup_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (self, property_id, pspec); break; } }