Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_dbus


Modified Files:
        Ecore_DBus.h ecore_dbus.c ecore_dbus_message.c 
        ecore_dbus_methods.c ecore_dbus_private.h 
        ecore_dbus_unmarshal.c ecore_dbus_utils.c 


Log Message:
Add one event type for each type of message

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/Ecore_DBus.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- Ecore_DBus.h        26 Jul 2006 12:08:06 -0000      1.12
+++ Ecore_DBus.h        27 Jul 2006 13:29:43 -0000      1.13
@@ -36,6 +36,7 @@
    typedef struct _Ecore_DBus_Event_Server_Add  Ecore_DBus_Event_Server_Add;
    typedef struct _Ecore_DBus_Event_Server_Del  Ecore_DBus_Event_Server_Del;
    typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Event_Server_Data;
+   typedef struct _Ecore_DBus_Event_Arg         Ecore_DBus_Event_Arg;
    typedef struct _Ecore_DBus_Message           Ecore_DBus_Message;
    typedef struct _Ecore_DBus_Message_Field     Ecore_DBus_Message_Field;
 
@@ -94,8 +95,24 @@
      {
        Ecore_DBus_Server       *server;
        Ecore_DBus_Message_Type  type;
-       char                    *member;
        Ecore_DBus_Message      *message;
+       struct {
+            const char   *path;
+            const char   *interface;
+            const char   *member;
+            const char   *error_name;
+            unsigned int  reply_serial;
+            const char   *destination;
+            const char   *sender;
+            const char   *signature;
+       } header;
+       Ecore_DBus_Event_Arg *args;
+     };
+
+   struct _Ecore_DBus_Event_Arg
+     {
+       Ecore_DBus_Data_Type  type;
+       void                 *value;
      };
 
    typedef enum _Ecore_DBus_Message_Header_Field
@@ -112,8 +129,11 @@
      } Ecore_DBus_Message_Header_Field;
 
    EAPI extern int ECORE_DBUS_EVENT_SERVER_ADD;
-   EAPI extern int ECORE_DBUS_EVENT_SERVER_DATA;
    EAPI extern int ECORE_DBUS_EVENT_SERVER_DEL;
+   EAPI extern int ECORE_DBUS_EVENT_SERVER_METHOD_RETURN;
+   EAPI extern int ECORE_DBUS_EVENT_SERVER_ERROR;
+   EAPI extern int ECORE_DBUS_EVENT_SERVER_SIGNAL;
+   EAPI extern int ECORE_DBUS_EVENT_SERVER_DATA;
 
    /* init */
    EAPI int ecore_dbus_init(void);
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- ecore_dbus.c        26 Jul 2006 20:43:28 -0000      1.17
+++ ecore_dbus.c        27 Jul 2006 13:29:43 -0000      1.18
@@ -42,6 +42,9 @@
 
 EAPI int                 ECORE_DBUS_EVENT_SERVER_ADD = 0;
 EAPI int                 ECORE_DBUS_EVENT_SERVER_DEL = 0;
+EAPI int                 ECORE_DBUS_EVENT_SERVER_METHOD_RETURN = 0;
+EAPI int                 ECORE_DBUS_EVENT_SERVER_ERROR = 0;
+EAPI int                 ECORE_DBUS_EVENT_SERVER_SIGNAL = 0;
 EAPI int                 ECORE_DBUS_EVENT_SERVER_DATA = 0;
 
 /* private function declaration */
@@ -55,8 +58,11 @@
 static int          _ecore_dbus_event_server_add(void *data, int ev_type, void 
*ev);
 static int          _ecore_dbus_event_server_del(void *data, int ev_type, void 
*ev);
 static int          _ecore_dbus_event_server_data(void *data, int ev_type, 
void *ev);
+static void         _ecore_dbus_event_server_del_free(void *data, void *ev);
 static void         _ecore_dbus_event_server_data_free(void *data, void *ev);
 
+static Ecore_DBus_Event_Server_Data 
*_ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg);
+
 /* local variables  */
 
 static const Ecore_DBus_Auth auths[] = {
@@ -83,6 +89,9 @@
 
    ECORE_DBUS_EVENT_SERVER_ADD = ecore_event_type_new();
    ECORE_DBUS_EVENT_SERVER_DEL = ecore_event_type_new();
+   ECORE_DBUS_EVENT_SERVER_METHOD_RETURN = ecore_event_type_new();
+   ECORE_DBUS_EVENT_SERVER_ERROR = ecore_event_type_new();
+   ECORE_DBUS_EVENT_SERVER_SIGNAL = ecore_event_type_new();
    ECORE_DBUS_EVENT_SERVER_DATA = ecore_event_type_new();
 
    handler[i++] = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD,
@@ -102,6 +111,8 @@
 
    if (--init_count != 0) return init_count;
 
+   /* FIXME: Delete servers */
+
    for (i = 0; i < 3; i++)
      ecore_event_handler_del(handler[i]);
 
@@ -254,9 +265,10 @@
    Ecore_DBus_Server           *svr;
 
    e = ev;
-   if (!_ecore_list2_find(servers, ecore_con_server_data_get(e->server))) 
return 1;
-
    svr = ecore_con_server_data_get(e->server);
+   if (!svr) return 1;
+   if (!_ecore_list2_find(servers, svr)) return 1;
+
    ecore_dbus_server_send(svr, "\0", 1);
    ecore_dbus_server_send(svr, "AUTH\r\n", 6);
    printf("[ecore_dbus] begining auth process\n");
@@ -271,14 +283,16 @@
    Ecore_DBus_Event_Server_Del *e2;
 
    e = ev;
-   if (!_ecore_list2_find(servers, ecore_con_server_data_get(e->server))) 
return 1;
-
    svr = ecore_con_server_data_get(e->server);
+   if (!svr) return 1;
+   if (!_ecore_list2_find(servers, svr)) return 1;
+
    e2 = calloc(1, sizeof(Ecore_DBus_Event_Server_Del));
    if (e2)
      {
+       svr->server = NULL;
        e2->server = svr;
-       ecore_event_add(ECORE_DBUS_EVENT_SERVER_DEL, e2, NULL, NULL);
+       ecore_event_add(ECORE_DBUS_EVENT_SERVER_DEL, e2, 
_ecore_dbus_event_server_del_free, NULL);
      }
    return 0;
 }
@@ -288,12 +302,11 @@
 {
    Ecore_Con_Event_Server_Data *e;
    Ecore_DBus_Server           *svr;
-   Ecore_DBus_Event_Server_Add *svr_add;
 
    e = ev;
-   if (!_ecore_list2_find(servers, ecore_con_server_data_get(e->server))) 
return 1;
-
    svr = ecore_con_server_data_get(e->server);
+   if (!svr) return 1;
+   if (!_ecore_list2_find(servers, svr)) return 1;
 
    if (!svr->authenticated)
      {
@@ -306,9 +319,8 @@
             printf("[ecore_dbus] auth type %s successful\n", 
auths[svr->auth_type].name);
             ecore_dbus_server_send(svr, "BEGIN\r\n", 7);
             svr->authenticated = 1;
-            svr_add = malloc(sizeof(Ecore_DBus_Event_Server_Add));
-            svr_add->server = svr;
-            ecore_event_add(ECORE_DBUS_EVENT_SERVER_ADD, svr_add, NULL, NULL);
+            /* Register on the bus */
+            svr->hello = ecore_dbus_method_hello(svr);
          }
        else if (!strncmp(e->data, "DATA", 4))
          {
@@ -336,75 +348,144 @@
    else
      {
        /* message protocol */
-       Ecore_DBus_Message *msg;
-       unsigned int        offset = 0;
+       Ecore_DBus_Message           *msg;
+       unsigned int                  offset = 0;
 
        printf("[ecore_dbus] received server data, %d bytes\n", e->size);
        while (e->size)
          {
-            Ecore_DBus_Event_Server_Data *ev;
-            unsigned int                 *serial;
-            char                         *method;
-
             msg = _ecore_dbus_message_unmarshal(svr, (unsigned char 
*)(e->data) + offset, e->size);
-            if (msg == NULL) break;
+            if (!msg) break;
             offset += msg->length;
             e->size -= msg->length;
             printf("[ecore_dbus] dbus message length %u bytes, still %d\n",
                    msg->length, e->size);
             //ecore_dbus_message_print(msg);
             /* Trap known messages */
-            serial = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL);
-            if ((serial) && (msg->type == 
ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN))
+            if (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
               {
+                 //char         *method;
+                 unsigned int *serial;
 
-                 method = ecore_hash_remove(svr->methods, (void *)(*serial));
-                 if (method)
+                 serial = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL);
+                 //method = ecore_hash_remove(svr->methods, (void 
*)(ev->header.reply_serial));
+                 if (serial)
                    {
-                      printf("Return from method: %s\n", method);
-                      if (!strcmp(method, "org.freedesktop.DBus.Hello"))
+                      if (*serial == svr->hello)
                         {
-                           char *name;
+                           Ecore_DBus_Event_Server_Add *svr_add;
+                           char                        *name;
 
                            name = ecore_dbus_message_body_field_get(msg, 0);
                            printf("Got unique name: %s\n", name);
+                           if (svr->unique_name)
+                             {
+                                printf("Ecore_DBus: Already said hello %s - 
%s\n",
+                                       svr->unique_name, name);
+                                free(svr->unique_name);
+                             }
                            svr->unique_name = strdup(name);
+                           _ecore_dbus_message_free(msg);
+
+                           svr_add = 
malloc(sizeof(Ecore_DBus_Event_Server_Add));
+                           svr_add->server = svr;
+                           ecore_event_add(ECORE_DBUS_EVENT_SERVER_ADD, 
svr_add, NULL, NULL);
+                        }
+                      else
+                        {
+                           Ecore_DBus_Event_Server_Data *ev2;
+                           ev2 = _ecore_dbus_event_create(svr, msg);
+                           
ecore_event_add(ECORE_DBUS_EVENT_SERVER_METHOD_RETURN, ev2,
+                                 _ecore_dbus_event_server_data_free, NULL);
                         }
                    }
+                 else
+                   {
+                      printf("Ecore_DBus: Method return without reply 
serial!\n");
+                   }
+              }
+            else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_ERROR)
+              {
+                 Ecore_DBus_Event_Server_Data *ev2;
+                 ev2 = _ecore_dbus_event_create(svr, msg);
+                 ecore_event_add(ECORE_DBUS_EVENT_SERVER_ERROR, ev2,
+                                 _ecore_dbus_event_server_data_free, NULL);
+              }
+            else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_SIGNAL)
+              {
+                 Ecore_DBus_Event_Server_Data *ev2;
+                 ev2 = _ecore_dbus_event_create(svr, msg);
+                 ecore_event_add(ECORE_DBUS_EVENT_SERVER_SIGNAL, ev2,
+                                 _ecore_dbus_event_server_data_free, NULL);
               }
             else
               {
-                 /* Get interface and member from the message */
-                 char buf[1024];
-
-                 char *interface, *member;
-                 interface = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_INTERFACE);
-                 member = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_MEMBER);
-                 if ((member) && (interface))
-                   snprintf(buf, sizeof(buf), "%s.%s", interface, member);
-                 else if (member)
-                   strcpy(buf, member);
-                 method = strdup(buf);
+                 Ecore_DBus_Event_Server_Data *ev2;
+                 ev2 = _ecore_dbus_event_create(svr, msg);
+                 ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev2,
+                                 _ecore_dbus_event_server_data_free, NULL);
               }
-            ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
-            ev->type = msg->type;
-            ev->server = svr;
-            ev->message = msg;
-            ev->member = method;
-            ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev,
-                            _ecore_dbus_event_server_data_free, NULL);
          }
      }
    return 0;
 }
 
 static void
+_ecore_dbus_event_server_del_free(void *data, void *ev)
+{
+   Ecore_DBus_Event_Server_Del *event;
+
+   event = ev;
+   ecore_dbus_server_del(event->server);
+   free(ev);
+}
+
+static void
 _ecore_dbus_event_server_data_free(void *data, void *ev)
 {
    Ecore_DBus_Event_Server_Data *event;
 
    event = ev;
    _ecore_dbus_message_free(event->message);
-   if (event->member) free(event->member);
+   if (event->args) free(event->args);
    free(ev);
 }
+
+static Ecore_DBus_Event_Server_Data *
+_ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg)
+{
+   Ecore_DBus_Event_Server_Data *ev;
+   unsigned int                 *serial;
+
+   ev = calloc(1, sizeof(Ecore_DBus_Event_Server_Data));
+   if (!ev) return NULL;
+   ev->server = svr;
+   ev->type = msg->type;
+   ev->message = msg;
+   ev->header.path = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_PATH);
+   ev->header.interface = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_INTERFACE);
+   ev->header.member = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_MEMBER);
+   ev->header.error_name = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_ERROR_NAME);
+   serial = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL);
+   if (serial)
+     ev->header.reply_serial = *serial;
+   ev->header.destination = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_DESTINATION);
+   ev->header.sender = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_SENDER);
+   ev->header.signature = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_SIGNATURE);
+   if (!ecore_list_is_empty(msg->fields))
+     {
+       Ecore_DBus_Message_Field *f;
+       int i = 0;
+
+       ev->args = malloc(ecore_list_nodes(msg->fields) * 
sizeof(Ecore_DBus_Event_Arg *));
+       ecore_list_goto_first(msg->fields);
+       while ((f = ecore_list_next(msg->fields)))
+         {
+            ev->args[i].type = f->type;
+            ev->args[i].value = _ecore_dbus_message_field_value_get(f);
+            i++;
+         }
+     }
+   return ev;
+}
+
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_message.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- ecore_dbus_message.c        26 Jul 2006 20:43:28 -0000      1.4
+++ ecore_dbus_message.c        27 Jul 2006 13:29:44 -0000      1.5
@@ -228,119 +228,7 @@
    while ((f = ecore_list_next(m->fields)))
      {
        if (i == pos)
-         {
-            switch (f->type)
-              {
-               case ECORE_DBUS_DATA_TYPE_BYTE:
-                  return &ECORE_DBUS_MESSAGE_FIELD_BYTE(f)->value;
-               case ECORE_DBUS_DATA_TYPE_BOOLEAN:
-                  return &ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(f)->value;
-               case ECORE_DBUS_DATA_TYPE_INT16:
-                  return &ECORE_DBUS_MESSAGE_FIELD_INT16(f)->value;
-               case ECORE_DBUS_DATA_TYPE_UINT16:
-                  return &ECORE_DBUS_MESSAGE_FIELD_UINT16(f)->value;
-               case ECORE_DBUS_DATA_TYPE_INT32:
-                  return &ECORE_DBUS_MESSAGE_FIELD_INT32(f)->value;
-               case ECORE_DBUS_DATA_TYPE_UINT32:
-                  return &ECORE_DBUS_MESSAGE_FIELD_UINT32(f)->value;
-               case ECORE_DBUS_DATA_TYPE_INT64:
-                  return &ECORE_DBUS_MESSAGE_FIELD_INT64(f)->value;
-               case ECORE_DBUS_DATA_TYPE_UINT64:
-                  return &ECORE_DBUS_MESSAGE_FIELD_UINT64(f)->value;
-               case ECORE_DBUS_DATA_TYPE_DOUBLE:
-                  return &ECORE_DBUS_MESSAGE_FIELD_DOUBLE(f)->value;
-               case ECORE_DBUS_DATA_TYPE_STRING:
-                  return ECORE_DBUS_MESSAGE_FIELD_STRING(f)->value;
-               case ECORE_DBUS_DATA_TYPE_OBJECT_PATH:
-                  return ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(f)->value;
-               case ECORE_DBUS_DATA_TYPE_SIGNATURE:
-                  return ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(f)->value;
-               case ECORE_DBUS_DATA_TYPE_ARRAY:
-                    {
-                       Ecore_DBus_Message_Field_Container *c;
-                       Ecore_List                         *list;
-                       void                               *value;
-
-                       list = ecore_list_new();
-                       c = ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f);
-                       ecore_list_goto_first(c->values);
-                       switch 
(ECORE_DBUS_MESSAGE_FIELD_ARRAY(f)->contained_type)
-                         {
-                          case ECORE_DBUS_DATA_TYPE_BYTE:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_BYTE(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_BOOLEAN:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_INT16:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_INT16(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_UINT16:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_UINT16(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_INT32:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_INT32(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_UINT32:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_UINT32(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_INT64:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_INT64(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_UINT64:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_UINT64(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_DOUBLE:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
&ECORE_DBUS_MESSAGE_FIELD_DOUBLE(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_STRING:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
ECORE_DBUS_MESSAGE_FIELD_STRING(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_OBJECT_PATH:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_SIGNATURE:
-                             while ((value = ecore_list_next(c->values)))
-                               ecore_list_append(list, 
ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(value)->value);
-                             break;
-                          case ECORE_DBUS_DATA_TYPE_INVALID:
-                          case ECORE_DBUS_DATA_TYPE_ARRAY:
-                          case ECORE_DBUS_DATA_TYPE_VARIANT:
-                          case ECORE_DBUS_DATA_TYPE_STRUCT:
-                          case ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN:
-                          case ECORE_DBUS_DATA_TYPE_STRUCT_END:
-                          case ECORE_DBUS_DATA_TYPE_DICT_ENTRY:
-                          case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_BEGIN:
-                          case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_END:
-                             return NULL;
-                         }
-                       return list;
-                    }
-               case ECORE_DBUS_DATA_TYPE_INVALID:
-               case ECORE_DBUS_DATA_TYPE_VARIANT:
-               case ECORE_DBUS_DATA_TYPE_STRUCT:
-               case ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN:
-               case ECORE_DBUS_DATA_TYPE_STRUCT_END:
-               case ECORE_DBUS_DATA_TYPE_DICT_ENTRY:
-               case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_BEGIN:
-               case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_END:
-#if 0
-               default:
-#endif
-                  break;
-              }
-         }
+         return _ecore_dbus_message_field_value_get(f);
        i++;
      }
    return NULL;
@@ -552,6 +440,11 @@
            ("[ecore_dbus] field BYTE: value offset = %d value = %c %d\n",
             f->offset, (char)*(f->buffer), (char)*(f->buffer));
         break;
+      case ECORE_DBUS_DATA_TYPE_BOOLEAN:
+        printf
+           ("[ecore_dbus] field BOOLEAN: value offset = %d value = %u\n",
+            f->offset, (unsigned int)*(f->buffer));
+        break;
       case ECORE_DBUS_DATA_TYPE_INT32:
         printf
            ("[ecore_dbus] field INT32: value offset = %d value = %d\n",
@@ -623,7 +516,6 @@
           }
         break;
       case ECORE_DBUS_DATA_TYPE_INVALID:
-      case ECORE_DBUS_DATA_TYPE_BOOLEAN:
       case ECORE_DBUS_DATA_TYPE_INT16:
       case ECORE_DBUS_DATA_TYPE_UINT16:
       case ECORE_DBUS_DATA_TYPE_INT64:
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_methods.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_dbus_methods.c        25 Jul 2006 16:03:05 -0000      1.2
+++ ecore_dbus_methods.c        27 Jul 2006 13:29:44 -0000      1.3
@@ -11,6 +11,16 @@
 EAPI int
 ecore_dbus_method_hello(Ecore_DBus_Server *svr)
 {
+   if (svr->unique_name)
+     {
+       printf("Ecore_DBus: Already registered on the message bus.\n");
+       return 0;
+     }
+   if (svr->hello)
+     {
+       printf("Ecore_DBus: Already tried to register on the message bus, wait 
for reply.\n");
+       return 0;
+     }
    return ecore_dbus_message_new_method_call(svr,
                                             "org.freedesktop.DBus" 
/*destination*/,
                                             "/org/freedesktop/DBus" /*path*/,
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_private.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- ecore_dbus_private.h        26 Jul 2006 12:08:06 -0000      1.8
+++ ecore_dbus_private.h        27 Jul 2006 13:29:44 -0000      1.9
@@ -64,6 +64,7 @@
    int                      cnt_msg;
 
    Ecore_Hash              *methods;
+   unsigned int             hello;
    char                    *unique_name;
 };
 
@@ -224,6 +225,8 @@
 unsigned char _ecore_dbus_message_read_byte(Ecore_DBus_Message *msg);
 unsigned int  _ecore_dbus_message_read_uint32(Ecore_DBus_Message *msg);
 int           _ecore_dbus_alignment_get(Ecore_DBus_Data_Type type);
+void         *_ecore_dbus_message_field_value_get(Ecore_DBus_Message_Field *f);
+
 /* ecore_dbus_marshal.c */
 Ecore_DBus_Message_Field_Byte   
*_ecore_dbus_message_marshal_byte(Ecore_DBus_Message *msg, unsigned char c);
 #if 0
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_unmarshal.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- ecore_dbus_unmarshal.c      26 Jul 2006 20:43:28 -0000      1.5
+++ ecore_dbus_unmarshal.c      27 Jul 2006 13:29:44 -0000      1.6
@@ -367,12 +367,18 @@
    msg->type = *(message + 1);
    msg->flags = *(message + 2);
    msg->protocol = *(message + 3);
+   if (msg->protocol != ECORE_DBUS_MAJOR_PROTOCOL_VERSION)
+     {
+       printf("Ecore_DBus: Only supports protocol 0x%x, message has protocol 
0x%x.\n",
+              ECORE_DBUS_MAJOR_PROTOCOL_VERSION, msg->protocol);
+       goto error;
+     }
    msg->body_length = *(unsigned int *)(message + 4);
    msg->serial = *(unsigned int *)(message + 8);
    if (msg->type == ECORE_DBUS_MESSAGE_TYPE_INVALID)
      {
-       printf("[ecore_dbus] message type invalid\n");
-       return NULL;
+       printf("Ecore_DBus: Invalid message type.\n");
+       goto error;
      }
    /* copy message to buffer */
    _ecore_dbus_message_append_bytes(msg, message, size);
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_utils.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore_dbus_utils.c  25 Jul 2006 16:03:05 -0000      1.3
+++ ecore_dbus_utils.c  27 Jul 2006 13:29:44 -0000      1.4
@@ -144,3 +144,61 @@
           return 0;
      }
 }
+
+void *
+_ecore_dbus_message_field_value_get(Ecore_DBus_Message_Field *f)
+{
+   switch (f->type)
+     {
+      case ECORE_DBUS_DATA_TYPE_BYTE:
+        return &ECORE_DBUS_MESSAGE_FIELD_BYTE(f)->value;
+      case ECORE_DBUS_DATA_TYPE_BOOLEAN:
+        return &ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(f)->value;
+      case ECORE_DBUS_DATA_TYPE_INT16:
+        return &ECORE_DBUS_MESSAGE_FIELD_INT16(f)->value;
+      case ECORE_DBUS_DATA_TYPE_UINT16:
+        return &ECORE_DBUS_MESSAGE_FIELD_UINT16(f)->value;
+      case ECORE_DBUS_DATA_TYPE_INT32:
+        return &ECORE_DBUS_MESSAGE_FIELD_INT32(f)->value;
+      case ECORE_DBUS_DATA_TYPE_UINT32:
+        return &ECORE_DBUS_MESSAGE_FIELD_UINT32(f)->value;
+      case ECORE_DBUS_DATA_TYPE_INT64:
+        return &ECORE_DBUS_MESSAGE_FIELD_INT64(f)->value;
+      case ECORE_DBUS_DATA_TYPE_UINT64:
+        return &ECORE_DBUS_MESSAGE_FIELD_UINT64(f)->value;
+      case ECORE_DBUS_DATA_TYPE_DOUBLE:
+        return &ECORE_DBUS_MESSAGE_FIELD_DOUBLE(f)->value;
+      case ECORE_DBUS_DATA_TYPE_STRING:
+        return ECORE_DBUS_MESSAGE_FIELD_STRING(f)->value;
+      case ECORE_DBUS_DATA_TYPE_OBJECT_PATH:
+        return ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(f)->value;
+      case ECORE_DBUS_DATA_TYPE_SIGNATURE:
+        return ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(f)->value;
+      case ECORE_DBUS_DATA_TYPE_ARRAY:
+          {
+             Ecore_DBus_Message_Field_Container *c;
+             Ecore_List                         *list;
+             void                               *value;
+
+             list = ecore_list_new();
+             c = ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f);
+             ecore_list_goto_first(c->values);
+             while ((value = ecore_list_next(c->values)))
+               ecore_list_append(list, 
_ecore_dbus_message_field_value_get(value));
+             return list;
+          }
+      case ECORE_DBUS_DATA_TYPE_INVALID:
+      case ECORE_DBUS_DATA_TYPE_VARIANT:
+      case ECORE_DBUS_DATA_TYPE_STRUCT:
+      case ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN:
+      case ECORE_DBUS_DATA_TYPE_STRUCT_END:
+      case ECORE_DBUS_DATA_TYPE_DICT_ENTRY:
+      case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_BEGIN:
+      case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_END:
+#if 0
+      default:
+#endif
+        break;
+     }
+   return NULL;
+}



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to