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 


Log Message:
Add error callback

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/Ecore_DBus.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- Ecore_DBus.h        27 Jul 2006 15:06:13 -0000      1.14
+++ Ecore_DBus.h        27 Jul 2006 15:28:44 -0000      1.15
@@ -135,7 +135,8 @@
    EAPI extern int ECORE_DBUS_EVENT_SERVER_SIGNAL;
 
    /* callback */
-   typedef void (*Ecore_DBus_Method_Cb)(void *data, Ecore_DBus_Message_Type 
type, Ecore_DBus_Method_Return *reply);
+   typedef void (*Ecore_DBus_Method_Return_Cb)(void *data, 
Ecore_DBus_Method_Return *reply);
+   typedef void (*Ecore_DBus_Error_Cb)(void *data, const char *error);
 
    /* init */
    EAPI int ecore_dbus_init(void);
@@ -151,9 +152,8 @@
    EAPI unsigned int  ecore_dbus_message_new_method_call(Ecore_DBus_Server 
*svr,
                                                         char *destination, 
char *path,
                                                         char *interface, char 
*method,
-                                                        void (*method_cb)(void 
*udata,
-                                                                          
Ecore_DBus_Message_Type type,
-                                                                          
Ecore_DBus_Event_Server_Data *data),
+                                                        
Ecore_DBus_Method_Return_Cb method_cb,
+                                                        Ecore_DBus_Error_Cb 
error_cb,
                                                         void *data,
                                                         char *fmt, ...);
    EAPI void          ecore_dbus_message_del(Ecore_DBus_Message *msg);
@@ -162,14 +162,14 @@
    EAPI void         *ecore_dbus_message_body_field_get(Ecore_DBus_Message 
*msg, unsigned int pos);
 
    /* methods */
-   EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr, 
Ecore_DBus_Method_Cb method_cb, void *data);
-   EAPI int ecore_dbus_method_list_names(Ecore_DBus_Server *svr, 
Ecore_DBus_Method_Cb method_cb, void *data);
-   EAPI int ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char 
*name, Ecore_DBus_Method_Cb method_cb, void *data);
-   EAPI int ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, 
char *name, unsigned int flags, Ecore_DBus_Method_Cb method_cb, void *data);
-   EAPI int ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char 
*name, Ecore_DBus_Method_Cb method_cb, void *data);
-   EAPI int ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, 
char *connection, Ecore_DBus_Method_Cb method_cb, void *data);
-   EAPI int ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, 
Ecore_DBus_Method_Cb method_cb, void *data);
-   EAPI int ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char 
*match, Ecore_DBus_Method_Cb method_cb, void *data);
+   EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr, 
Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
+   EAPI int ecore_dbus_method_list_names(Ecore_DBus_Server *svr, 
Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
+   EAPI int ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char 
*name, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
+   EAPI int ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, 
char *name, unsigned int flags, Ecore_DBus_Method_Return_Cb method_cb, 
Ecore_DBus_Error_Cb, void *data);
+   EAPI int ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char 
*name, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
+   EAPI int ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, 
char *connection, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, 
void *data);
+   EAPI int ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, 
Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
+   EAPI int ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char 
*match, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
 
 #ifdef __cplusplus
 }
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- ecore_dbus.c        27 Jul 2006 15:06:13 -0000      1.20
+++ ecore_dbus.c        27 Jul 2006 15:28:44 -0000      1.21
@@ -60,7 +60,8 @@
 
 static Ecore_DBus_Event_Server_Data 
*_ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg);
 
-static void         _ecore_dbus_method_hello_cb(void *data, 
Ecore_DBus_Message_Type type, Ecore_DBus_Method_Return *reply);
+static void         _ecore_dbus_method_hello_cb(void *data, 
Ecore_DBus_Method_Return *reply);
+static void         _ecore_dbus_method_error_cb(void *data, const char *error);
 
 /* local variables  */
 
@@ -316,7 +317,7 @@
             ecore_dbus_server_send(svr, "BEGIN\r\n", 7);
             svr->authenticated = 1;
             /* Register on the bus */
-            ecore_dbus_method_hello(svr, _ecore_dbus_method_hello_cb, svr);
+            ecore_dbus_method_hello(svr, _ecore_dbus_method_hello_cb, 
_ecore_dbus_method_error_cb, svr);
          }
        else if (!strncmp(e->data, "DATA", 4))
          {
@@ -362,20 +363,38 @@
             /* Trap known messages */
             ev2 = _ecore_dbus_event_create(svr, msg);
             if (!ev2) break;
-            if ((msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN) ||
-                (msg->type == ECORE_DBUS_MESSAGE_TYPE_ERROR))
+            if (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
               {
                  Ecore_DBus_Message *sent;
                  sent = ecore_hash_remove(svr->messages, (void 
*)(ev2->header.reply_serial));
-                 if ((sent) && (sent->cb.func))
+                 if ((sent) && (sent->cb.method_return))
                    {
-                      sent->cb.func(sent->cb.data, msg->type, ev2);
-                      _ecore_dbus_event_server_data_free(NULL, ev2);
+                      sent->cb.method_return(sent->cb.data, ev2);
                    }
                  else
                    {
                       printf("Ecore_DBus: Reply without reply serial!\n");
                    }
+                 if (sent) _ecore_dbus_message_free(sent);
+                 _ecore_dbus_event_server_data_free(NULL, ev2);
+              }
+            else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_ERROR)
+              {
+                 Ecore_DBus_Message *sent;
+                 sent = ecore_hash_remove(svr->messages, (void 
*)(ev2->header.reply_serial));
+                 if ((sent) && (sent->cb.error))
+                   {
+                      char *error = NULL;
+                      if (ev2->args)
+                        error = ev2->args[0].value;
+                      sent->cb.error(sent->cb.data, error);
+                   }
+                 else
+                   {
+                      printf("Ecore_DBus: Error without reply serial!\n");
+                   }
+                 if (sent) _ecore_dbus_message_free(sent);
+                 _ecore_dbus_event_server_data_free(NULL, ev2);
               }
             else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_SIGNAL)
               {
@@ -454,18 +473,12 @@
 }
 
 static void
-_ecore_dbus_method_hello_cb(void *data, Ecore_DBus_Message_Type type, 
Ecore_DBus_Method_Return *reply)
+_ecore_dbus_method_hello_cb(void *data, Ecore_DBus_Method_Return *reply)
 {
    Ecore_DBus_Event_Server_Add *svr_add;
    Ecore_DBus_Server           *svr;
    char                        *name;
 
-   if (type != ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
-     {
-       printf("Ecore_DBus: Could not register on the message bus\n");
-       return;
-     }
-
    svr = data;
    name = reply->args[0].value;
    printf("Got unique name: %s\n", name);
@@ -480,4 +493,19 @@
    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);
+}
+
+static void
+_ecore_dbus_method_error_cb(void *data, const char *error)
+{
+   Ecore_DBus_Event_Server_Del *ev;
+   Ecore_DBus_Server           *svr;
+
+   svr = data;
+   printf("Ecore_DBus: error %s\n", error);
+
+   ev = malloc(sizeof(Ecore_DBus_Event_Server_Del));
+   if (!ev) return;
+   ev->server = svr;
+   ecore_event_add(ECORE_DBUS_EVENT_SERVER_DEL, ev, 
_ecore_dbus_event_server_del_free, NULL);
 }
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_message.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- ecore_dbus_message.c        27 Jul 2006 15:06:13 -0000      1.7
+++ ecore_dbus_message.c        27 Jul 2006 15:28:44 -0000      1.8
@@ -19,7 +19,8 @@
 EAPI unsigned int
 ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, char *destination,
                                   char *path, char *interface, char *method,
-                                  Ecore_DBus_Method_Cb method_cb,
+                                  Ecore_DBus_Method_Return_Cb method_cb,
+                                  Ecore_DBus_Error_Cb error_cb,
                                   void *data,
                                   char *fmt, ...)
 {
@@ -33,7 +34,8 @@
    Ecore_DBus_Message *msg = _ecore_dbus_message_new(svr);
    if (method_cb)
      {
-       msg->cb.func = method_cb;
+       msg->cb.method_return = method_cb;
+       msg->cb.error = error_cb;
        msg->cb.data = data;
      }
 
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_methods.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- ecore_dbus_methods.c        27 Jul 2006 15:06:13 -0000      1.4
+++ ecore_dbus_methods.c        27 Jul 2006 15:28:44 -0000      1.5
@@ -9,7 +9,10 @@
 #include "ecore_dbus_private.h"
 
 EAPI int
-ecore_dbus_method_hello(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb 
method_cb, void *data)
+ecore_dbus_method_hello(Ecore_DBus_Server *svr,
+                       Ecore_DBus_Method_Return_Cb method_cb,
+                       Ecore_DBus_Error_Cb error_cb,
+                       void *data)
 {
    if (svr->unique_name)
      {
@@ -21,90 +24,111 @@
                                             "/org/freedesktop/DBus" /*path*/,
                                             "org.freedesktop.DBus" 
/*interface*/,
                                             "Hello" /*method*/,
-                                            method_cb, data,
+                                            method_cb, error_cb, data,
                                             NULL /*fmt*/);
 }
 
 EAPI int
-ecore_dbus_method_list_names(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb 
method_cb, void *data)
+ecore_dbus_method_list_names(Ecore_DBus_Server *svr,
+                            Ecore_DBus_Method_Return_Cb method_cb,
+                            Ecore_DBus_Error_Cb error_cb,
+                            void *data)
 {
    return ecore_dbus_message_new_method_call(svr,
                                             "org.freedesktop.DBus" 
/*destination*/,
                                             "/org/freedesktop/DBus" /*path*/,
                                             "org.freedesktop.DBus" 
/*interface*/,
                                             "ListNames" /*method*/,
-                                            method_cb, data,
+                                            method_cb, error_cb, data,
                                             NULL /*fmt*/);
 }
 
 EAPI int
-ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name, 
Ecore_DBus_Method_Cb method_cb, void *data)
+ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name,
+                                Ecore_DBus_Method_Return_Cb method_cb,
+                                Ecore_DBus_Error_Cb error_cb,
+                                void *data)
 {
    return ecore_dbus_message_new_method_call(svr,
                                             "org.freedesktop.DBus" 
/*destination*/,
                                             "/org/freedesktop/DBus" /*path*/,
                                             "org.freedesktop.DBus" 
/*interface*/,
                                             "NameHasOwner" /*method*/,
-                                            method_cb, data,
+                                            method_cb, error_cb, data,
                                             "s" /*fmt*/, name);
 }
 
 EAPI int
-ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, 
unsigned int flags, Ecore_DBus_Method_Cb method_cb, void *data)
+ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, 
unsigned int flags,
+                                       Ecore_DBus_Method_Return_Cb method_cb,
+                                       Ecore_DBus_Error_Cb error_cb,
+                                       void *data)
 {
    return ecore_dbus_message_new_method_call(svr,
                                             "org.freedesktop.DBus" 
/*destination*/,
                                             "/org/freedesktop/DBus" /*path*/,
                                             "org.freedesktop.DBus" 
/*interface*/,
                                             "StartServiceByName" /*method*/,
-                                            method_cb, data,
+                                            method_cb, error_cb, data,
                                             "su" /*fmt*/, name, flags);
 }
 
 EAPI int
-ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name, 
Ecore_DBus_Method_Cb method_cb, void *data)
+ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name,
+                                Ecore_DBus_Method_Return_Cb method_cb,
+                                Ecore_DBus_Error_Cb error_cb,
+                                void *data)
 {
    return ecore_dbus_message_new_method_call(svr,
                                             "org.freedesktop.DBus" 
/*destination*/,
                                             "/org/freedesktop/DBus" /*path*/,
                                             "org.freedesktop.DBus" 
/*interface*/,
                                             "GetNameOwner" /*method*/,
-                                            method_cb, data,
+                                            method_cb, error_cb, data,
                                             "s" /*fmt*/, name);
 }
 
 EAPI int
-ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char 
*connection, Ecore_DBus_Method_Cb method_cb, void *data)
+ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char 
*connection,
+                                          Ecore_DBus_Method_Return_Cb 
method_cb,
+                                          Ecore_DBus_Error_Cb error_cb,
+                                          void *data)
 {
    return ecore_dbus_message_new_method_call(svr,
                                             "org.freedesktop.DBus" 
/*destination*/,
                                             "/org/freedesktop/DBus" /*path*/,
                                             "org.freedesktop.DBus" 
/*interface*/,
                                             "GetConnectionUnixUser" /*method*/,
-                                            method_cb, data,
+                                            method_cb, error_cb, data,
                                             "s" /*fmt*/, connection);
 }
 
 EAPI int
-ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, 
Ecore_DBus_Method_Cb method_cb, void *data)
+ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match,
+                           Ecore_DBus_Method_Return_Cb method_cb,
+                           Ecore_DBus_Error_Cb error_cb,
+                           void *data)
 {
    return ecore_dbus_message_new_method_call(svr,
                                             "org.freedesktop.DBus" 
/*destination*/,
                                             "/org/freedesktop/DBus" /*path*/,
                                             "org.freedesktop.DBus" 
/*interface*/,
                                             "AddMatch" /*method*/,
-                                            method_cb, data,
+                                            method_cb, error_cb, data,
                                             "s" /*fmt*/, match);
 }
 
 EAPI int
-ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match, 
Ecore_DBus_Method_Cb method_cb, void *data)
+ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match,
+                              Ecore_DBus_Method_Return_Cb method_cb,
+                              Ecore_DBus_Error_Cb error_cb,
+                              void *data)
 {
    return ecore_dbus_message_new_method_call(svr,
                                             "org.freedesktop.DBus" 
/*destination*/,
                                             "/org/freedesktop/DBus" /*path*/,
                                             "org.freedesktop.DBus" 
/*interface*/,
                                             "RemoveMatch" /*method*/,
-                                            method_cb, data,
+                                            method_cb, error_cb, data,
                                             "s" /*fmt*/, match);
 }
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_private.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- ecore_dbus_private.h        27 Jul 2006 15:06:13 -0000      1.11
+++ ecore_dbus_private.h        27 Jul 2006 15:28:44 -0000      1.12
@@ -74,8 +74,9 @@
 
    /* callback */
    struct {
-       Ecore_DBus_Method_Cb func;
-       void *data;
+       Ecore_DBus_Method_Return_Cb  method_return;
+       Ecore_DBus_Error_Cb          error;
+       void                        *data;
    } cb;
 
    /* header fields */



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