From: Arvin Schnell Date: Fri, 27 Apr 2012 13:33:16 +0000 (+0200) Subject: - work on dbus interface X-Git-Tag: v0.1.3~232 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e73d6021458876ffe2f8ad32e23ec9610eb2d54f;p=thirdparty%2Fsnapper.git - work on dbus interface --- diff --git a/client/commands.cc b/client/commands.cc index 8c427bcc..a3345fe1 100644 --- a/client/commands.cc +++ b/client/commands.cc @@ -28,11 +28,15 @@ #include "commands.h" +#define SERVICE "org.opensuse.snapper" +#define OBJECT "/org/opensuse/snapper" +#define INTERFACE "org.opensuse.snapper" + + list command_list_xconfigs(DBus::Connection& conn) { - DBus::MessageMethodCall call("org.opensuse.snapper", "/org/opensuse/snapper", - "org.opensuse.snapper", "ListConfigs"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "ListConfigs"); DBus::Message reply = conn.send_and_reply_and_block(call); @@ -45,11 +49,35 @@ command_list_xconfigs(DBus::Connection& conn) } +void +command_create_xconfig(DBus::Connection& conn, const string& config_name, const string& subvolume, + const string& fstype, const string& template_name) +{ + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "CreateConfig"); + + DBus::Hoho hoho(call); + hoho << config_name << subvolume << fstype << template_name; + + DBus::Message reply = conn.send_and_reply_and_block(call); +} + + +void +command_delete_xconfig(DBus::Connection& conn, const string& config_name) +{ + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "DeleteConfig"); + + DBus::Hoho hoho(call); + hoho << config_name; + + DBus::Message reply = conn.send_and_reply_and_block(call); +} + + XSnapshots command_list_xsnapshots(DBus::Connection& conn, const string& config_name) { - DBus::MessageMethodCall call("org.opensuse.snapper", "/org/opensuse/snapper", - "org.opensuse.snapper", "ListSnapshots"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "ListSnapshots"); DBus::Hoho hoho(call); hoho << config_name; @@ -70,8 +98,7 @@ command_create_single_xsnapshot(DBus::Connection& conn, const string& config_nam const string& description, const string& cleanup, const map& userdata) { - DBus::MessageMethodCall call("org.opensuse.snapper", "/org/opensuse/snapper", - "org.opensuse.snapper", "CreateSingleSnapshot"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "CreateSingleSnapshot"); DBus::Hoho hoho(call); hoho << config_name << description << cleanup << userdata; @@ -92,8 +119,7 @@ command_create_pre_xsnapshot(DBus::Connection& conn, const string& config_name, const string& description, const string& cleanup, const map& userdata) { - DBus::MessageMethodCall call("org.opensuse.snapper", "/org/opensuse/snapper", - "org.opensuse.snapper", "CreatePreSnapshot"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "CreatePreSnapshot"); DBus::Hoho hoho(call); hoho << config_name << description << cleanup << userdata; @@ -114,8 +140,7 @@ command_create_post_xsnapshot(DBus::Connection& conn, const string& config_name, unsigned int prenum, const string& description, const string& cleanup, const map& userdata) { - DBus::MessageMethodCall call("org.opensuse.snapper", "/org/opensuse/snapper", - "org.opensuse.snapper", "CreatePostSnapshot"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "CreatePostSnapshot"); DBus::Hoho hoho(call); hoho << config_name << prenum << description << cleanup << userdata; @@ -134,8 +159,7 @@ command_create_post_xsnapshot(DBus::Connection& conn, const string& config_name, void command_delete_xsnapshot(DBus::Connection& conn, const string& config_name, unsigned int num) { - DBus::MessageMethodCall call("org.opensuse.snapper", "/org/opensuse/snapper", - "org.opensuse.snapper", "DeleteSnapshot"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "DeleteSnapshot"); DBus::Hoho hoho(call); hoho << config_name << num; @@ -148,8 +172,7 @@ void command_create_xcomparison(DBus::Connection& conn, const string& config_name, unsigned int number1, unsigned int number2) { - DBus::MessageMethodCall call("org.opensuse.snapper", "/org/opensuse/snapper", - "org.opensuse.snapper", "CreateComparison"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "CreateComparison"); DBus::Hoho hoho(call); hoho << config_name << number1 << number2; @@ -162,8 +185,7 @@ list command_get_xfiles(DBus::Connection& conn, const string& config_name, unsigned int number1, unsigned int number2) { - DBus::MessageMethodCall call("org.opensuse.snapper", "/org/opensuse/snapper", - "org.opensuse.snapper", "GetFiles"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "GetFiles"); DBus::Hoho hoho(call); hoho << config_name << number1 << number2; @@ -182,8 +204,7 @@ vector command_get_xdiff(DBus::Connection& conn, const string& config_name, unsigned int number1, unsigned int number2, const string& filename, const string& options) { - DBus::MessageMethodCall call("org.opensuse.snapper", "/org/opensuse/snapper", - "org.opensuse.snapper", "GetDiff"); + DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "GetDiff"); DBus::Hoho hoho(call); hoho << config_name << number1 << number2 << filename << options; diff --git a/client/commands.h b/client/commands.h index f0e2f067..52578dfe 100644 --- a/client/commands.h +++ b/client/commands.h @@ -40,6 +40,13 @@ using std::map; list command_list_xconfigs(DBus::Connection& conn); +void +command_create_xconfig(DBus::Connection& conn, const string& config_name, const string& subvolume, + const string& fstype, const string& template_name); + +void +command_delete_xconfig(DBus::Connection& conn, const string& config_name); + XSnapshots command_list_xsnapshots(DBus::Connection& conn, const string& config_name); diff --git a/client/snapper.cc b/client/snapper.cc index 39050700..17b94dc7 100644 --- a/client/snapper.cc +++ b/client/snapper.cc @@ -253,7 +253,7 @@ command_create_config(DBus::Connection& conn) try { - Snapper::createConfig(config_name, subvolume, fstype, template_name); + command_create_xconfig(conn, config_name, subvolume, fstype, template_name); } catch (const CreateConfigFailedException& e) { @@ -284,7 +284,7 @@ command_delete_config(DBus::Connection& conn) try { - Snapper::deleteConfig(config_name); + command_delete_xconfig(conn, config_name); } catch (const DeleteConfigFailedException& e) { @@ -838,7 +838,7 @@ command_diff(DBus::Connection& conn) vector lines = command_get_xdiff(conn, config_name, nums.first, nums.second, it1->filename, "--unified --new-file"); for (vector::const_iterator it2 = lines.begin(); it2 != lines.end(); ++it2) - cout << it2->c_str() << endl; + cout << it2->c_str() << endl; } } else diff --git a/doc/dbus-protocol.txt b/doc/dbus-protocol.txt index ef47bca5..2fa870eb 100644 --- a/doc/dbus-protocol.txt +++ b/doc/dbus-protocol.txt @@ -2,7 +2,7 @@ method ListConfigs -method CreateConfig config-name subvolume +method CreateConfig config-name subvolume fstype template_name method DeleteConfig config-name signal ConfigCreated config-name diff --git a/server/Client.h b/server/Client.h index b1ba3dfb..975ff51b 100644 --- a/server/Client.h +++ b/server/Client.h @@ -57,7 +57,7 @@ public: Comparison* find_comparison(Snapper* snapper, Snapshots::const_iterator snapshot1, Snapshots::const_iterator snapshot2); - + void add_lock(const string& config_name); void remove_lock(const string& config_name); bool has_lock(const string& config_name) const; @@ -80,7 +80,7 @@ public: iterator begin() { return entries.begin(); } const_iterator begin() const { return entries.begin(); } - + iterator end() { return entries.end(); } const_iterator end() const { return entries.end(); } @@ -96,6 +96,6 @@ private: list entries; }; - + #endif diff --git a/server/snapperd.cc b/server/snapperd.cc index 1ab979e9..2575d1bd 100644 --- a/server/snapperd.cc +++ b/server/snapperd.cc @@ -47,6 +47,11 @@ using namespace std; using namespace snapper; +#define SERVICE "org.opensuse.snapper" +#define PATH "/org/opensuse/snapper" +#define INTERFACE "org.opensuse.snapper" + + Clients clients; Jobs jobs; @@ -63,7 +68,7 @@ reply_to_introspect(DBus::Connection& conn, DBus::Message& msg) " \n" " \n" " \n" - " \n" + " \n" " \n" " \n" @@ -72,6 +77,8 @@ reply_to_introspect(DBus::Connection& conn, DBus::Message& msg) " \n" " \n" " \n" + " \n" + " \n" " \n" " \n" @@ -229,10 +236,21 @@ check_lock(DBus::Connection& conn, DBus::Message& msg, const string& config_name void -send_signal_config_created(DBus::Connection& conn, const string& config_name, - const string& subvolume) +send_signal_config_created(DBus::Connection& conn, const string& config_name) +{ + DBus::MessageSignal msg(PATH, INTERFACE, "ConfigCreated"); + + DBus::Hoho hoho(msg); + hoho << config_name; + + conn.send(msg); +} + + +void +send_signal_config_deleted(DBus::Connection& conn, const string& config_name) { - DBus::MessageSignal msg("/org/opensuse/snapper", "org.opensuse.snapper", "ConfigCreated"); + DBus::MessageSignal msg(PATH, INTERFACE, "ConfigDeleted"); DBus::Hoho hoho(msg); hoho << config_name; @@ -245,7 +263,7 @@ void send_signal_snapshot_created(DBus::Connection& conn, const string& config_name, unsigned int num) { - DBus::MessageSignal msg("/org/opensuse/snapper", "org.opensuse.snapper", "SnapshotCreated"); + DBus::MessageSignal msg(PATH, INTERFACE, "SnapshotCreated"); DBus::Hoho hoho(msg); hoho << config_name << num; @@ -258,7 +276,7 @@ void send_signal_snapshot_deleted(DBus::Connection& conn, const string& config_name, unsigned int num) { - DBus::MessageSignal msg("/org/opensuse/snapper", "org.opensuse.snapper", "SnapshotDeleted"); + DBus::MessageSignal msg(PATH, INTERFACE, "SnapshotDeleted"); DBus::Hoho hoho(msg); hoho << config_name << num; @@ -283,6 +301,32 @@ reply_to_command_list_configs(DBus::Connection& conn, DBus::Message& msg) void reply_to_command_create_config(DBus::Connection& conn, DBus::Message& msg) +{ + string config_name; + string subvolume; + string fstype; + string template_name; + + DBus::Hihi hihi(msg); + hihi >> config_name >> subvolume >> fstype >> template_name; + + y2mil("CreateConfig config_name:" << config_name << " subvolume:" << subvolume << + " fstype:" << fstype << " template_name:" << template_name); + + check_permission(conn, msg); + + Snapper::createConfig(config_name, subvolume, fstype, template_name); + + DBus::MessageMethodReturn reply(msg); + + conn.send(reply); + + send_signal_config_created(conn, config_name); +} + + +void +reply_to_command_delete_config(DBus::Connection& conn, DBus::Message& msg) { string config_name; string subvolume; @@ -290,15 +334,17 @@ reply_to_command_create_config(DBus::Connection& conn, DBus::Message& msg) DBus::Hihi hihi(msg); hihi >> config_name >> subvolume; - y2mil("ListSnapshots config_name:" << config_name << " subvolume:" << subvolume); + y2mil("DeleteConfig config_name:" << config_name); check_permission(conn, msg); + Snapper::deleteConfig(config_name); + DBus::MessageMethodReturn reply(msg); conn.send(reply); - send_signal_config_created(conn, config_name, subvolume); + send_signal_config_deleted(conn, config_name); } @@ -750,33 +796,35 @@ dispatch(DBus::Connection& conn, DBus::Message& msg) { try { - if (msg.is_method_call("org.opensuse.snapper", "Debug")) + if (msg.is_method_call(INTERFACE, "Debug")) reply_to_command_debug(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "ListConfigs")) + else if (msg.is_method_call(INTERFACE, "ListConfigs")) reply_to_command_list_configs(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "CreateConfig")) + else if (msg.is_method_call(INTERFACE, "CreateConfig")) reply_to_command_create_config(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "LockConfig")) + else if (msg.is_method_call(INTERFACE, "DeleteConfig")) + reply_to_command_delete_config(conn, msg); + else if (msg.is_method_call(INTERFACE, "LockConfig")) reply_to_command_lock_config(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "UnlockConfig")) + else if (msg.is_method_call(INTERFACE, "UnlockConfig")) reply_to_command_unlock_config(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "ListSnapshots")) + else if (msg.is_method_call(INTERFACE, "ListSnapshots")) reply_to_command_list_snapshots(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "CreateSingleSnapshot")) + else if (msg.is_method_call(INTERFACE, "CreateSingleSnapshot")) reply_to_command_create_single_snapshot(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "CreatePreSnapshot")) + else if (msg.is_method_call(INTERFACE, "CreatePreSnapshot")) reply_to_command_create_pre_snapshot(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "CreatePostSnapshot")) + else if (msg.is_method_call(INTERFACE, "CreatePostSnapshot")) reply_to_command_create_post_snapshot(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "DeleteSnapshot")) + else if (msg.is_method_call(INTERFACE, "DeleteSnapshot")) reply_to_command_delete_snapshot(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "CreateComparison")) + else if (msg.is_method_call(INTERFACE, "CreateComparison")) reply_to_command_create_comparison(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "GetFiles")) + else if (msg.is_method_call(INTERFACE, "GetFiles")) reply_to_command_get_files(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "SetUndo")) + else if (msg.is_method_call(INTERFACE, "SetUndo")) reply_to_command_set_undo(conn, msg); - else if (msg.is_method_call("org.opensuse.snapper", "GetDiff")) + else if (msg.is_method_call(INTERFACE, "GetDiff")) reply_to_command_get_diff(conn, msg); } catch (const DBus::MarshallingException& e)