[libgovirt] Implement ovirt_resource_delete{,_finish,_async}
- From: Christophe Fergeau <teuf src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgovirt] Implement ovirt_resource_delete{,_finish,_async}
- Date: Mon, 22 Sep 2014 12:26:19 +0000 (UTC)
commit 0ba046c1f8ec7fd9fdbf0bd4bab1f16725301138
Author: Christophe Fergeau <cfergeau redhat com>
Date: Fri Sep 19 17:27:32 2014 +0200
Implement ovirt_resource_delete{,_finish,_async}
This will send a DELETE request to the remote resource. This can be used
to remove the image contained in a CDRom for example.
govirt/govirt.sym | 6 +++
govirt/ovirt-resource.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++
govirt/ovirt-resource.h | 12 +++++
3 files changed, 133 insertions(+), 0 deletions(-)
---
diff --git a/govirt/govirt.sym b/govirt/govirt.sym
index 760e0f1..178ab07 100644
--- a/govirt/govirt.sym
+++ b/govirt/govirt.sym
@@ -101,4 +101,10 @@ GOVIRT_0.3.1 {
ovirt_vm_pool_allocate_vm_finish;
} GOVIRT_0.2.1;
+GOVIRT_0.3.2 {
+ ovirt_resource_delete;
+ ovirt_resource_delete_async;
+ ovirt_resource_delete_finish;
+} GOVIRT_0.3.1;
+
# .... define new API here using predicted next version number ....
diff --git a/govirt/ovirt-resource.c b/govirt/ovirt-resource.c
index 35f263b..a6eb026 100644
--- a/govirt/ovirt-resource.c
+++ b/govirt/ovirt-resource.c
@@ -950,3 +950,118 @@ void ovirt_resource_add_rest_params(OvirtResource *resource,
if (klass->to_xml != NULL)
klass->add_rest_params(resource, call);
}
+
+
+/**
+ * ovirt_resource_delete:
+ * @resource: an #OvirtResource.
+ * @proxy: an #OvirtProxy.
+ * @error: return location for error or NULL.
+ * Returns: TRUE if the call was successful, FALSE otherwise.
+ *
+ * Sends an HTTP DELETE request to @resource.
+ *
+ * The calling thread is blocked until this request is processed, see
+ * ovirt_resource_delete_async() for the asynchronous version of this method.
+ */
+gboolean ovirt_resource_delete(OvirtResource *resource,
+ OvirtProxy *proxy,
+ GError **error)
+{
+ RestXmlNode *xml;
+
+ g_return_val_if_fail(OVIRT_IS_RESOURCE(resource), FALSE);
+ g_return_val_if_fail(OVIRT_IS_PROXY(proxy), FALSE);
+ g_return_val_if_fail((error == NULL) || (*error == NULL), FALSE);
+
+ xml = ovirt_resource_rest_call(resource, proxy,
+ "DELETE", error);
+ if (xml != NULL) {
+ rest_xml_node_unref(xml);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+static gboolean ovirt_resource_delete_async_cb(OvirtProxy *proxy, RestProxyCall *call,
+ gpointer user_data, GError **error)
+{
+ OvirtResource *resource;
+ RestXmlNode *xml;
+ gboolean success;
+
+ g_return_val_if_fail(REST_IS_PROXY_CALL(call), FALSE);
+ g_return_val_if_fail(OVIRT_IS_RESOURCE(user_data), FALSE);
+
+ resource = OVIRT_RESOURCE(user_data);
+ xml = ovirt_rest_xml_node_from_call(call);
+ success = parse_action_response(call, resource, NULL, error);
+ rest_xml_node_unref(xml);
+
+ return success;
+}
+
+
+/**
+ * ovirt_resource_delete_async:
+ * @resource: an #OvirtResource.
+ * @proxy: an #OvirtProxy.
+ * @cancellable: a #GCancellable or NULL.
+ * @callback: a #GAsyncReadyCallback to call when the call completes, or NULL
+ * if you don't care about the result of the method invocation.
+ * @user_data: data to pass to @callback.
+ *
+ * Asynchronously send an HTTP DELETE request to @resource.
+ *
+ * When the call is complete, @callback will be invoked. You can then call
+ * ovirt_resource_delete_finish() to get the result of the call.
+ */
+void ovirt_resource_delete_async(OvirtResource *resource,
+ OvirtProxy *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *result;
+ OvirtResourceRestCall *call;
+
+ g_return_if_fail(OVIRT_IS_RESOURCE(resource));
+ g_return_if_fail(OVIRT_IS_PROXY(proxy));
+ g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
+ result = g_simple_async_result_new(G_OBJECT(resource), callback,
+ user_data,
+ ovirt_resource_delete_async);
+
+ call = ovirt_resource_rest_call_new(REST_PROXY(proxy), resource);
+ rest_proxy_call_set_method(REST_PROXY_CALL(call), "DELETE");
+ ovirt_rest_call_async(OVIRT_REST_CALL(call), result, cancellable,
+ ovirt_resource_delete_async_cb,
+ g_object_ref(resource), g_object_unref);
+ g_object_unref(G_OBJECT(call));
+}
+
+
+/**
+ * ovirt_resource_delete_finish:
+ * @resource: an #OvirtResource.
+ * @result: a #GAsyncResult.
+ * @error: return location for error or NULL.
+ * Returns: TRUE if the call was successful, FALSE otherwise.
+ *
+ * Finishes an asynchronous HTTP DELETE request on @resource.
+ */
+gboolean ovirt_resource_delete_finish(OvirtResource *resource,
+ GAsyncResult *result,
+ GError **err)
+{
+ g_return_val_if_fail(OVIRT_IS_RESOURCE(resource), FALSE);
+ g_return_val_if_fail(g_simple_async_result_is_valid(result, G_OBJECT(resource),
+ ovirt_resource_delete_async),
+ FALSE);
+ g_return_val_if_fail((err == NULL) || (*err == NULL), FALSE);
+
+ return ovirt_rest_call_finish(result, err);
+}
diff --git a/govirt/ovirt-resource.h b/govirt/ovirt-resource.h
index 916af8b..72db95d 100644
--- a/govirt/ovirt-resource.h
+++ b/govirt/ovirt-resource.h
@@ -96,6 +96,18 @@ gboolean ovirt_resource_refresh_finish(OvirtResource *resource,
GAsyncResult *result,
GError **err);
+gboolean ovirt_resource_delete(OvirtResource *resource,
+ OvirtProxy *proxy,
+ GError **error);
+void ovirt_resource_delete_async(OvirtResource *resource,
+ OvirtProxy *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean ovirt_resource_delete_finish(OvirtResource *resource,
+ GAsyncResult *result,
+ GError **err);
+
G_END_DECLS
#endif /* __OVIRT_RESOURCE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]