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_private.h ecore_dbus_unmarshal.c 


Log Message:
Trap known messages

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/Ecore_DBus.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- Ecore_DBus.h        25 Jul 2006 12:44:19 -0000      1.9
+++ Ecore_DBus.h        25 Jul 2006 14:12:21 -0000      1.10
@@ -119,9 +119,7 @@
    EAPI void          ecore_dbus_message_del(Ecore_DBus_Message *msg);
    EAPI void          ecore_dbus_message_print(Ecore_DBus_Message *msg);
    EAPI void         *ecore_dbus_message_header_field_get(Ecore_DBus_Message 
*msg, Ecore_DBus_Message_Header_Field field);
-#if 0
-   EAPI void         *ecore_dbus_get_body_field(Ecore_DBus_Message *msg, 
Ecore_DBus_Message_Field *field, unsigned int pos);
-#endif
+   EAPI void         *ecore_dbus_message_body_field_get(Ecore_DBus_Message 
*msg, unsigned int pos);
 
 #ifdef __cplusplus
 }
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- ecore_dbus.c        25 Jul 2006 12:44:19 -0000      1.12
+++ ecore_dbus.c        25 Jul 2006 14:12:21 -0000      1.13
@@ -147,6 +147,8 @@
    svr->cnt_msg = 0;
    svr->auth_type = -1;
    svr->auth_type_transaction = 0;
+   svr->methods = ecore_hash_new(ecore_direct_hash, ecore_direct_compare);
+   ecore_hash_set_free_value(svr->methods, free);
    servers = _ecore_list2_append(servers, svr);
 
    return svr;
@@ -157,6 +159,8 @@
 {
    if (svr->server) ecore_con_server_del(svr->server);
    servers = _ecore_list2_remove(servers, svr);
+   if (svr->unique_name) free(svr->unique_name);
+   ecore_hash_destroy(svr->methods);
    free(svr);
 }
 
@@ -338,6 +342,7 @@
        while (e->size)
          {
             Ecore_DBus_Event_Server_Data *ev;
+            Ecore_DBus_Message_Field_UInt32 *serial;
 
             msg = _ecore_dbus_message_unmarshal(svr, (unsigned char 
*)(e->data) + offset, e->size);
             if (msg == NULL) break;
@@ -345,11 +350,53 @@
             e->size -= msg->length;
             printf("[ecore_dbus] dbus message length %u bytes, still %d\n",
                    msg->length, e->size);
-            ecore_dbus_message_print(msg);
-            ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
-            ev->server = svr;
-            ev->message = msg;
-            ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev, 
_ecore_dbus_event_server_data_free, NULL);
+            //ecore_dbus_message_print(msg);
+            /* Trap known messages */
+            serial = ecore_dbus_message_header_field_get(msg, 
ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL);
+            if (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
+              {
+                 char *method;
+
+                 method = ecore_hash_remove(svr->methods, (void 
*)serial->value);
+                 if (method)
+                   {
+                      printf("Return from method: %s\n", method);
+                      if (!strcmp(method, "org.freedesktop.DBus.Hello"))
+                        {
+                           char *name;
+
+                           name = ecore_dbus_message_body_field_get(msg, 0);
+                           printf("Got unique name: %s\n", name);
+                           svr->unique_name = strdup(name);
+                           _ecore_dbus_message_free(msg);
+                        }
+                      else
+                        {
+                           ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
+                           ev->server = svr;
+                           ev->message = msg;
+                           ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev,
+                                           _ecore_dbus_event_server_data_free, 
NULL);
+                        }
+                      free(method);
+                   }
+                 else
+                   {
+                      ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
+                      ev->server = svr;
+                      ev->message = msg;
+                      ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev,
+                                      _ecore_dbus_event_server_data_free, 
NULL);
+                   }
+              }
+            else
+              {
+                 ev = malloc(sizeof(Ecore_DBus_Event_Server_Data));
+                 ev->server = svr;
+                 ev->message = msg;
+                 ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev,
+                                 _ecore_dbus_event_server_data_free, NULL);
+              }
          }
      }
    return 0;
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_message.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_dbus_message.c        25 Jul 2006 12:44:19 -0000      1.1
+++ ecore_dbus_message.c        25 Jul 2006 14:12:21 -0000      1.2
@@ -22,9 +22,10 @@
                                   char *fmt, ...)
 {
    unsigned int                    serial, body_start;
+   char                            action[1024];
    Ecore_DBus_Message_Field_Array *arr;
 
-   if ((!destination) && (!path) && (!interface) && (!method)) return 0;
+   if (!method) return 0;
 
    /* init message */
    Ecore_DBus_Message *msg = _ecore_dbus_message_new(svr);
@@ -139,9 +140,14 @@
    *(unsigned int *)(msg->buffer + 4) = msg->length - body_start;
 
    /* show message */
-   ecore_dbus_message_print(msg);
+   //ecore_dbus_message_print(msg);
    /* send message */
    ecore_dbus_server_send(svr, (char *)msg->buffer, msg->length);
+   if (interface)
+     snprintf(action, sizeof(action), "%s.%s", interface, method);
+   else
+     strcpy(action, method);
+   ecore_hash_set(svr->methods, (void *)msg->serial, strdup(action));
 
    serial = msg->serial;
    _ecore_dbus_message_free(msg);
@@ -200,23 +206,62 @@
    return NULL;
 }
 
-#if 0
 EAPI void *
-ecore_dbus_body_field_get(Ecore_DBus_Message *m, Ecore_DBus_Message_Field *mf,
-                         unsigned int pos)
+ecore_dbus_message_body_field_get(Ecore_DBus_Message *m, unsigned int pos)
 {
-   Ecore_List2      *l;
-   unsigned int      i = 0;
+   Ecore_DBus_Message_Field *f;
+   unsigned int              i = 0;
 
-   for (l = (Ecore_List2 *) mf; l; l = l->next)
+   ecore_list_goto_first(m->fields);
+   while ((f = ecore_list_next(m->fields)))
      {
        if (i == pos)
-         return _ecore_dbus_field_get(m->body, (Ecore_DBus_Message_Field *)l);
+         {
+            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_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:
+#if 0
+               default:
+#endif
+                  break;
+              }
+         }
        i++;
      }
    return NULL;
 }
-#endif
 
 /* message functions */
 
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_private.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- ecore_dbus_private.h        25 Jul 2006 12:44:19 -0000      1.5
+++ ecore_dbus_private.h        25 Jul 2006 14:12:21 -0000      1.6
@@ -8,26 +8,42 @@
 
 typedef struct _Ecore_DBus_Auth                      Ecore_DBus_Auth;
 
-typedef struct _Ecore_DBus_Message_Field_Container   
Ecore_DBus_Message_Field_Container;
-
 #define ECORE_DBUS_MESSAGE_FIELD(x) ((Ecore_DBus_Message_Field *)(x))
 #define ECORE_DBUS_MESSAGE_FIELD_CONTAINER(x) 
((Ecore_DBus_Message_Field_Container *)(x))
+typedef struct _Ecore_DBus_Message_Field_Container   
Ecore_DBus_Message_Field_Container;
+
 typedef struct _Ecore_DBus_Message_Field_Byte        
Ecore_DBus_Message_Field_Byte;
+#define ECORE_DBUS_MESSAGE_FIELD_BYTE(x)        
((Ecore_DBus_Message_Field_Byte *)(x))
 typedef struct _Ecore_DBus_Message_Field_Boolean     
Ecore_DBus_Message_Field_Boolean;
+#define ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(x)     
((Ecore_DBus_Message_Field_Boolean *)(x))
 typedef struct _Ecore_DBus_Message_Field_Int16       
Ecore_DBus_Message_Field_Int16;
+#define ECORE_DBUS_MESSAGE_FIELD_INT16(x)       
((Ecore_DBus_Message_Field_Int16 *)(x))
 typedef struct _Ecore_DBus_Message_Field_UInt16      
Ecore_DBus_Message_Field_UInt16;
+#define ECORE_DBUS_MESSAGE_FIELD_UINT16(x)      
((Ecore_DBus_Message_Field_UInt16 *)(x))
 typedef struct _Ecore_DBus_Message_Field_Int32       
Ecore_DBus_Message_Field_Int32;
+#define ECORE_DBUS_MESSAGE_FIELD_INT32(x)       
((Ecore_DBus_Message_Field_Int32 *)(x))
 typedef struct _Ecore_DBus_Message_Field_UInt32      
Ecore_DBus_Message_Field_UInt32;
+#define ECORE_DBUS_MESSAGE_FIELD_UINT32(x)      
((Ecore_DBus_Message_Field_UInt32 *)(x))
 typedef struct _Ecore_DBus_Message_Field_Int64       
Ecore_DBus_Message_Field_Int64;
+#define ECORE_DBUS_MESSAGE_FIELD_INT64(x)       
((Ecore_DBus_Message_Field_Int64 *)(x))
 typedef struct _Ecore_DBus_Message_Field_UInt64      
Ecore_DBus_Message_Field_UInt64;
+#define ECORE_DBUS_MESSAGE_FIELD_UINT64(x)      
((Ecore_DBus_Message_Field_UInt64 *)(x))
 typedef struct _Ecore_DBus_Message_Field_Double      
Ecore_DBus_Message_Field_Double;
+#define ECORE_DBUS_MESSAGE_FIELD_DOUBLE(x)      
((Ecore_DBus_Message_Field_Double *)(x))
 typedef struct _Ecore_DBus_Message_Field_String      
Ecore_DBus_Message_Field_String;
+#define ECORE_DBUS_MESSAGE_FIELD_STRING(x)      
((Ecore_DBus_Message_Field_String *)(x))
 typedef struct _Ecore_DBus_Message_Field_Object_Path 
Ecore_DBus_Message_Field_Object_Path;
+#define ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(x) 
((Ecore_DBus_Message_Field_Object_Path *)(x))
 typedef struct _Ecore_DBus_Message_Field_Signature   
Ecore_DBus_Message_Field_Signature;
+#define ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(x)   
((Ecore_DBus_Message_Field_Signature *)(x))
 typedef struct _Ecore_DBus_Message_Field_Array       
Ecore_DBus_Message_Field_Array;
+#define ECORE_DBUS_MESSAGE_FIELD_ARRAY(x)       
((Ecore_DBus_Message_Field_Array *)(x))
 typedef struct _Ecore_DBus_Message_Field_Variant     
Ecore_DBus_Message_Field_Variant;
+#define ECORE_DBUS_MESSAGE_FIELD_VARIANT(x)     
((Ecore_DBus_Message_Field_Variant *)(x))
 typedef struct _Ecore_DBus_Message_Field_Struct      
Ecore_DBus_Message_Field_Struct;
+#define ECORE_DBUS_MESSAGE_FIELD_STRUCT(x)      
((Ecore_DBus_Message_Field_Struct *)(x))
 typedef struct _Ecore_DBus_Message_Field_Dict_Entry  
Ecore_DBus_Message_Field_Dict_Entry;
+#define ECORE_DBUS_MESSAGE_FIELD_DICT_ENTRY(x)  
((Ecore_DBus_Message_Field_Dict_Entry *)(x))
 
 typedef enum _Ecore_DBus_Auth_Type
 {
@@ -49,12 +65,15 @@
 
 struct _Ecore_DBus_Server
 {
-   Ecore_List2        __list_data;
-   Ecore_Con_Server    *server;
-   int                  authenticated;
-   int                  auth_type;
-   int                  auth_type_transaction;
-   int                  cnt_msg;
+   Ecore_List2            __list_data;
+   Ecore_Con_Server        *server;
+   int                      authenticated;
+   int                      auth_type;
+   int                      auth_type_transaction;
+   int                      cnt_msg;
+
+   Ecore_Hash              *methods;
+   char                    *unique_name;
 };
 
 struct _Ecore_DBus_Message
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_unmarshal.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_dbus_unmarshal.c      25 Jul 2006 12:44:19 -0000      1.2
+++ ecore_dbus_unmarshal.c      25 Jul 2006 14:12:21 -0000      1.3
@@ -34,6 +34,7 @@
    unsigned int                    old_length;
 
    old_length = msg->length;
+   _ecore_dbus_message_padding(msg, 4);
    f = _ecore_dbus_message_field_new(msg, ECORE_DBUS_DATA_TYPE_INT32);
    f->value = _ecore_dbus_message_read_uint32(msg);
    if (*size < (msg->length - old_length))
@@ -54,6 +55,7 @@
    unsigned int                     old_length;
 
    old_length = msg->length;
+   _ecore_dbus_message_padding(msg, 4);
    f = _ecore_dbus_message_field_new(msg, ECORE_DBUS_DATA_TYPE_UINT32);
    f->value = _ecore_dbus_message_read_uint32(msg);
    if (*size < (msg->length - old_length))



-------------------------------------------------------------------------
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