DA: Add DHCP state notify function 20/283620/2
authorJaehyun Kim <jeik01.kim@samsung.com>
Mon, 31 Oct 2022 11:07:34 +0000 (20:07 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Mon, 31 Oct 2022 11:10:03 +0000 (20:10 +0900)
Change-Id: Ie4408b5db690133c74f05dcf3fb94b5dd8eee4df
Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
src/connman.h
src/dhcp.c
src/network.c

index 18c4fe0..437c494 100755 (executable)
@@ -677,6 +677,9 @@ const char *__connman_network_get_group(struct connman_network *network);
 const char *__connman_network_get_ident(struct connman_network *network);
 bool __connman_network_get_weakness(struct connman_network *network);
 bool __connman_network_native_autoconnect(struct connman_network *network);
+#if defined TIZEN_EXT
+dbus_bool_t __connman_network_notify_dhcp_changed(const char *key, void *val);
+#endif
 
 int __connman_config_init();
 void __connman_config_cleanup(void);
index f15a214..ae60fcf 100644 (file)
 
 #define RATE_LIMIT_INTERVAL    60      /* delay between successive attempts */
 
+#if defined TIZEN_EXT
+#define DHCP_SUCCESS           "DHCP_SUCCESS"
+#endif
+
 struct connman_dhcp {
        struct connman_ipconfig *ipconfig;
        struct connman_network *network;
@@ -287,16 +291,23 @@ static void no_lease_cb(GDHCPClient *dhcp_client, gpointer user_data)
 #if defined TIZEN_EXT
        if (dhcp->network &&
                        connman_network_get_bool(dhcp->network, "WiFi.RoamingDHCP")) {
+               int lease_time = 0;
+
                connman_network_set_bool(dhcp->network, "WiFi.RoamingDHCP", false);
                __connman_network_enable_ipconfig(dhcp->network, dhcp->ipconfig);
+               __connman_network_notify_dhcp_changed("DHCP_FAIL", &lease_time);
 
                return;
        }
 
        if (connman_setting_get_bool("EnableAutoIp") == false) {
                DBG("link-local address autoconfiguration is disabled.");
-               if (dhcp->network)
-                       __connman_network_disconnect(dhcp->network);
+               if (dhcp->network) {
+                       int lease_time = 0;
+                       DBG("[DHCP-C] auto ip is not used, set dhcp-fail error and disconnect");
+                       __connman_network_notify_dhcp_changed("DHCP_FAIL", &lease_time);
+                       connman_network_set_error(dhcp->network, CONNMAN_NETWORK_ERROR_DHCP_FAIL);
+               }
                return;
        }
 #endif
@@ -555,6 +566,7 @@ static void lease_available_cb(GDHCPClient *dhcp_client, gpointer user_data)
 
 #if defined TIZEN_EXT
        __connman_ipconfig_set_dhcp_lease_duration(dhcp->ipconfig, dhcp_lease_duration);
+       __connman_network_notify_dhcp_changed(DHCP_SUCCESS, &dhcp_lease_duration);
 #endif
 
        /*
index 8eb8c1e..ca73910 100755 (executable)
 #include <connman/acd.h>
 #include "src/shared/arp.h"
 
+#if defined TIZEN_EXT
+#include <gdbus.h>
+
+static DBusConnection *connection;
+#endif
+
 /*
  * How many times to send RS with the purpose of
  * refreshing RDNSS entries before they actually expire.
@@ -2081,6 +2087,37 @@ out:
        return err;
 }
 
+#if defined TIZEN_EXT
+dbus_bool_t __connman_network_notify_dhcp_changed(const char *key, void *val)
+{
+       int *value = (int *) val;
+       DBusMessage *signal;
+       DBusMessageIter iter;
+       dbus_bool_t result = FALSE;
+
+       DBG("key %s, val %d", key, *value);
+
+       signal = dbus_message_new_signal(CONNMAN_MANAGER_PATH,
+                       CONNMAN_MANAGER_INTERFACE, "DhcpChanged");
+
+       if (!signal)
+               return result;
+
+       dbus_message_iter_init_append(signal, &iter);
+       connman_dbus_property_append_basic(&iter, key, DBUS_TYPE_INT32, val);
+
+       result = dbus_connection_send(connection, signal, NULL);
+       if (result)
+               DBG("Successfuly sent signal");
+       else
+               DBG("Fail to send signal");
+
+       dbus_message_unref(signal);
+
+       return result;
+}
+#endif
+
 /**
  * __connman_network_connect:
  * @network: network structure
@@ -3259,6 +3296,9 @@ void connman_network_update(struct connman_network *network)
 int __connman_network_init(void)
 {
        DBG("");
+#if defined TIZEN_EXT
+       connection = connman_dbus_get_connection();
+#endif
 
        return 0;
 }
@@ -3266,4 +3306,7 @@ int __connman_network_init(void)
 void __connman_network_cleanup(void)
 {
        DBG("");
+#if defined TIZEN_EXT
+       dbus_connection_unref(connection);
+#endif
 }