Working - send method call and reply with serverClient
authorRadoslaw Pajak <r.pajak@samsung.com>
Fri, 5 Jul 2013 12:46:33 +0000 (14:46 +0200)
committerRadoslaw Pajak <r.pajak@samsung.com>
Fri, 5 Jul 2013 12:46:33 +0000 (14:46 +0200)
added sender to message header when kdbus
header aligned by upper layers - do not need to align in kdbus
do_io_error stil must be commented out in do reading when bytes_read == 0

todo - translate kdbus "system" broadcasts into dbus messages

dbus/dbus-bus.c
dbus/dbus-connection.c
dbus/dbus-transport-kdbus.c
dbus/dbus-transport-kdbus.h
dbus/dbus-transport-socket.c

index f4ddc9a..de76315 100644 (file)
@@ -1195,7 +1195,7 @@ dbus_bus_request_name (DBusConnection *connection,
        }
        else
        {
-               if(!bus_register_kdbus_policy(name, connection, error))  //todo check what to do with policy if program doesn't use dbus_bus_request_name
+               if(!bus_register_policy_kdbus(name, connection, error))  //todo check what to do with policy if program doesn't use dbus_bus_request_name
                        return -1;
                dbus_connection_set_is_authenticated(connection);
 
index 946960f..d987654 100644 (file)
@@ -45,6 +45,7 @@
 #include "dbus-bus.h"
 #include "dbus-marshal-basic.h"
 #include "dbus-transport-kdbus.h"
+#include <stdlib.h>
 
 #ifdef DBUS_DISABLE_CHECKS
 #define TOOK_LOCK_CHECK(connection)
@@ -2058,6 +2059,23 @@ _dbus_connection_send_preallocated_unlocked_no_update (DBusConnection       *con
   _dbus_verbose ("Message %p serial is %u\n",
                  message, dbus_message_get_serial (message));
   
+  if(dbus_transport_is_kdbus(connection))
+  {
+         const char* name;
+         char* sender;
+
+         name = dbus_bus_get_unique_name(connection);
+         sender = malloc (strlen(name) + 4);
+         if(sender)
+         {
+                 strcpy(sender,":1.");
+                 strcpy(&sender[3], name);
+                 _dbus_verbose ("Message sender: %s\n", sender);
+                 dbus_message_set_sender(message, sender);
+                 free((void*)sender);
+         }
+  }
+
   dbus_message_lock (message);
 
   /* Now we need to run an iteration to hopefully just write the messages
index cb2888e..ef39d15 100644 (file)
@@ -113,14 +113,15 @@ int kdbus_write_msg(DBusConnection *connection, DBusMessage *message, int fd)
     const DBusString *body;
     uint64_t ret_size;
 
-    uint64_t i;
+//    uint64_t i;
 
     if((name = dbus_message_get_destination(message)))
     {
        _dbus_verbose ("do writing destination: %s\n", name); //todo can be removed at the end
-       if((name[0] == '1') && (name[1] == ':'))
+       dst_id = KDBUS_DST_ID_WELL_KNOWN_NAME;
+       if((name[0] == ':') && (name[1] == '1') && (name[2] == '.'))
        {
-               dst_id = strtoll(&name[2], NULL, 10);
+               dst_id = strtoll(&name[3], NULL, 10);
                _dbus_verbose ("do writing uniqe id: %lu\n", dst_id); //todo can be removed at the end
                name = NULL;
        }
@@ -129,19 +130,19 @@ int kdbus_write_msg(DBusConnection *connection, DBusMessage *message, int fd)
     _dbus_message_get_network_data (message, &header, &body);
     ret_size = (uint64_t)_dbus_string_get_length(header);
 
-    fprintf (stderr, "\nheader:\n");
+  /*  fprintf (stderr, "\nheader:\n");
     for(i=0; i < ret_size; i++)
     {
        fprintf (stderr, "%02x", _dbus_string_get_byte(header,i));
     }
-    fprintf (stderr, "\nret size: %lu, i: %lu\n", ret_size, i);
+    fprintf (stderr, "\nret size: %lu, i: %lu\n", ret_size, i);*/
 
-    _dbus_verbose("padding bytes for header: %lu \n", KDBUS_ALIGN8(ret_size) - ret_size);
+//    _dbus_verbose("padding bytes for header: %lu \n", KDBUS_ALIGN8(ret_size) - ret_size);
 
     size = sizeof(struct kdbus_msg);
        size += KDBUS_ITEM_SIZE(sizeof(struct kdbus_vec));
-       if(KDBUS_ALIGN8(ret_size) - ret_size)  //if padding needed
-               size += KDBUS_ITEM_SIZE(sizeof(struct kdbus_vec));  //additional structure for padding null bytes
+//     if(KDBUS_ALIGN8(ret_size) - ret_size)  //if padding needed
+//             size += KDBUS_ITEM_SIZE(sizeof(struct kdbus_vec));  //additional structure for padding null bytes
        size += KDBUS_ITEM_SIZE(sizeof(struct kdbus_vec));
 
        if (dst_id == KDBUS_DST_ID_BROADCAST)
@@ -181,16 +182,14 @@ int kdbus_write_msg(DBusConnection *connection, DBusMessage *message, int fd)
        item->vec.size = ret_size;
        item = KDBUS_PART_NEXT(item);
 
-
-
-       if(KDBUS_ALIGN8(ret_size) - ret_size)
+/*     if(KDBUS_ALIGN8(ret_size) - ret_size)
        {
                item->type = KDBUS_MSG_PAYLOAD_VEC;
                item->size = KDBUS_PART_HEADER_SIZE + sizeof(struct kdbus_vec);
                item->vec.address = (uint64_t)NULL;
                item->vec.size = KDBUS_ALIGN8(ret_size) - ret_size;
                item = KDBUS_PART_NEXT(item);
-       }
+       }*/
 
        item->type = KDBUS_MSG_PAYLOAD_VEC;
        item->size = KDBUS_PART_HEADER_SIZE + sizeof(struct kdbus_vec);
@@ -198,12 +197,12 @@ int kdbus_write_msg(DBusConnection *connection, DBusMessage *message, int fd)
        item->vec.size = (uint64_t)_dbus_string_get_length(body);
        ret_size += item->vec.size;
 
-    fprintf (stderr, "\nbody:\n");
+  /*  fprintf (stderr, "\nbody:\n");
     for(i=0; i < item->vec.size; i++)
     {
        fprintf (stderr, "%02x", _dbus_string_get_byte(body,i));
     }
-    fprintf (stderr, "\nitem->vec.size: %llu, i: %lu\n", item->vec.size, i);
+    fprintf (stderr, "\nitem->vec.size: %llu, i: %lu\n", item->vec.size, i);*/
 
 
        item = KDBUS_PART_NEXT(item);
@@ -1945,7 +1944,7 @@ void append_policy(struct kdbus_cmd_policy *cmd_policy, struct kdbus_policy *pol
        free(policy);
 }
 
-dbus_bool_t bus_register_kdbus_policy(const char* name, DBusConnection *connection, DBusError *error)
+dbus_bool_t bus_register_policy_kdbus(const char* name, DBusConnection *connection, DBusError *error)
 {
        struct kdbus_cmd_policy *cmd_policy;
        struct kdbus_policy *policy;
index 8aa0b90..19ec169 100644 (file)
@@ -8,6 +8,6 @@
 dbus_bool_t dbus_transport_is_kdbus(DBusConnection *connection);
 DBusTransportOpenResult _dbus_transport_open_kdbus(DBusAddressEntry *entry, DBusTransport **transport_p, DBusError *error);
 dbus_bool_t bus_register_kdbus(char* name, DBusConnection *connection, DBusError *error);
-dbus_bool_t bus_register_kdbus_policy(const char* name, DBusConnection *connection, DBusError *error);
+dbus_bool_t bus_register_policy_kdbus(const char* name, DBusConnection *connection, DBusError *error);
 uint64_t bus_request_name_kdbus(DBusConnection *connection, const char *name, const uint64_t flags, DBusError *error);
 void dbus_bus_add_match_kdbus (DBusConnection *connection, const char *rule, DBusError *error);
index 5da3e98..45de9e8 100644 (file)
@@ -553,7 +553,7 @@ do_writing (DBusTransport *transport)
       header_len = _dbus_string_get_length (header);
       body_len = _dbus_string_get_length (body);
 
-  /*    fprintf (stderr, "\nheader:\n");  //todo for test - to remove
+  /*    fprintf (stderr, "\nheader:\n");  //todo for test - to remove together wit int i declaration above
       for(i=0; i < header_len; i++)
       {
        fprintf (stderr, "%02x", _dbus_string_get_byte(header,i));