Send connman mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        https://lists.01.org/mailman/listinfo/connman
or, via email, send a message with subject or body 'help' to
        [email protected]

You can reach the person managing the list at
        [email protected]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of connman digest..."


Today's Topics:

   1. [PATCH 0/2] commandctl: handle error case more gracefully
      (Daniel Wagner)
   2. [PATCH 1/2] client: Pass error code to all D-Bus callbacks
      (Daniel Wagner)
   3. [PATCH 2/2] client: Gracefully enable/disable technologies
      error messages (Daniel Wagner)


----------------------------------------------------------------------

Message: 1
Date: Sat, 30 Mar 2019 11:12:50 +0100
From: Daniel Wagner <[email protected]>
To: [email protected]
Cc: Daniel Wagner <[email protected]>
Subject: [PATCH 0/2] commandctl: handle error case more gracefully
Message-ID: <[email protected]>

Make the enable/disable output a bit more friendly to non experts.

Daniel Wagner (2):
  client: Pass error code to all D-Bus callbacks
  client: Gracefully enable/disable technologies error messages

 client/agent.c        |  14 ++---
 client/commands.c     | 128 ++++++++++++++++++++++++------------------
 client/dbus_helpers.c |  33 ++++++++++-
 client/dbus_helpers.h |   2 +-
 4 files changed, 112 insertions(+), 65 deletions(-)

-- 
2.20.1


------------------------------

Message: 2
Date: Sat, 30 Mar 2019 11:12:51 +0100
From: Daniel Wagner <[email protected]>
To: [email protected]
Cc: Daniel Wagner <[email protected]>
Subject: [PATCH 1/2] client: Pass error code to all D-Bus callbacks
Message-ID: <[email protected]>

Instead parsing the error message in every callback parse it centrally
and just parse the error code down.
---
 client/agent.c        |  14 +++---
 client/commands.c     | 100 +++++++++++++++++++++---------------------
 client/dbus_helpers.c |  33 +++++++++++++-
 client/dbus_helpers.h |   2 +-
 4 files changed, 89 insertions(+), 60 deletions(-)

diff --git a/client/agent.c b/client/agent.c
index d0208892b878..1cad3e03626a 100644
--- a/client/agent.c
+++ b/client/agent.c
@@ -710,8 +710,8 @@ static const GDBusMethodTable agent_methods[] = {
        { },
 };
 
-static int agent_register_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int agent_register_return(DBusMessageIter *iter, int errnum,
+                                const char *error, void *user_data)
 {
        DBusConnection *connection = user_data;
 
@@ -768,8 +768,8 @@ int __connmanctl_agent_register(DBusConnection *connection)
        return result;
 }
 
-static int agent_unregister_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int agent_unregister_return(DBusMessageIter *iter, int errnum,
+                                  const char *error, void *user_data)
 {
        if (error) {
                fprintf(stderr, "Error unregistering Agent: %s\n", error);
@@ -819,8 +819,8 @@ static const GDBusMethodTable vpn_agent_methods[] = {
        { },
 };
 
-static int vpn_agent_register_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int vpn_agent_register_return(DBusMessageIter *iter, int errnum,
+                                    const char *error, void *user_data)
 {
        DBusConnection *connection = user_data;
 
@@ -872,7 +872,7 @@ int __connmanctl_vpn_agent_register(DBusConnection 
*connection)
        return result;
 }
 
-static int vpn_agent_unregister_return(DBusMessageIter *iter,
+static int vpn_agent_unregister_return(DBusMessageIter *iter, int errnum,
                const char *error, void *user_data)
 {
        if (error) {
diff --git a/client/commands.c b/client/commands.c
index 097d293a3e9a..94ddc33dae44 100644
--- a/client/commands.c
+++ b/client/commands.c
@@ -142,7 +142,7 @@ static int parse_args(char *arg, struct connman_option 
*options)
        return '?';
 }
 
-static int enable_return(DBusMessageIter *iter, const char *error,
+static int enable_return(DBusMessageIter *iter, int errnum, const char *error,
                void *user_data)
 {
        char *tech = user_data;
@@ -191,7 +191,7 @@ static int cmd_enable(char *args[], int num, struct 
connman_option *options)
                                "Powered", DBUS_TYPE_BOOLEAN, &b);
 }
 
-static int disable_return(DBusMessageIter *iter, const char *error,
+static int disable_return(DBusMessageIter *iter, int errnum, const char *error,
                void *user_data)
 {
        char *tech = user_data;
@@ -240,7 +240,7 @@ static int cmd_disable(char *args[], int num, struct 
connman_option *options)
                                "Powered", DBUS_TYPE_BOOLEAN, &b);
 }
 
-static int state_print(DBusMessageIter *iter, const char *error,
+static int state_print(DBusMessageIter *iter, int errnum, const char *error,
                void *user_data)
 {
        DBusMessageIter entry;
@@ -267,7 +267,7 @@ static int cmd_state(char *args[], int num, struct 
connman_option *options)
                        state_print, NULL, NULL, NULL);
 }
 
-static int clock_print(DBusMessageIter *iter, const char *error,
+static int clock_print(DBusMessageIter *iter, int errnum, const char *error,
                void *user_data)
 {
        DBusMessageIter entry;
@@ -294,7 +294,7 @@ static int cmd_clock(char *args[], int num, struct 
connman_option *options)
                        clock_print, NULL, NULL, NULL);
 }
 
-static int services_list(DBusMessageIter *iter, const char *error,
+static int services_list(DBusMessageIter *iter, int errnum, const char *error,
                void *user_data)
 {
        if (!error) {
@@ -307,7 +307,7 @@ static int services_list(DBusMessageIter *iter, const char 
*error,
        return 0;
 }
 
-static int peers_list(DBusMessageIter *iter,
+static int peers_list(DBusMessageIter *iter, int errnum,
                                        const char *error, void *user_data)
 {
        if (!error) {
@@ -319,7 +319,7 @@ static int peers_list(DBusMessageIter *iter,
        return 0;
 }
 
-static int tethering_clients_list(DBusMessageIter *iter,
+static int tethering_clients_list(DBusMessageIter *iter, int errnum,
                                        const char *error, void *user_data)
 {
        if (!error) {
@@ -331,7 +331,7 @@ static int tethering_clients_list(DBusMessageIter *iter,
        return 0;
 }
 
-static int object_properties(DBusMessageIter *iter,
+static int object_properties(DBusMessageIter *iter, int errnum,
                                        const char *error, void *user_data)
 {
        char *path = user_data;
@@ -429,7 +429,7 @@ static int cmd_peers(char *args[], int num, struct 
connman_option *options)
                                object_properties, path, NULL, NULL);
 }
 
-static int technology_print(DBusMessageIter *iter, const char *error,
+static int technology_print(DBusMessageIter *iter, int errnum, const char 
*error,
                void *user_data)
 {
        DBusMessageIter array;
@@ -476,8 +476,8 @@ struct tether_enable {
        dbus_bool_t enable;
 };
 
-static int tether_set_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int tether_set_return(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        struct tether_enable *tether = user_data;
        char *str;
@@ -553,8 +553,8 @@ static int tether_update(struct tether_properties *tether)
        return -EINPROGRESS;
 }
 
-static int tether_set_ssid_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int tether_set_ssid_return(DBusMessageIter *iter, int errnum,
+                               const char *error, void *user_data)
 {
        struct tether_properties *tether = user_data;
 
@@ -569,8 +569,8 @@ static int tether_set_ssid_return(DBusMessageIter *iter, 
const char *error,
        return tether_update(tether);
 }
 
-static int tether_set_passphrase_return(DBusMessageIter *iter,
-               const char *error, void *user_data)
+static int tether_set_passphrase_return(DBusMessageIter *iter, int errnum,
+                                       const char *error, void *user_data)
 {
        struct tether_properties *tether = user_data;
 
@@ -663,7 +663,7 @@ static int cmd_tethering_clients(char *args[], int num, 
struct connman_option *o
                                tethering_clients_list, NULL, NULL, NULL);
 }
 
-static int scan_return(DBusMessageIter *iter, const char *error,
+static int scan_return(DBusMessageIter *iter, int ernnum, const char *error,
                void *user_data)
 {
        char *path = user_data;
@@ -699,8 +699,8 @@ static int cmd_scan(char *args[], int num, struct 
connman_option *options)
                        scan_return, path, NULL, NULL);
 }
 
-static int connect_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int connect_return(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        char *path = user_data;
 
@@ -740,8 +740,8 @@ static int cmd_connect(char *args[], int num, struct 
connman_option *options)
                        iface, "Connect", connect_return, path, NULL, NULL);
 }
 
-static int disconnect_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int disconnect_return(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        char *path = user_data;
 
@@ -787,8 +787,8 @@ struct move_service {
        char *target;
 };
 
-static int move_before_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int move_before_return(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        struct move_service *services = user_data;
        char *service;
@@ -845,8 +845,8 @@ static int cmd_service_move_before(char *args[], int num,
                                        services->target);
 }
 
-static int move_after_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int move_after_return(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        struct move_service *services = user_data;
        char *service;
@@ -903,8 +903,8 @@ static int cmd_service_move_after(char *args[], int num,
                                        services->target);
 }
 
-static int config_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int config_return(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        char *service_name = user_data;
 
@@ -1560,8 +1560,8 @@ static int cmd_agent(char *args[], int num, struct 
connman_option *options)
        return 0;
 }
 
-static int vpnconnections_properties(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int vpnconnections_properties(DBusMessageIter *iter, int errnum,
+                               const char *error, void *user_data)
 {
        char *path = user_data;
        char *str;
@@ -1590,8 +1590,8 @@ static int vpnconnections_properties(DBusMessageIter 
*iter, const char *error,
        return 0;
 }
 
-static int vpnconnections_list(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int vpnconnections_list(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        if (!error)
                __connmanctl_vpnconnections_list(iter);
@@ -1782,8 +1782,8 @@ static void session_notify_remove(void)
        session_notify_path = NULL;
 }
 
-static int session_connect_cb(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int session_connect_cb(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        if (error) {
                fprintf(stderr, "Error: %s\n", error);
@@ -1801,8 +1801,8 @@ static int session_connect(void)
                        session_connect_cb, NULL, NULL, NULL);
 }
 
-static int session_disconnect_cb(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int session_disconnect_cb(DBusMessageIter *iter, int errnum,
+                               const char *error, void *user_data)
 {
        if (error)
                fprintf(stderr, "Error: %s\n", error);
@@ -1817,8 +1817,8 @@ static int session_disconnect(void)
                        session_disconnect_cb, NULL, NULL, NULL);
 }
 
-static int session_create_cb(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int session_create_cb(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        gboolean connect = GPOINTER_TO_INT(user_data);
        char *str;
@@ -1990,8 +1990,8 @@ static int session_create(gboolean connect, char *args[], 
int num,
        return res;
 }
 
-static int session_destroy_cb(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int session_destroy_cb(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        if (error) {
                fprintf(stderr, "Error destroying session: %s", error);
@@ -2022,8 +2022,8 @@ static int session_destroy(void)
                        session_destroy_append, session_path);
 }
 
-static int session_config_return(DBusMessageIter *iter, const char *error,
-               void *user_data)
+static int session_config_return(DBusMessageIter *iter, int errnum,
+                               const char *error, void *user_data)
 {
        char *property_name = user_data;
 
@@ -2462,8 +2462,8 @@ static char *lookup_session(const char *text, int state)
        return lookup_options(session_options, text, state);
 }
 
-static int peer_service_cb(DBusMessageIter *iter, const char *error,
-                                                       void *user_data)
+static int peer_service_cb(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        bool registration = GPOINTER_TO_INT(user_data);
 
@@ -2972,8 +2972,8 @@ static void update_services(DBusMessageIter *iter)
        }
 }
 
-static int populate_service_hash(DBusMessageIter *iter, const char *error,
-                               void *user_data)
+static int populate_service_hash(DBusMessageIter *iter, int errnum,
+                               const char *error, void *user_data)
 {
        if (error) {
                fprintf(stderr, "Error getting services: %s", error);
@@ -3030,8 +3030,8 @@ static void add_vpnconnections(DBusMessageIter *iter)
        }
 }
 
-static int populate_vpnconnection_hash(DBusMessageIter *iter, const char 
*error,
-                               void *user_data)
+static int populate_vpnconnection_hash(DBusMessageIter *iter, int errnum,
+                               const char *error, void *user_data)
 {
        DBusMessageIter array;
 
@@ -3104,8 +3104,8 @@ static void update_peers(DBusMessageIter *iter)
        }
 }
 
-static int populate_peer_hash(DBusMessageIter *iter,
-                                       const char *error, void *user_data)
+static int populate_peer_hash(DBusMessageIter *iter, int errnum,
+                       const char *error, void *user_data)
 {
        if (error) {
                fprintf(stderr, "Error getting peers: %s", error);
@@ -3169,8 +3169,8 @@ static void update_technologies(DBusMessageIter *iter)
        }
 }
 
-static int populate_technology_hash(DBusMessageIter *iter, const char *error,
-                               void *user_data)
+static int populate_technology_hash(DBusMessageIter *iter, int errnum,
+                               const char *error, void *user_data)
 {
        if (error) {
                fprintf(stderr, "Error getting technologies: %s\n", error);
diff --git a/client/dbus_helpers.c b/client/dbus_helpers.c
index 6ca407d41361..929ebe1ca6b6 100644
--- a/client/dbus_helpers.c
+++ b/client/dbus_helpers.c
@@ -30,6 +30,34 @@
 
 #define TIMEOUT         120000
 
+#ifndef DBUS_ERROR_UNKNOWN_METHOD
+#define DBUS_ERROR_UNKNOWN_METHOD "org.freedesktop.DBus.Error.UnknownMethod"
+#endif
+
+#ifndef DBUS_ERROR_UNKNOWN_PROPERTY
+#define DBUS_ERROR_UNKNOWN_PROPERTY 
"org.freedesktop.DBus.Error.UnknownProperty"
+#endif
+
+#ifndef DBUS_ERROR_UNKNOWN_OBJECT
+#define DBUS_ERROR_UNKNOWN_OBJECT "org.freedesktop.DBus.Error.UnknownObject"
+#endif
+
+static int string2errno(const char *error)
+{
+       if (!g_strcmp0(error, DBUS_ERROR_UNKNOWN_METHOD))
+               return -ENOTSUP;
+       if (!g_strcmp0(error, DBUS_ERROR_UNKNOWN_PROPERTY))
+               return -ENOENT;
+       if (!g_strcmp0(error, DBUS_ERROR_UNKNOWN_OBJECT))
+               return -ENODEV;
+       if (!g_strcmp0(error, "net.connman.Error.AlreadyEnabled"))
+               return -EALREADY;
+       if (!g_strcmp0(error, "net.connman.Error.AlreadyDisabled"))
+               return -EALREADY;
+
+       return -EINVAL;
+}
+
 void __connmanctl_dbus_print(DBusMessageIter *iter, const char *pre,
                const char *dict, const char *sep)
 {
@@ -159,14 +187,15 @@ static void dbus_method_reply(DBusPendingCall *call, void 
*user_data)
                dbus_error_init(&err);
                dbus_set_error_from_message(&err, reply);
 
-               callback->cb(NULL, err.message, callback->user_data);
+               callback->cb(NULL, string2errno(err.name), err.message,
+                       callback->user_data);
 
                dbus_error_free(&err);
                goto end;
        }
 
        dbus_message_iter_init(reply, &iter);
-       res = callback->cb(&iter, NULL, callback->user_data);
+       res = callback->cb(&iter, 0, NULL, callback->user_data);
 
 end:
        __connmanctl_redraw_rl();
diff --git a/client/dbus_helpers.h b/client/dbus_helpers.h
index 395808acd023..d3326a48a5db 100644
--- a/client/dbus_helpers.h
+++ b/client/dbus_helpers.h
@@ -38,7 +38,7 @@ void __connmanctl_dbus_print(DBusMessageIter *iter, const 
char *pre,
                const char *dict, const char *sep);
 
 typedef int (*connmanctl_dbus_method_return_func_t)(DBusMessageIter *iter,
-               const char *error, void *user_data);
+               int errnum, const char *error, void *user_data);
 
 typedef void (*connmanctl_dbus_append_func_t)(DBusMessageIter *iter,
                void *user_data);
-- 
2.20.1


------------------------------

Message: 3
Date: Sat, 30 Mar 2019 11:12:52 +0100
From: Daniel Wagner <[email protected]>
To: [email protected]
Cc: Daniel Wagner <[email protected]>
Subject: [PATCH 2/2] client: Gracefully enable/disable technologies
        error messages
Message-ID: <[email protected]>

Don't print 'Error' in all non successful cases. Instead print helpful
information such as 'TECH is not available'.
---
 client/commands.c | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/client/commands.c b/client/commands.c
index 94ddc33dae44..94c375dd198d 100644
--- a/client/commands.c
+++ b/client/commands.c
@@ -154,10 +154,19 @@ static int enable_return(DBusMessageIter *iter, int 
errnum, const char *error,
        else
                str = tech;
 
-       if (!error)
+       switch (errnum) {
+       case 0:
                fprintf(stdout, "Enabled %s\n", str);
-       else
+               break;
+       case -ENODEV:
+               fprintf(stderr, "%s is not available\n", str);
+               break;
+       case -EALREADY:
+               fprintf(stderr, "%s is already enabled\n", str);
+               break;
+       default:
                fprintf(stderr, "Error %s: %s\n", str, error);
+       }
 
        g_free(user_data);
 
@@ -203,10 +212,19 @@ static int disable_return(DBusMessageIter *iter, int 
errnum, const char *error,
        else
                str = tech;
 
-       if (!error)
-               fprintf(stdout, "Disabled %s\n", str);
-       else
+       switch (errnum) {
+       case 0:
+               fprintf(stdout, "Disable %s\n", str);
+               break;
+       case -ENODEV:
+               fprintf(stderr, "%s is not available\n", str);
+               break;
+       case -EALREADY:
+               fprintf(stderr, "%s is already disabled\n", str);
+               break;
+       default:
                fprintf(stderr, "Error %s: %s\n", str, error);
+       }
 
        g_free(user_data);
 
-- 
2.20.1


------------------------------

Subject: Digest Footer

_______________________________________________
connman mailing list
[email protected]
https://lists.01.org/mailman/listinfo/connman


------------------------------

End of connman Digest, Vol 41, Issue 32
***************************************

Reply via email to