int online_check_count;
connman_bool_t do_split_routing;
connman_bool_t new_service;
+ connman_bool_t hidden_service;
};
struct find_data {
service->pac = str;
}
+ service->hidden_service = g_key_file_get_boolean(keyfile,
+ service->identifier, "Hidden", NULL);
+
done:
g_key_file_free(keyfile);
g_key_file_remove_key(keyfile, service->identifier,
"Proxy.URL", NULL);
+ if (service->hidden_service == TRUE)
+ g_key_file_set_boolean(keyfile, service->identifier, "Hidden",
+ TRUE);
+
done:
__connman_storage_save_service(keyfile, service->identifier);
}
}
-static void append_domain(DBusMessageIter *iter, void *user_data)
+static void append_domainconfig(DBusMessageIter *iter, void *user_data)
{
struct connman_service *service = user_data;
+ int i;
- if (is_connected(service) == FALSE &&
- is_connecting(service) == FALSE)
- return;
-
- if (service->domainname == NULL)
+ if (service->domains == NULL)
return;
- dbus_message_iter_append_basic(iter,
- DBUS_TYPE_STRING, &service->domainname);
+ for (i = 0; service->domains[i]; i++)
+ dbus_message_iter_append_basic(iter,
+ DBUS_TYPE_STRING, &service->domains[i]);
}
-static void append_domainconfig(DBusMessageIter *iter, void *user_data)
+static void append_domain(DBusMessageIter *iter, void *user_data)
{
struct connman_service *service = user_data;
- int i;
- if (service->domains == NULL)
+ if (is_connected(service) == FALSE &&
+ is_connecting(service) == FALSE)
return;
- for (i = 0; service->domains[i]; i++)
+ if (service->domains != NULL)
+ append_domainconfig(iter, user_data);
+ else if (service->domainname != NULL)
dbus_message_iter_append_basic(iter,
- DBUS_TYPE_STRING, &service->domains[i]);
+ DBUS_TYPE_STRING, &service->domainname);
}
static void append_proxies(DBusMessageIter *iter, void *user_data)
return -1;
}
+void __connman_service_set_hidden(struct connman_service *service)
+{
+ if (service == NULL || service->hidden == TRUE)
+ return;
+
+ service->hidden_service = TRUE;
+}
+
void __connman_service_set_domainname(struct connman_service *service,
const char *domainname)
{
while (dbus_message_iter_get_arg_type(&entry) == DBUS_TYPE_STRING) {
const char *val;
+ GSList *new_head;
+
dbus_message_iter_get_basic(&entry, &val);
- list = g_slist_prepend(list, strdup(val));
- count++;
+ new_head = __connman_timeserver_add_list(list, val);
+ if (list != new_head) {
+ count++;
+ list = new_head;
+ }
dbus_message_iter_next(&entry);
}
service_schedule_changed();
}
-static GDBusMethodTable service_methods[] = {
- { "GetProperties", "", "a{sv}", get_properties },
- { "SetProperty", "sv", "", set_property },
- { "ClearProperty", "s", "", clear_property },
- { "Connect", "", "", connect_service,
- G_DBUS_METHOD_FLAG_ASYNC },
- { "Disconnect", "", "", disconnect_service },
- { "Remove", "", "", remove_service },
- { "MoveBefore", "o", "", move_before },
- { "MoveAfter", "o", "", move_after },
- { "ResetCounters", "", "", reset_counters },
+static const GDBusMethodTable service_methods[] = {
+ { GDBUS_DEPRECATED_METHOD("GetProperties",
+ NULL, GDBUS_ARGS({ "properties", "a{sv}" }),
+ get_properties) },
+ { GDBUS_METHOD("SetProperty",
+ GDBUS_ARGS({ "name", "s" }, { "value", "v" }),
+ NULL, set_property) },
+ { GDBUS_METHOD("ClearProperty",
+ GDBUS_ARGS({ "name", "s" }), NULL,
+ clear_property) },
+ { GDBUS_ASYNC_METHOD("Connect", NULL, NULL,
+ connect_service) },
+ { GDBUS_METHOD("Disconnect", NULL, NULL,
+ disconnect_service) },
+ { GDBUS_METHOD("Remove", NULL, NULL, remove_service) },
+ { GDBUS_METHOD("MoveBefore",
+ GDBUS_ARGS({ "service", "o" }), NULL,
+ move_before) },
+ { GDBUS_METHOD("MoveAfter",
+ GDBUS_ARGS({ "service", "o" }), NULL,
+ move_after) },
+ { GDBUS_METHOD("ResetCounters", NULL, NULL, reset_counters) },
{ },
};
-static GDBusSignalTable service_signals[] = {
- { "PropertyChanged", "sv" },
+static const GDBusSignalTable service_signals[] = {
+ { GDBUS_SIGNAL("PropertyChanged",
+ GDBUS_ARGS({ "name", "s" }, { "value", "v" })) },
{ },
};
}
}
+void __connman_service_set_userconnect(struct connman_service *service,
+ connman_bool_t userconnect)
+{
+ if (service != NULL)
+ service->userconnect = userconnect;
+}
+
static void service_complete(struct connman_service *service)
{
reply_pending(service, EIO);
if (retry == TRUE)
__connman_service_connect(service);
else {
+ /* It is not relevant to stay on Failure state
+ * when failing is due to wrong user input */
+ service->state = CONNMAN_SERVICE_STATE_IDLE;
+
service_complete(service);
__connman_connection_update_gateway();
- __connman_device_request_scan(CONNMAN_DEVICE_TYPE_UNKNOWN);
}
}
const char *name, int name_len,
const char *identity, const char *passphrase,
gboolean wps, const char *wpspin,
- void *user_data)
+ const char *error, void *user_data)
{
struct connman_device *device;
int err = 0;
DBG ("RequestInput return, %p", service);
+ if (error != NULL) {
+ DBG("error: %s", error);
+
+ if (g_strcmp0(error,
+ "net.connman.Agent.Error.Canceled") == 0) {
+ err = -EINVAL;
+ goto done;
+ }
+ }
+
if (service->hidden == TRUE && name_len > 0 && name_len <= 32) {
device = connman_network_get_device(service->network);
__connman_device_request_hidden_scan(device,
}
if (values_received == FALSE || service->hidden == TRUE) {
- service_complete(service);
- __connman_connection_update_gateway();
- __connman_device_request_scan(CONNMAN_DEVICE_TYPE_UNKNOWN);
- return;
+ err = -EINVAL;
+ goto done;
}
if (wps == TRUE && service->network != NULL) {
__connman_agent_report_error(service,
error2string(service->error),
report_error_cb, NULL);
+ } else {
+ /* It is not relevant to stay on Failure state
+ * when failing is due to wrong user input */
+ service->state = CONNMAN_SERVICE_STATE_IDLE;
+
+ service_complete(service);
+ __connman_connection_update_gateway();
}
}
reconnect = get_reconnect_state(service);
if (reconnect == TRUE)
__connman_service_auto_connect();
-
- __connman_device_request_scan(CONNMAN_DEVICE_TYPE_UNKNOWN);
}
if (new_state == CONNMAN_SERVICE_STATE_READY) {
if (service->userconnect == TRUE &&
__connman_agent_report_error(service,
error2string(service->error),
- report_error_cb, NULL) == -EIO)
+ report_error_cb, NULL) == -EINPROGRESS)
return 0;
service_complete(service);
-
- __connman_device_request_scan(CONNMAN_DEVICE_TYPE_UNKNOWN);
} else
service->error = CONNMAN_SERVICE_ERROR_UNKNOWN;
return -EINPROGRESS;
}
- __connman_service_ipconfig_indicate_state(service,
- CONNMAN_SERVICE_STATE_FAILURE,
- CONNMAN_IPCONFIG_TYPE_IPV4);
- __connman_service_ipconfig_indicate_state(service,
- CONNMAN_SERVICE_STATE_FAILURE,
- CONNMAN_IPCONFIG_TYPE_IPV6);
-
if (service->network != NULL)
__connman_network_disconnect(service->network);
else if (service->type == CONNMAN_SERVICE_TYPE_VPN &&
if (service->userconnect == TRUE) {
if (err == -ENOKEY || err == -EPERM) {
- if (__connman_agent_request_passphrase_input(service,
- request_input_cb,
- NULL) == -EIO)
- return -EINPROGRESS;
+ return __connman_agent_request_passphrase_input(service,
+ request_input_cb, NULL);
}
reply_pending(service, -err);
}
if (service->favorite == TRUE) {
device = connman_network_get_device(service->network);
- if (device && __connman_device_scanning(device) == FALSE)
+ if (device && connman_device_get_scanning(device) == FALSE)
__connman_service_auto_connect();
}