From: Daniel Wagner <[email protected]>
session_notify() will be called from the upcomming
new functions add_service_to_session() and remove_service_from_session().
Because the later function will be also called from
cleanup_session_final() we move those function before
cleanup_session_final() which then allows us to place the new function
between cleanup_session_final() and session_notify().
---
src/session.c | 390 +++++++++++++++++++++++++++++-----------------------------
1 file changed, 195 insertions(+), 195 deletions(-)
diff --git a/src/session.c b/src/session.c
index aca38ef..f57de7a 100644
--- a/src/session.c
+++ b/src/session.c
@@ -419,6 +419,201 @@ static void free_session(struct connman_session *session)
g_free(session);
}
+static void append_allowed_bearers(DBusMessageIter *iter, void *user_data)
+{
+ struct session_info *info = user_data;
+ GSList *list;
+
+ for (list = info->config.allowed_bearers;
+ list; list = list->next) {
+ enum connman_service_type bearer = GPOINTER_TO_INT(list->data);
+ const char *name = __connman_service_type2string(bearer);
+
+ if (!name)
+ name = "*";
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING,
+ &name);
+ }
+}
+
+static void append_ipconfig_ipv4(DBusMessageIter *iter, void *user_data)
+{
+ struct connman_service *service = user_data;
+ struct connman_ipconfig *ipconfig_ipv4;
+
+ if (!service)
+ return;
+
+ if (!__connman_service_is_connected_state(service,
+ CONNMAN_IPCONFIG_TYPE_IPV4))
+ return;
+
+ ipconfig_ipv4 = __connman_service_get_ip4config(service);
+ if (!ipconfig_ipv4)
+ return;
+
+ __connman_ipconfig_append_ipv4(ipconfig_ipv4, iter);
+}
+
+static void append_ipconfig_ipv6(DBusMessageIter *iter, void *user_data)
+{
+ struct connman_service *service = user_data;
+ struct connman_ipconfig *ipconfig_ipv4, *ipconfig_ipv6;
+
+ if (!service)
+ return;
+
+ if (!__connman_service_is_connected_state(service,
+ CONNMAN_IPCONFIG_TYPE_IPV6))
+ return;
+
+ ipconfig_ipv4 = __connman_service_get_ip4config(service);
+ ipconfig_ipv6 = __connman_service_get_ip6config(service);
+ if (!ipconfig_ipv6)
+ return;
+
+ __connman_ipconfig_append_ipv6(ipconfig_ipv6, iter, ipconfig_ipv4);
+}
+
+static void append_notify(DBusMessageIter *dict,
+ struct connman_session *session)
+{
+ struct session_info *info = session->info;
+ struct session_info *info_last = session->info_last;
+ struct connman_service *service;
+ enum connman_service_type type;
+ const char *name, *bearer;
+ char *ifname;
+ int idx;
+
+ if (session->append_all || info->state != info_last->state) {
+ const char *state = state2string(info->state);
+
+ connman_dbus_dict_append_basic(dict, "State",
+ DBUS_TYPE_STRING,
+ &state);
+ info_last->state = info->state;
+ }
+
+ if (session->append_all || session->service != session->service_last) {
+ if (session->service) {
+ service = session->service;
+ name = __connman_service_get_name(service);
+ idx = __connman_service_get_index(service);
+
+ ifname = connman_inet_ifname(idx);
+ if (!ifname)
+ ifname = g_strdup("");
+
+ type = connman_service_get_type(service);
+ bearer = service2bearer(type);
+ } else {
+ service = NULL;
+ name = "";
+ ifname = g_strdup("");
+ bearer = "";
+ }
+
+ connman_dbus_dict_append_basic(dict, "Name",
+ DBUS_TYPE_STRING,
+ &name);
+
+ connman_dbus_dict_append_dict(dict, "IPv4",
+ append_ipconfig_ipv4,
+ service);
+
+ connman_dbus_dict_append_dict(dict, "IPv6",
+ append_ipconfig_ipv6,
+ service);
+
+ connman_dbus_dict_append_basic(dict, "Interface",
+ DBUS_TYPE_STRING,
+ &ifname);
+
+ connman_dbus_dict_append_basic(dict, "Bearer",
+ DBUS_TYPE_STRING,
+ &bearer);
+
+ g_free(ifname);
+
+ session->service_last = session->service;
+ }
+
+ if (session->append_all ||
+ info->config.type != info_last->config.type) {
+ const char *type = type2string(info->config.type);
+
+ connman_dbus_dict_append_basic(dict, "ConnectionType",
+ DBUS_TYPE_STRING,
+ &type);
+ info_last->config.type = info->config.type;
+ }
+
+ if (session->append_all ||
+ info->config.allowed_bearers !=
info_last->config.allowed_bearers) {
+ connman_dbus_dict_append_array(dict, "AllowedBearers",
+ DBUS_TYPE_STRING,
+ append_allowed_bearers,
+ info);
+ info_last->config.allowed_bearers =
info->config.allowed_bearers;
+ }
+
+ session->append_all = false;
+}
+
+static bool compute_notifiable_changes(struct connman_session *session)
+{
+ struct session_info *info_last = session->info_last;
+ struct session_info *info = session->info;
+
+ if (session->append_all)
+ return true;
+
+ if (info->state != info_last->state)
+ return true;
+
+ if (session->service != session->service_last &&
+ info->state >= CONNMAN_SESSION_STATE_CONNECTED)
+ return true;
+
+ if (info->config.allowed_bearers != info_last->config.allowed_bearers ||
+ info->config.type != info_last->config.type)
+ return true;
+
+ return false;
+}
+
+static gboolean session_notify(gpointer user_data)
+{
+ struct connman_session *session = user_data;
+ DBusMessage *msg;
+ DBusMessageIter array, dict;
+
+ if (!compute_notifiable_changes(session))
+ return FALSE;
+
+ DBG("session %p owner %s notify_path %s", session,
+ session->owner, session->notify_path);
+
+ msg = dbus_message_new_method_call(session->owner, session->notify_path,
+ CONNMAN_NOTIFICATION_INTERFACE,
+ "Update");
+ if (!msg)
+ return FALSE;
+
+ dbus_message_iter_init_append(msg, &array);
+ connman_dbus_dict_open(&array, &dict);
+
+ append_notify(&dict, session);
+
+ connman_dbus_dict_close(&array, &dict);
+
+ g_dbus_send_message(connection, msg);
+
+ return FALSE;
+}
+
static void cleanup_session_final(struct connman_session *session)
{
struct session_info *info = session->info;
@@ -723,201 +918,6 @@ const char *connman_session_get_owner(struct
connman_session *session)
return session->owner;
}
-static void append_allowed_bearers(DBusMessageIter *iter, void *user_data)
-{
- struct session_info *info = user_data;
- GSList *list;
-
- for (list = info->config.allowed_bearers;
- list; list = list->next) {
- enum connman_service_type bearer = GPOINTER_TO_INT(list->data);
- const char *name = __connman_service_type2string(bearer);
-
- if (!name)
- name = "*";
-
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING,
- &name);
- }
-}
-
-static void append_ipconfig_ipv4(DBusMessageIter *iter, void *user_data)
-{
- struct connman_service *service = user_data;
- struct connman_ipconfig *ipconfig_ipv4;
-
- if (!service)
- return;
-
- if (!__connman_service_is_connected_state(service,
- CONNMAN_IPCONFIG_TYPE_IPV4))
- return;
-
- ipconfig_ipv4 = __connman_service_get_ip4config(service);
- if (!ipconfig_ipv4)
- return;
-
- __connman_ipconfig_append_ipv4(ipconfig_ipv4, iter);
-}
-
-static void append_ipconfig_ipv6(DBusMessageIter *iter, void *user_data)
-{
- struct connman_service *service = user_data;
- struct connman_ipconfig *ipconfig_ipv4, *ipconfig_ipv6;
-
- if (!service)
- return;
-
- if (!__connman_service_is_connected_state(service,
- CONNMAN_IPCONFIG_TYPE_IPV6))
- return;
-
- ipconfig_ipv4 = __connman_service_get_ip4config(service);
- ipconfig_ipv6 = __connman_service_get_ip6config(service);
- if (!ipconfig_ipv6)
- return;
-
- __connman_ipconfig_append_ipv6(ipconfig_ipv6, iter, ipconfig_ipv4);
-}
-
-static void append_notify(DBusMessageIter *dict,
- struct connman_session *session)
-{
- struct session_info *info = session->info;
- struct session_info *info_last = session->info_last;
- struct connman_service *service;
- enum connman_service_type type;
- const char *name, *bearer;
- char *ifname;
- int idx;
-
- if (session->append_all || info->state != info_last->state) {
- const char *state = state2string(info->state);
-
- connman_dbus_dict_append_basic(dict, "State",
- DBUS_TYPE_STRING,
- &state);
- info_last->state = info->state;
- }
-
- if (session->append_all || session->service != session->service_last) {
- if (session->service) {
- service = session->service;
- name = __connman_service_get_name(service);
- idx = __connman_service_get_index(service);
-
- ifname = connman_inet_ifname(idx);
- if (!ifname)
- ifname = g_strdup("");
-
- type = connman_service_get_type(service);
- bearer = service2bearer(type);
- } else {
- service = NULL;
- name = "";
- ifname = g_strdup("");
- bearer = "";
- }
-
- connman_dbus_dict_append_basic(dict, "Name",
- DBUS_TYPE_STRING,
- &name);
-
- connman_dbus_dict_append_dict(dict, "IPv4",
- append_ipconfig_ipv4,
- service);
-
- connman_dbus_dict_append_dict(dict, "IPv6",
- append_ipconfig_ipv6,
- service);
-
- connman_dbus_dict_append_basic(dict, "Interface",
- DBUS_TYPE_STRING,
- &ifname);
-
- connman_dbus_dict_append_basic(dict, "Bearer",
- DBUS_TYPE_STRING,
- &bearer);
-
- g_free(ifname);
-
- session->service_last = session->service;
- }
-
- if (session->append_all ||
- info->config.type != info_last->config.type) {
- const char *type = type2string(info->config.type);
-
- connman_dbus_dict_append_basic(dict, "ConnectionType",
- DBUS_TYPE_STRING,
- &type);
- info_last->config.type = info->config.type;
- }
-
- if (session->append_all ||
- info->config.allowed_bearers !=
info_last->config.allowed_bearers) {
- connman_dbus_dict_append_array(dict, "AllowedBearers",
- DBUS_TYPE_STRING,
- append_allowed_bearers,
- info);
- info_last->config.allowed_bearers =
info->config.allowed_bearers;
- }
-
- session->append_all = false;
-}
-
-static bool compute_notifiable_changes(struct connman_session *session)
-{
- struct session_info *info_last = session->info_last;
- struct session_info *info = session->info;
-
- if (session->append_all)
- return true;
-
- if (info->state != info_last->state)
- return true;
-
- if (session->service != session->service_last &&
- info->state >= CONNMAN_SESSION_STATE_CONNECTED)
- return true;
-
- if (info->config.allowed_bearers != info_last->config.allowed_bearers ||
- info->config.type != info_last->config.type)
- return true;
-
- return false;
-}
-
-static gboolean session_notify(gpointer user_data)
-{
- struct connman_session *session = user_data;
- DBusMessage *msg;
- DBusMessageIter array, dict;
-
- if (!compute_notifiable_changes(session))
- return FALSE;
-
- DBG("session %p owner %s notify_path %s", session,
- session->owner, session->notify_path);
-
- msg = dbus_message_new_method_call(session->owner, session->notify_path,
- CONNMAN_NOTIFICATION_INTERFACE,
- "Update");
- if (!msg)
- return FALSE;
-
- dbus_message_iter_init_append(msg, &array);
- connman_dbus_dict_open(&array, &dict);
-
- append_notify(&dict, session);
-
- connman_dbus_dict_close(&array, &dict);
-
- g_dbus_send_message(connection, msg);
-
- return FALSE;
-}
-
static void ipconfig_ipv4_changed(struct connman_session *session)
{
connman_dbus_setting_changed_dict(session->owner, session->notify_path,
--
1.8.4.474.g128a96c
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman