From 1b51089be8aa24e08ef87e895d9093ae62426004 Mon Sep 17 00:00:00 2001 From: Jaehyun Kim Date: Mon, 31 Oct 2022 20:07:34 +0900 Subject: [PATCH] DA: Add DHCP state notify function Change-Id: Ie4408b5db690133c74f05dcf3fb94b5dd8eee4df Signed-off-by: Jaehyun Kim --- src/connman.h | 3 +++ src/dhcp.c | 16 ++++++++++++++-- src/network.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/connman.h b/src/connman.h index 18c4fe0..437c494 100755 --- a/src/connman.h +++ b/src/connman.h @@ -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); diff --git a/src/dhcp.c b/src/dhcp.c index f15a214..ae60fcf 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -43,6 +43,10 @@ #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 /* diff --git a/src/network.c b/src/network.c index 8eb8c1e..ca73910 100755 --- a/src/network.c +++ b/src/network.c @@ -30,6 +30,12 @@ #include #include "src/shared/arp.h" +#if defined TIZEN_EXT +#include + +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 } -- 2.7.4