static int _list_NORMAL(struct gridd_filter_ctx_s *ctx, struct gridd_reply_ctx_s *reply, struct list_params_s *lp) { GError *e = NULL; struct meta2_backend_s *m2b = meta2_filter_ctx_get_backend(ctx); struct hc_url_s *url = meta2_filter_ctx_get_url(ctx); struct on_bean_ctx_s *obc = _on_bean_ctx_init(ctx, reply); if (hc_url_has(url, HCURL_SNAPSHOT)) { lp->snapshot_name = hc_url_get(url, HCURL_SNAPSHOT); } else if (hc_url_has(url, HCURL_VERSION)) { lp->snapshot_name = hc_url_get(url, HCURL_VERSION); } e = meta2_backend_list_aliases(m2b, url, lp, _get_cb, obc); if (NULL != e) { GRID_DEBUG("Fail to return alias for url: %s", hc_url_get(url, HCURL_WHOLE)); _on_bean_ctx_clean(obc); meta2_filter_ctx_set_error(ctx, e); return FILTER_KO; } _on_bean_ctx_send_list(obc, TRUE); _on_bean_ctx_clean(obc); return FILTER_OK; }
gs_error_t * hc_func_delete_property(gs_grid_storage_t *hc, struct hc_url_s *url, char **keys) { gs_error_t *e = NULL; gs_container_t *c = NULL; gs_content_t *content = NULL; c = gs_get_storage_container(hc, hc_url_get(url, HCURL_REFERENCE), NULL, 0, &e); if (NULL != c) { if (hc_url_has(url, HCURL_PATH)) { content = gs_get_content_from_path_and_version (c, hc_url_get(url, HCURL_PATH), hc_url_get(url, HCURL_VERSION), &e); if (NULL != content) { hc_delete_content_property(content, keys, &e); gs_content_free(content); } } else { e = hc_del_container_global_property(c, keys[0]); } gs_container_free(c); } return e; }
gs_error_t * hc_func_set_property(gs_grid_storage_t *hc, struct hc_url_s *url, char ** args) { gs_error_t *e = NULL; gs_container_t *c = NULL; gs_content_t *content = NULL; c = gs_get_storage_container(hc, hc_url_get(url, HCURL_REFERENCE), NULL, 0, &e); if (NULL != c) { if (hc_url_has(url, HCURL_PATH)) { content = gs_get_content_from_path_and_version (c, hc_url_get(url, HCURL_PATH), hc_url_get(url, HCURL_VERSION), &e); if (NULL != content) { gchar **props = g_malloc0(sizeof(gchar*) * 2); props[0] = g_strdup_printf("%s=%s", args[0], args[1]); props[1] = NULL; hc_set_content_property(content, props, &e); gs_content_free(content); g_strfreev(props); } } else { e = hc_set_container_global_property(c, args[0], args[1]); } gs_container_free(c); } return e; }
GError* hc_resolve_reference_service(struct hc_resolver_s *r, struct hc_url_s *url, const gchar *srvtype, gchar ***result) { GError *err; struct hashstr_s *hk; GRID_TRACE2("%s(%s,%s)", __FUNCTION__, hc_url_get(url, HCURL_WHOLE), srvtype); g_assert(r != NULL); g_assert(url != NULL); g_assert(srvtype != NULL); g_assert(result != NULL); g_assert(*result == NULL); if (!hc_url_get_id(url) || !hc_url_has(url, HCURL_NS)) return NEWERROR(400, "Incomplete URL [%s]", hc_url_get(url, HCURL_WHOLE)); hk = hashstr_printf("%s|%s|%s", srvtype, hc_url_get(url, HCURL_NSPHYS), hc_url_get(url, HCURL_HEXID)); err = _resolve_reference_service(r, hk, url, srvtype, result); g_free(hk); return err; }
GError* hc_resolve_reference_directory(struct hc_resolver_s *r, struct hc_url_s *url, gchar ***result) { GRID_TRACE2("%s(%s)", __FUNCTION__, hc_url_get(url, HCURL_WHOLE)); EXTRA_ASSERT(r != NULL); EXTRA_ASSERT(url != NULL); EXTRA_ASSERT(result != NULL); if (!hc_url_get_id(url) || !hc_url_has(url, HCURL_NS)) return NEWERROR(CODE_BAD_REQUEST, "Incomplete URL [%s]", hc_url_get(url, HCURL_WHOLE)); GError *err = NULL; gchar **m1v = NULL, **m0v = NULL; if (!(err = _resolve_meta0(r, hc_url_get(url, HCURL_NS), &m0v))) err = _resolve_meta1(r, url, &m1v); if (err) { if (m0v) g_strfreev (m0v); if (m1v) g_strfreev (m1v); return err; } *result = g_malloc0(sizeof(gchar*) * (g_strv_length(m0v) + g_strv_length(m1v) + 1)); gchar **d = *result; for (gchar **p=m0v; *p ;++p) { *(d++) = *p; } g_free (m0v); // pointers reused for (gchar **p=m1v; *p ;++p) { *(d++) = *p; } g_free (m1v); // pointers reused return NULL; }
int meta2_filter_check_url_cid (struct gridd_filter_ctx_s *ctx, struct gridd_reply_ctx_s *reply) { (void) reply; struct hc_url_s *url = meta2_filter_ctx_get_url(ctx); TRACE_FILTER(); if (url && hc_url_has(url, HCURL_HEXID)) return FILTER_OK; meta2_filter_ctx_set_error (ctx, NEWERROR(CODE_BAD_REQUEST, "No/partial URL")); return FILTER_KO; }
GError* hc_resolve_reference_directory(struct hc_resolver_s *r, struct hc_url_s *url, gchar ***result) { GRID_TRACE2("%s(%s)", __FUNCTION__, hc_url_get(url, HCURL_WHOLE)); g_assert(r != NULL); g_assert(url != NULL); g_assert(result != NULL); if (!hc_url_get_id(url) || !hc_url_has(url, HCURL_NS)) return NEWERROR(400, "Incomplete URL [%s]", hc_url_get(url, HCURL_WHOLE)); return _resolve_meta1(r, url, result); }