Add service property and signals for LoginRequired
authorMarcel Holtmann <marcel@holtmann.org>
Thu, 15 Jul 2010 19:25:25 +0000 (12:25 -0700)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 15 Jul 2010 19:25:25 +0000 (12:25 -0700)
doc/service-api.txt
include/service.h
src/connman.h
src/location.c
src/service.c
test/list-services

index a3e3c10..9bf0907 100644 (file)
@@ -186,6 +186,12 @@ Properties string State [readonly]
                        This property might be only present for WiFi
                        services.
 
+               boolean LoginRequired [readonly]
+
+                       This property indicates that an additional login
+                       step is needed before the connection establishment
+                       can proceed.
+
                string Passphrase [readwrite]
 
                        If the service type is WiFi, then this property
@@ -280,8 +286,8 @@ Properties  string State [readonly]
                array{string} Nameservers [readonly]
 
                        The list of currently active nameservers for this
-                       service. If the server is not in READY, LOGIN or
-                       ONLINE state than this list will be empty.
+                       service. If the server is not in READY or ONLINE
+                       state than this list will be empty.
 
                        Global nameservers are automatically added to this
                        list. The array represents a sorted list of the
index 8abca13..170cd6c 100644 (file)
@@ -71,10 +71,9 @@ enum connman_service_state {
        CONNMAN_SERVICE_STATE_ASSOCIATION   = 2,
        CONNMAN_SERVICE_STATE_CONFIGURATION = 3,
        CONNMAN_SERVICE_STATE_READY         = 4,
-       CONNMAN_SERVICE_STATE_LOGIN         = 5,
-       CONNMAN_SERVICE_STATE_ONLINE        = 6,
-       CONNMAN_SERVICE_STATE_DISCONNECT    = 7,
-       CONNMAN_SERVICE_STATE_FAILURE       = 8,
+       CONNMAN_SERVICE_STATE_ONLINE        = 5,
+       CONNMAN_SERVICE_STATE_DISCONNECT    = 6,
+       CONNMAN_SERVICE_STATE_FAILURE       = 7,
 };
 
 enum connman_service_error {
index 6b9a34a..5f23172 100644 (file)
@@ -443,6 +443,7 @@ int __connman_service_indicate_state(struct connman_service *service,
 int __connman_service_indicate_error(struct connman_service *service,
                                        enum connman_service_error error);
 int __connman_service_indicate_default(struct connman_service *service);
+int __connman_service_request_login(struct connman_service *service);
 
 int __connman_service_lookup(const char *pattern, const char **path);
 int __connman_service_connect(struct connman_service *service);
index 2331d98..aee2ea1 100644 (file)
@@ -182,8 +182,7 @@ void connman_location_report_result(struct connman_location *location,
        case CONNMAN_LOCATION_RESULT_UNKNOWN:
                return;
        case CONNMAN_LOCATION_RESULT_PORTAL:
-               __connman_service_indicate_state(location->service,
-                                               CONNMAN_SERVICE_STATE_LOGIN);
+               __connman_service_request_login(location->service);
                break;
        case CONNMAN_LOCATION_RESULT_ONLINE:
                __connman_service_indicate_state(location->service,
index bf2400a..dceba3d 100644 (file)
@@ -87,6 +87,7 @@ struct connman_service {
        char *mcc;
        char *mnc;
        connman_bool_t roaming;
+       connman_bool_t login_required;
        struct connman_ipconfig *ipconfig;
        struct connman_network *network;
        char **nameservers;
@@ -232,8 +233,6 @@ static const char *state2string(enum connman_service_state state)
                return "configuration";
        case CONNMAN_SERVICE_STATE_READY:
                return "ready";
-       case CONNMAN_SERVICE_STATE_LOGIN:
-               return "login";
        case CONNMAN_SERVICE_STATE_ONLINE:
                return "online";
        case CONNMAN_SERVICE_STATE_DISCONNECT:
@@ -281,7 +280,6 @@ static connman_bool_t is_connecting(struct connman_service *service)
        case CONNMAN_SERVICE_STATE_FAILURE:
        case CONNMAN_SERVICE_STATE_DISCONNECT:
        case CONNMAN_SERVICE_STATE_READY:
-       case CONNMAN_SERVICE_STATE_LOGIN:
        case CONNMAN_SERVICE_STATE_ONLINE:
                break;
        case CONNMAN_SERVICE_STATE_ASSOCIATION:
@@ -303,7 +301,6 @@ static connman_bool_t is_connected(const struct connman_service *service)
        case CONNMAN_SERVICE_STATE_FAILURE:
                break;
        case CONNMAN_SERVICE_STATE_READY:
-       case CONNMAN_SERVICE_STATE_LOGIN:
        case CONNMAN_SERVICE_STATE_ONLINE:
                return TRUE;
        }
@@ -329,7 +326,6 @@ static void update_nameservers(struct connman_service *service)
                connman_resolver_remove_all(ifname);
                return;
        case CONNMAN_SERVICE_STATE_READY:
-       case CONNMAN_SERVICE_STATE_LOGIN:
        case CONNMAN_SERVICE_STATE_ONLINE:
                break;
        }
@@ -727,6 +723,18 @@ static void passphrase_changed(struct connman_service *service)
                                                DBUS_TYPE_BOOLEAN, &required);
 }
 
+static void login_changed(struct connman_service *service)
+{
+       dbus_bool_t required = service->login_required;
+
+       if (service->path == NULL)
+               return;
+
+       connman_dbus_property_changed_basic(service->path,
+                               CONNMAN_SERVICE_INTERFACE, "LoginRequired",
+                                               DBUS_TYPE_BOOLEAN, &required);
+}
+
 static void apn_changed(struct connman_service *service)
 {
        dbus_bool_t required;
@@ -948,6 +956,9 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                connman_dbus_dict_append_basic(dict, "Name",
                                        DBUS_TYPE_STRING, &service->name);
 
+       connman_dbus_dict_append_basic(dict, "LoginRequired",
+                               DBUS_TYPE_BOOLEAN, &service->login_required);
+
        switch (service->type) {
        case CONNMAN_SERVICE_TYPE_UNKNOWN:
        case CONNMAN_SERVICE_TYPE_SYSTEM:
@@ -2179,8 +2190,14 @@ int __connman_service_indicate_state(struct connman_service *service,
        service->state = state;
        state_changed(service);
 
-       if (state == CONNMAN_SERVICE_STATE_ONLINE)
+       if (state == CONNMAN_SERVICE_STATE_ONLINE) {
+               if (service->login_required == TRUE) {
+                       service->login_required = FALSE;
+                       login_changed(service);
+               }
+
                connman_timeserver_sync();
+       }
 
        if (state == CONNMAN_SERVICE_STATE_IDLE) {
                connman_bool_t reconnect;
@@ -2268,6 +2285,19 @@ int __connman_service_indicate_default(struct connman_service *service)
        return 0;
 }
 
+int __connman_service_request_login(struct connman_service *service)
+{
+       DBG("service %p", service);
+
+       if (service == NULL)
+               return -EINVAL;
+
+       service->login_required = TRUE;
+       login_changed(service);
+
+       return 0;
+}
+
 static connman_bool_t prepare_network(struct connman_service *service)
 {
        enum connman_network_type type;
index abe8420..952211d 100755 (executable)
@@ -39,7 +39,8 @@ for path in properties["Services"]:
                                        "Domains", "Domains.Configuration"]:
                        val = extract_list(properties[key])
                elif key in ["Favorite", "Immutable", "AutoConnect",
-                               "SetupRequired", "PassphraseRequired"]:
+                                       "LoginRequired", "SetupRequired",
+                                                       "PassphraseRequired"]:
                        if properties[key] == dbus.Boolean(1):
                                val = "true"
                        else:
@@ -47,7 +48,7 @@ for path in properties["Services"]:
                elif key in ["Strength"]:
                        val = int(properties[key])
                else:
-                       val = str(properties[key])
+                       val = properties[key]
                print "    %s = %s" % (key, val)
 
        print