diff options
author | Ewan Mellor <ewan@xensource.com> | 2007-03-26 00:08:13 +0100 |
---|---|---|
committer | Ewan Mellor <ewan@xensource.com> | 2007-03-26 00:08:13 +0100 |
commit | 9c052c30d622e56b466870e0084d943508676e3f (patch) | |
tree | 49e641759b3a988eead407751fd85f919067256d /tools/libxen/src | |
parent | 231f7bf638ac8c7349000f942065b2bb6eadaa3d (diff) | |
download | xen-9c052c30d622e56b466870e0084d943508676e3f.tar.gz xen-9c052c30d622e56b466870e0084d943508676e3f.tar.bz2 xen-9c052c30d622e56b466870e0084d943508676e3f.zip |
Implement session.last_active, session.this_host, session.get_record,
session.get_uuid.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
Diffstat (limited to 'tools/libxen/src')
-rw-r--r-- | tools/libxen/src/xen_common.c | 117 |
1 files changed, 114 insertions, 3 deletions
diff --git a/tools/libxen/src/xen_common.c b/tools/libxen/src/xen_common.c index a22456c85e..b9cd200048 100644 --- a/tools/libxen/src/xen_common.c +++ b/tools/libxen/src/xen_common.c @@ -32,6 +32,7 @@ #include <libxml/xpath.h> #include "xen_common.h" +#include "xen_host.h" #include "xen_internal.h" #include "xen_int_float_map.h" #include "xen_string_string_map.h" @@ -138,6 +139,20 @@ xen_fini(void) } +void +xen_session_record_free(xen_session_record *record) +{ + if (record == NULL) + { + return; + } + free(record->uuid); + xen_host_record_opt_free(record->this_host); + free(record->this_user); + free(record); +} + + xen_session * xen_session_login_with_password(xen_call_func call_func, void *handle, const char *uname, const char *pwd) @@ -187,19 +202,115 @@ xen_session_logout(xen_session *session) } -int -xen_session_get_this_host(xen_session *session, xen_host *result) +bool +xen_session_get_uuid(xen_session *session, char **result, + xen_session *self_session) +{ + abstract_value params[] = + { + { .type = &abstract_type_string, + .u.string_val = self_session->session_id } + }; + + xen_call_(session, "session.get_uuid", params, 1, + &abstract_type_string, result); + return session->ok; +} + + +bool +xen_session_get_this_host(xen_session *session, xen_host *result, + xen_session *self_session) +{ + abstract_value params[] = + { + { .type = &abstract_type_string, + .u.string_val = self_session->session_id } + }; + + xen_call_(session, "session.get_this_host", params, 1, + &abstract_type_string, result); + return session->ok; +} + + +bool +xen_session_get_this_user(xen_session *session, char **result, + xen_session *self_session) { abstract_value params[] = { + { .type = &abstract_type_string, + .u.string_val = self_session->session_id } }; - xen_call_(session, "session.get_this_host", params, 0, + xen_call_(session, "session.get_this_user", params, 1, &abstract_type_string, result); return session->ok; } +bool +xen_session_get_last_active(xen_session *session, time_t *result, + xen_session *self_session) +{ + abstract_value params[] = + { + { .type = &abstract_type_string, + .u.string_val = self_session->session_id } + }; + + xen_call_(session, "session.get_last_active", params, 1, + &abstract_type_datetime, result); + return session->ok; +} + + +static const struct_member xen_session_record_struct_members[] = + { + { .key = "uuid", + .type = &abstract_type_string, + .offset = offsetof(xen_session_record, uuid) }, + { .key = "this_host", + .type = &abstract_type_ref, + .offset = offsetof(xen_session_record, this_host) }, + { .key = "this_user", + .type = &abstract_type_string, + .offset = offsetof(xen_session_record, this_user) }, + { .key = "last_active", + .type = &abstract_type_datetime, + .offset = offsetof(xen_session_record, last_active) }, + }; + +const abstract_type xen_session_record_abstract_type_ = + { + .typename = STRUCT, + .struct_size = sizeof(xen_session_record), + .member_count = + sizeof(xen_session_record_struct_members) / sizeof(struct_member), + .members = xen_session_record_struct_members + }; + + +bool +xen_session_get_record(xen_session *session, xen_session_record **result, + xen_session *self_session) +{ + abstract_value param_values[] = + { + { .type = &abstract_type_string, + .u.string_val = self_session->session_id } + }; + + abstract_type result_type = xen_session_record_abstract_type_; + + *result = NULL; + XEN_CALL_("session.get_record"); + + return session->ok; +} + + #define X "%02x" #define UUID_FORMAT X X X X "-" X X "-" X X "-" X X "-" X X X X X X |