Commit d3a3a087d4b6f111bd2724163e8b9069507578ed
1 parent
5949f2b7
Exists in
master
and in
3 other branches
Adding getter/setter request.
Showing
2 changed files
with
51 additions
and
7 deletions
Show diff stats
src/lib3270++/linux/request.cc
@@ -44,16 +44,20 @@ | @@ -44,16 +44,20 @@ | ||
44 | 44 | ||
45 | namespace TN3270 { | 45 | namespace TN3270 { |
46 | 46 | ||
47 | - IPC::Request::Request(Session &session, const char *method) { | ||
48 | - | 47 | + IPC::Request::Request(Session &session) { |
49 | this->conn = session.conn; | 48 | this->conn = session.conn; |
50 | this->msg.in = nullptr; | 49 | this->msg.in = nullptr; |
50 | + this->msg.out = nullptr; | ||
51 | + } | ||
52 | + | ||
53 | + IPC::Request::Request(Session &session, const char *method) : Request(session) { | ||
51 | 54 | ||
52 | - this->msg.out = dbus_message_new_method_call( session.name.c_str(), // Destination | ||
53 | - session.path.c_str(), // Path | ||
54 | - session.interface.c_str(), // Interface | ||
55 | - method // method | ||
56 | - ); | 55 | + this->msg.out = dbus_message_new_method_call( |
56 | + session.name.c_str(), // Destination | ||
57 | + session.path.c_str(), // Path | ||
58 | + session.interface.c_str(), // Interface | ||
59 | + method // Method | ||
60 | + ); | ||
57 | 61 | ||
58 | if(!msg.out) { | 62 | if(!msg.out) { |
59 | throw std::runtime_error("Can't create D-Bus Method Call"); | 63 | throw std::runtime_error("Can't create D-Bus Method Call"); |
@@ -61,6 +65,38 @@ | @@ -61,6 +65,38 @@ | ||
61 | 65 | ||
62 | } | 66 | } |
63 | 67 | ||
68 | + IPC::Request::Request(Session &session, const char *method, const char *property) : Request(session) { | ||
69 | + | ||
70 | + this->msg.out = dbus_message_new_method_call( | ||
71 | + session.name.c_str(), // Destination | ||
72 | + session.path.c_str(), // Path | ||
73 | + "org.freedesktop.DBus.Properties", // Interface | ||
74 | + method // Method | ||
75 | + ); | ||
76 | + | ||
77 | + if(!msg.out) { | ||
78 | + throw std::runtime_error("Can't create D-Bus Property Call"); | ||
79 | + } | ||
80 | + | ||
81 | + // | ||
82 | + // https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-properties | ||
83 | + // org.freedesktop.DBus.Properties.Get (in STRING interface_name, | ||
84 | + // in STRING property_name, | ||
85 | + // out VARIANT value); | ||
86 | + // org.freedesktop.DBus.Properties.Set (in STRING interface_name, | ||
87 | + // in STRING property_name, | ||
88 | + // | ||
89 | + const char *interface_name = session.interface.c_str(); | ||
90 | + | ||
91 | + dbus_message_append_args( | ||
92 | + this->msg.out, | ||
93 | + DBUS_TYPE_STRING,&interface_name, | ||
94 | + DBUS_TYPE_STRING,&method, | ||
95 | + DBUS_TYPE_INVALID | ||
96 | + ); | ||
97 | + | ||
98 | + } | ||
99 | + | ||
64 | IPC::Request::~Request() { | 100 | IPC::Request::~Request() { |
65 | if(msg.out) { | 101 | if(msg.out) { |
66 | dbus_message_unref(msg.out); | 102 | dbus_message_unref(msg.out); |
src/lib3270++/private.h
@@ -240,8 +240,16 @@ | @@ -240,8 +240,16 @@ | ||
240 | 240 | ||
241 | #endif // _WIN32 | 241 | #endif // _WIN32 |
242 | 242 | ||
243 | + Request(Session &session); | ||
244 | + | ||
243 | public: | 245 | public: |
246 | + | ||
247 | + /// @brief Create a method call. | ||
244 | Request(Session &session, const char *method); | 248 | Request(Session &session, const char *method); |
249 | + | ||
250 | + /// @brief Create a get/set property call. | ||
251 | + Request(Session &session, const char *method, const char *property); | ||
252 | + | ||
245 | ~Request(); | 253 | ~Request(); |
246 | 254 | ||
247 | Request & call(); | 255 | Request & call(); |