Commit d3a3a087d4b6f111bd2724163e8b9069507578ed

Authored by Perry Werneck
1 parent 5949f2b7

Adding getter/setter request.

src/lib3270++/linux/request.cc
... ... @@ -44,16 +44,20 @@
44 44  
45 45 namespace TN3270 {
46 46  
47   - IPC::Request::Request(Session &session, const char *method) {
48   -
  47 + IPC::Request::Request(Session &session) {
49 48 this->conn = session.conn;
50 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 62 if(!msg.out) {
59 63 throw std::runtime_error("Can't create D-Bus Method Call");
... ... @@ -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 100 IPC::Request::~Request() {
65 101 if(msg.out) {
66 102 dbus_message_unref(msg.out);
... ...
src/lib3270++/private.h
... ... @@ -240,8 +240,16 @@
240 240  
241 241 #endif // _WIN32
242 242  
  243 + Request(Session &session);
  244 +
243 245 public:
  246 +
  247 + /// @brief Create a method call.
244 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 253 ~Request();
246 254  
247 255 Request & call();
... ...