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(); |