summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaehyun Kim <jeik01.kim@samsung.com>2023-06-05 16:19:22 +0900
committerJaehyun Kim <jeik01.kim@samsung.com>2023-06-05 16:19:22 +0900
commit9d695f225b425635e7ba0570d06db0d571ff9e71 (patch)
treedcc3bed4155a0a88b47ba7f086030abaae270f3e
parente1fec4d56ea8acfdb3b74ae5ea9411c486df5047 (diff)
downloadconnman-9d695f225b425635e7ba0570d06db0d571ff9e71.tar.gz
connman-9d695f225b425635e7ba0570d06db0d571ff9e71.tar.bz2
connman-9d695f225b425635e7ba0570d06db0d571ff9e71.zip
Add a dbus method for DHCP status
Change-Id: Ibb590f234c4db807add7cd5edf7a83c081579618 Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
-rwxr-xr-xsrc/connman.h1
-rwxr-xr-xsrc/manager.c27
-rwxr-xr-xsrc/network.c30
3 files changed, 58 insertions, 0 deletions
diff --git a/src/connman.h b/src/connman.h
index 902dd3e5..db51e04e 100755
--- a/src/connman.h
+++ b/src/connman.h
@@ -685,6 +685,7 @@ 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
+char *__connman_network_get_dhcp_status(const char *ifname);
dbus_bool_t __connman_network_notify_dhcp_changed(const char *key, const char *val);
bool connman_network_get_psk_sha256(struct connman_network *network);
void connman_network_set_psk_sha256(struct connman_network *network, bool is_psk_sha256);
diff --git a/src/manager.c b/src/manager.c
index 0000f784..b3f9ff2e 100755
--- a/src/manager.c
+++ b/src/manager.c
@@ -266,6 +266,29 @@ static DBusMessage *get_connected_service(DBusConnection *conn,
return connman_service_create_dbus_service_reply(msg, service);
}
+
+static DBusMessage *get_dhcp_status(DBusConnection *conn, DBusMessage *msg, void *data)
+{
+ const char *ifname;
+ const char *dhcp_status;
+ DBusMessage *reply;
+ DBusMessageIter iter;
+
+ dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &ifname, DBUS_TYPE_INVALID);
+ dhcp_status = __connman_network_get_dhcp_status(ifname);
+
+ reply = dbus_message_new_method_return(msg);
+ if (!reply)
+ return NULL;
+
+ if (!dhcp_status)
+ dhcp_status = "Unknown";
+
+ dbus_message_iter_init_append(reply, &iter);
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &dhcp_status);
+
+ return reply;
+}
#endif
#if defined TIZEN_EXT_INS
@@ -751,6 +774,10 @@ static const GDBusMethodTable manager_methods[] = {
GDBUS_ARGS({ "ifname", "s" }),
GDBUS_ARGS({ "service", "oa{sv}" }),
get_connected_service) },
+ { GDBUS_METHOD("GetDhcpStatus",
+ GDBUS_ARGS({ "ifname", "s" }),
+ GDBUS_ARGS({ "status", "s" }),
+ get_dhcp_status) },
#endif
#if defined TIZEN_EXT_INS
{ GDBUS_METHOD("GetINS",
diff --git a/src/network.c b/src/network.c
index db0e72ea..580f8594 100755
--- a/src/network.c
+++ b/src/network.c
@@ -62,6 +62,8 @@ static DBusConnection *connection;
static unsigned char invalid_bssid[WIFI_BSSID_LEN_MAX] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
+
+static GHashTable *dhcp_status_list = NULL;
#endif
static GSList *network_list = NULL;
@@ -2108,6 +2110,28 @@ out:
}
#if defined TIZEN_EXT
+char *__connman_network_get_dhcp_status(const char *ifname)
+{
+ char *status = NULL;
+
+ if (!ifname)
+ return NULL;
+
+ status = g_hash_table_lookup(dhcp_status_list, ifname);
+ DBG("ifname: %s, DHCP status: %s", ifname, status);
+
+ return status;
+}
+
+static void __connman_network_update_dhcp_status(
+ const char *ifname, const char *status)
+{
+ if (!ifname || !status)
+ return;
+
+ g_hash_table_replace(dhcp_status_list, g_strdup(ifname), g_strdup(status));
+}
+
dbus_bool_t __connman_network_notify_dhcp_changed(const char *key, const char *val)
{
DBusMessage *signal;
@@ -2136,6 +2160,8 @@ dbus_bool_t __connman_network_notify_dhcp_changed(const char *key, const char *v
dbus_message_unref(signal);
+ __connman_network_update_dhcp_status(val, key);
+
return result;
}
#endif
@@ -3320,6 +3346,8 @@ int __connman_network_init(void)
DBG("");
#if defined TIZEN_EXT
connection = connman_dbus_get_connection();
+ dhcp_status_list = g_hash_table_new_full(g_str_hash,
+ g_str_equal, g_free, g_free);
#endif
return 0;
@@ -3330,5 +3358,7 @@ void __connman_network_cleanup(void)
DBG("");
#if defined TIZEN_EXT
dbus_connection_unref(connection);
+ if (dhcp_status_list)
+ g_hash_table_destroy(dhcp_status_list);
#endif
}