Send connman mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        https://lists.01.org/mailman/listinfo/connman
or, via email, send a message with subject or body 'help' to
        [email protected]

You can reach the person managing the list at
        [email protected]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of connman digest..."


Today's Topics:

   1. [PATCH 1/5] Session: add parameter Service into CreateSession
      call of ConnMan Session API,  ([email protected])
   2. [PATCH 2/5] session: Callback hook for policy plugins to
      update session state. ([email protected])
   3. [PATCH 3/5] service: Query function to retrieve service
      handle ([email protected])
   4. [PATCH 4/5] Session: Callback hook for policy plugin to
      return service of session. ([email protected])
   5. [PATCH 5/5] Session: Interface to query session->mark value
      ([email protected])


----------------------------------------------------------------------

Message: 1
Date: Thu,  6 Apr 2017 18:22:22 +0530
From: [email protected]
To: [email protected]
Cc: [email protected], thb1hi
        <[email protected]>
Subject: [PATCH 1/5] Session: add parameter Service into CreateSession
        call of ConnMan Session API, 
Message-ID:
        <[email protected]>

From: thb1hi <[email protected]>

propagation of parameter value through creation_data struct into policy plugins.

Signed-off-by: thb1hi <[email protected]>
Signed-off-by: Mounesh Sutar <[email protected]>

diff --git a/src/session.c b/src/session.c
index dadd68f..a64df64 100644
--- a/src/session.c
+++ b/src/session.c
@@ -545,6 +545,7 @@ struct creation_data {
        GSList *allowed_bearers;
        char *allowed_interface;
        bool source_ip_rule;
+       char *service;
 };
 
 static void cleanup_creation_data(struct creation_data *creation_data)
@@ -554,6 +555,8 @@ static void cleanup_creation_data(struct creation_data 
*creation_data)
 
        if (creation_data->pending)
                dbus_message_unref(creation_data->pending);
+       if (creation_data->service)
+               g_free(creation_data->service);
 
        g_slist_free(creation_data->allowed_bearers);
        g_free(creation_data->allowed_interface);
@@ -1471,6 +1474,9 @@ int __connman_session_create(DBusMessage *msg)
                                        
connman_session_parse_connection_type(val);
 
                                user_connection_type = true;
+                       } else if (g_str_equal(key, "Service")) {
+                               dbus_message_iter_get_basic(&value, &val);
+                               creation_data->service = g_strdup(val);
                        } else if (g_str_equal(key, "AllowedInterface")) {
                                dbus_message_iter_get_basic(&value, &val);
                                creation_data->allowed_interface = 
g_strdup(val);
-- 
2.7.4



------------------------------

Message: 2
Date: Thu,  6 Apr 2017 18:23:05 +0530
From: [email protected]
To: [email protected]
Cc: [email protected], thb1hi
        <[email protected]>
Subject: [PATCH 2/5] session: Callback hook for policy plugins to
        update session state.
Message-ID:
        <[email protected]>

From: thb1hi <[email protected]>

Called when state of session changes.

Signed-off-by: thb1hi <[email protected]>
Signed-off-by: Mounesh Sutar <[email protected]>

diff --git a/include/session.h b/include/session.h
index 48f1510..25a5e58 100644
--- a/include/session.h
+++ b/include/session.h
@@ -55,6 +55,12 @@ enum connman_session_id_type {
        CONNMAN_SESSION_ID_TYPE_LSM     = 3,
 };
 
+enum connman_session_state {
+       CONNMAN_SESSION_STATE_DISCONNECTED   = 0,
+       CONNMAN_SESSION_STATE_CONNECTED      = 1,
+       CONNMAN_SESSION_STATE_ONLINE         = 2,
+};
+
 struct connman_session;
 
 struct connman_session_config {
@@ -85,6 +91,8 @@ struct connman_session_policy {
                                GSList *bearers);
        bool (*allowed)(struct connman_session *session,
                        struct connman_service *service);
+       void (*update_session_state)(struct connman_session* session,
+                                    enum connman_session_state state);
 };
 
 int connman_session_policy_register(struct connman_session_policy *config);
diff --git a/src/session.c b/src/session.c
index a64df64..776e0d7 100644
--- a/src/session.c
+++ b/src/session.c
@@ -38,11 +38,6 @@ static GHashTable *service_hash;
 static struct connman_session *ecall_session;
 static uint32_t session_mark = 256;
 
-enum connman_session_state {
-       CONNMAN_SESSION_STATE_DISCONNECTED   = 0,
-       CONNMAN_SESSION_STATE_CONNECTED      = 1,
-       CONNMAN_SESSION_STATE_ONLINE         = 2,
-};
 
 struct session_info {
        struct connman_session_config config;
@@ -1686,6 +1681,10 @@ static void update_session_state(struct connman_session 
*session)
        update_firewall(session);
        update_routing_table(session);
        update_nat_rules(session);
+
+       if (policy && policy->update_session_state)
+         policy->update_session_state(session, state);
+
        session_notify(session);
 }
 
diff --git a/tools/session-test.h b/tools/session-test.h
index 5e6d196..da85e10 100644
--- a/tools/session-test.h
+++ b/tools/session-test.h
@@ -68,11 +68,6 @@ void util_session_cleanup(struct test_session *session);
 
 typedef void (* notify_func_t) (struct test_session *session);
 
-enum connman_session_state {
-       CONNMAN_SESSION_STATE_DISCONNECTED   = 0,
-       CONNMAN_SESSION_STATE_CONNECTED      = 1,
-       CONNMAN_SESSION_STATE_ONLINE         = 2,
-};
 
 struct test_session_info {
        enum connman_session_state state;
-- 
2.7.4



------------------------------

Message: 3
Date: Thu,  6 Apr 2017 18:23:20 +0530
From: [email protected]
To: [email protected]
Cc: [email protected], thb1hi
        <[email protected]>
Subject: [PATCH 3/5] service: Query function to retrieve service
        handle
Message-ID:
        <[email protected]>

From: thb1hi <[email protected]>

Query function to retrieve service handle for service identifier string

Signed-off-by: thb1hi <[email protected]>
Signed-off-by: Mounesh Sutar <[email protected]>

diff --git a/include/service.h b/include/service.h
index 185f008..958e7fd 100644
--- a/include/service.h
+++ b/include/service.h
@@ -130,6 +130,7 @@ bool connman_service_get_favorite(struct connman_service 
*service);
 bool connman_service_get_autoconnect(struct connman_service *service);
 
 struct connman_service *connman_service_lookup_from_network(struct 
connman_network *network);
+struct connman_service *connman_service_lookup_from_identifier(const char* 
identifier);
 
 void connman_service_create_ip4config(struct connman_service *service,
                                                                int index);
diff --git a/src/service.c b/src/service.c
index 2289d54..9943e96 100644
--- a/src/service.c
+++ b/src/service.c
@@ -6404,6 +6404,13 @@ static struct connman_service 
*lookup_by_identifier(const char *identifier)
        return g_hash_table_lookup(service_hash, identifier);
 }
 
+
+struct connman_service *connman_service_lookup_from_identifier(const char* 
identifier)
+{
+       return lookup_by_identifier(identifier);
+}
+
+
 struct provision_user_data {
        const char *ident;
        int ret;
-- 
2.7.4



------------------------------

Message: 4
Date: Thu,  6 Apr 2017 18:23:33 +0530
From: [email protected]
To: [email protected]
Cc: [email protected], thb1hi
        <[email protected]>
Subject: [PATCH 4/5] Session: Callback hook for policy plugin to
        return service of session.
Message-ID:
        <[email protected]>

From: thb1hi <[email protected]>

Returns the allowed service for a session based on a provided list of available 
services.

Signed-off-by: thb1hi <[email protected]>
Signed-off-by: Mounesh Sutar <[email protected]>

diff --git a/include/session.h b/include/session.h
index 25a5e58..0d66f48 100644
--- a/include/session.h
+++ b/include/session.h
@@ -93,6 +93,8 @@ struct connman_session_policy {
                        struct connman_service *service);
        void (*update_session_state)(struct connman_session* session,
                                     enum connman_session_state state);
+       struct connman_service* (*get_service_for_session)(struct 
connman_session* session,
+                                                          GSList* services);
 };
 
 int connman_session_policy_register(struct connman_session_policy *config);
diff --git a/src/session.c b/src/session.c
index 776e0d7..602f4cc 100644
--- a/src/session.c
+++ b/src/session.c
@@ -1753,6 +1753,42 @@ static void session_activate(struct connman_session 
*session)
        if (!service_hash)
                return;
 
+       if (policy && policy->get_service_for_session)
+       {
+               struct connman_service *service;
+               struct connman_service_info *info;
+               GSList *service_list = NULL;
+               GHashTableIter iter;
+               gpointer key, value;
+               enum connman_service_state state = 
CONNMAN_SESSION_STATE_DISCONNECTED;
+
+               g_hash_table_iter_init(&iter, service_hash);
+
+               while (g_hash_table_iter_next(&iter, &key, &value)) {
+                       struct connman_service_info *info = value;
+                       struct connman_service *service_lookup;
+                       state = __connman_service_get_state(info->service);
+                       if (is_session_connected(session, state)) {
+                               service_list = g_slist_prepend(service_list,
+                                                              info->service);
+                       }
+               }
+               service_list = g_slist_reverse(service_list);
+               service = policy->get_service_for_session(session,service_list);
+               if (service) {
+                       info = g_hash_table_lookup(service_hash,service);
+                       DBG("session %p add service %p", session, 
info->service);
+
+                       info->sessions = g_slist_prepend(info->sessions,
+                                                       session);
+                       session->service = info->service;
+                       update_session_state(session);
+               }
+
+               g_slist_free(service_list);
+               return;
+       }
+
        g_hash_table_iter_init(&iter, service_hash);
        while (g_hash_table_iter_next(&iter, &key, &value)) {
                struct connman_service_info *info = value;
-- 
2.7.4



------------------------------

Message: 5
Date: Thu,  6 Apr 2017 18:23:45 +0530
From: [email protected]
To: [email protected]
Cc: [email protected], thb1hi
        <[email protected]>
Subject: [PATCH 5/5] Session: Interface to query session->mark value
Message-ID:
        <[email protected]>

From: thb1hi <[email protected]>

Signed-off-by: thb1hi <[email protected]>
Signed-off-by: Mounesh Sutar <[email protected]>

diff --git a/include/session.h b/include/session.h
index 0d66f48..4e15ed4 100644
--- a/include/session.h
+++ b/include/session.h
@@ -23,6 +23,7 @@
 #define __CONNMAN_SESSION_H
 
 #include <connman/service.h>
+#include <stdint.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -97,6 +98,7 @@ struct connman_session_policy {
                                                           GSList* services);
 };
 
+uint32_t connman_session_firewall_get_fwmark(struct connman_session *session);
 int connman_session_policy_register(struct connman_session_policy *config);
 void connman_session_policy_unregister(struct connman_session_policy *config);
 
diff --git a/src/session.c b/src/session.c
index 602f4cc..9082447 100644
--- a/src/session.c
+++ b/src/session.c
@@ -427,6 +427,12 @@ static void add_nat_rules(struct connman_session *session)
        g_free(ifname);
 }
 
+uint32_t connman_session_firewall_get_fwmark(struct connman_session *session)
+{
+  return session->mark;
+}
+
+
 static void cleanup_routing_table(struct connman_session *session)
 {
        DBG("");
-- 
2.7.4



------------------------------

Subject: Digest Footer

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


------------------------------

End of connman Digest, Vol 18, Issue 5
**************************************

Reply via email to