The dhcp callback had already a pointer for such user data, but it could
not be set anywhere. Thus adding an extra parameter to
__connman_dhcp_start so it is possible to provide such user_data.
---
 src/connman.h |  3 ++-
 src/dhcp.c    | 11 ++++++++---
 src/network.c |  5 +++--
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/connman.h b/src/connman.h
index 111eea0..5cff513 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -437,7 +437,8 @@ typedef void (* dhcp_cb) (struct connman_ipconfig *ipconfig,
                        struct connman_network *opt_network,
                        bool success, gpointer data);
 int __connman_dhcp_start(struct connman_ipconfig *ipconfig,
-                       struct connman_network *network, dhcp_cb callback);
+                       struct connman_network *network, dhcp_cb callback,
+                       gpointer user_data);
 void __connman_dhcp_stop(struct connman_ipconfig *ipconfig);
 int __connman_dhcp_init(void);
 void __connman_dhcp_cleanup(void);
diff --git a/src/dhcp.c b/src/dhcp.c
index bfaae75..132b787 100644
--- a/src/dhcp.c
+++ b/src/dhcp.c
@@ -42,6 +42,7 @@ struct connman_dhcp {
        struct connman_ipconfig *ipconfig;
        struct connman_network *network;
        dhcp_cb callback;
+       gpointer user_data;
 
        char **nameservers;
        char **timeservers;
@@ -155,13 +156,15 @@ static void dhcp_invalidate(struct connman_dhcp *dhcp, 
bool callback)
        __connman_ipconfig_set_prefixlen(dhcp->ipconfig, 0);
 
        if (dhcp->callback && callback)
-               dhcp->callback(dhcp->ipconfig, dhcp->network, false, NULL);
+               dhcp->callback(dhcp->ipconfig, dhcp->network,
+                                               false, dhcp->user_data);
 }
 
 static void dhcp_valid(struct connman_dhcp *dhcp)
 {
        if (dhcp->callback)
-               dhcp->callback(dhcp->ipconfig, dhcp->network, true, NULL);
+               dhcp->callback(dhcp->ipconfig, dhcp->network,
+                                               true, dhcp->user_data);
 }
 
 static void dhcp_debug(const char *str, void *data)
@@ -579,7 +582,8 @@ static int dhcp_release(struct connman_dhcp *dhcp)
 }
 
 int __connman_dhcp_start(struct connman_ipconfig *ipconfig,
-                       struct connman_network *network, dhcp_cb callback)
+                       struct connman_network *network, dhcp_cb callback,
+                       gpointer user_data)
 {
        const char *last_addr = NULL;
        struct connman_dhcp *dhcp;
@@ -617,6 +621,7 @@ int __connman_dhcp_start(struct connman_ipconfig *ipconfig,
        }
 
        dhcp->callback = callback;
+       dhcp->user_data = user_data;
 
        return g_dhcp_client_start(dhcp->dhcp_client, last_addr);
 }
diff --git a/src/network.c b/src/network.c
index 4b5fb27..d65f7ac 100644
--- a/src/network.c
+++ b/src/network.c
@@ -297,7 +297,8 @@ static int set_connected_dhcp(struct connman_network 
*network)
        service = connman_service_lookup_from_network(network);
        ipconfig_ipv4 = __connman_service_get_ip4config(service);
 
-       err = __connman_dhcp_start(ipconfig_ipv4, network, dhcp_callback);
+       err = __connman_dhcp_start(ipconfig_ipv4, network,
+                                                       dhcp_callback, NULL);
        if (err < 0) {
                connman_error("Can not request DHCP lease");
                return err;
@@ -1700,7 +1701,7 @@ int __connman_network_set_ipconfig(struct connman_network 
*network,
                        return manual_ipv4_set(network, ipconfig_ipv4);
                case CONNMAN_IPCONFIG_METHOD_DHCP:
                        return __connman_dhcp_start(ipconfig_ipv4,
-                                               network, dhcp_callback);
+                                               network, dhcp_callback, NULL);
                }
        }
 
-- 
1.8.5.5

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

Reply via email to