enum connman_service_state state;
connman_uint8_t strength;
connman_bool_t favorite;
+ GTimeVal modified;
unsigned int order;
char *name;
char *passphrase;
g_sequence_foreach(service_list, append_path, iter);
}
+struct find_data {
+ const char *path;
+ struct connman_service *service;
+};
+
+static void compare_path(gpointer value, gpointer user_data)
+{
+ struct connman_service *service = value;
+ struct find_data *data = user_data;
+
+ if (data->service != NULL)
+ return;
+
+ if (g_strcmp0(service->path, data->path) == 0)
+ data->service = service;
+}
+
+static struct connman_service *find_service(const char *path)
+{
+ struct find_data data = { .path = path, .service = NULL };
+
+ DBG("path %s", path);
+
+ g_sequence_foreach(service_list, compare_path, &data);
+
+ return data.service;
+}
+
static const char *type2string(enum connman_service_type type)
{
switch (type) {
service->timeout = 0;
+ if (service->network != NULL)
+ __connman_network_disconnect(service->network);
+
if (service->pending != NULL) {
DBusMessage *reply;
if (service->type == CONNMAN_SERVICE_TYPE_ETHERNET)
return __connman_error_not_supported(msg);
- if (service->network != NULL) {
- int err;
+ if (service->favorite == FALSE)
+ return __connman_error_not_supported(msg);
- err = __connman_network_disconnect(service->network);
- if (err < 0 && err != -EINPROGRESS)
- return __connman_error_failed(msg, -err);
- }
+ if (service->network != NULL)
+ __connman_network_disconnect(service->network);
connman_service_set_favorite(service, FALSE);
__connman_storage_save_service(service);
DBusMessage *msg, void *user_data)
{
struct connman_service *service = user_data;
+ struct connman_service *target;
+ const char *path;
+ GSequenceIter *src, *dst;
DBG("service %p", service);
+ dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_INVALID);
+
if (service->favorite == FALSE)
return __connman_error_not_supported(msg);
+ target = find_service(path);
+ if (target == NULL || target->favorite == FALSE || target == service)
+ return __connman_error_invalid_service(msg);
+
+ DBG("target %s", target->identifier);
+
+ g_get_current_time(&service->modified);
+ __connman_storage_save_service(service);
+
+ src = g_hash_table_lookup(service_hash, service->identifier);
+ dst = g_hash_table_lookup(service_hash, target->identifier);
+
+#if 0
+ g_sequence_move(src, dst);
+
+ __connman_profile_changed();
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+#endif
return __connman_error_not_implemented(msg);
}
DBusMessage *msg, void *user_data)
{
struct connman_service *service = user_data;
+ struct connman_service *target;
+ const char *path;
DBG("service %p", service);
+ dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_INVALID);
+
if (service->favorite == FALSE)
return __connman_error_not_supported(msg);
+ target = find_service(path);
+ if (target == NULL || target->favorite == FALSE || target == service)
+ return __connman_error_invalid_service(msg);
+
+ DBG("target %s", target->identifier);
+
+ g_get_current_time(&service->modified);
+ __connman_storage_save_service(service);
+
return __connman_error_not_implemented(msg);
}
dbus_message_unref(service->pending);
service->pending = NULL;
}
+
+ g_get_current_time(&service->modified);
+ __connman_storage_save_service(service);
}
if (state == CONNMAN_SERVICE_STATE_FAILURE) {
return 0;
}
+int __connman_service_indicate_default(struct connman_service *service)
+{
+ DBG("service %p", service);
+
+ return 0;
+}
+
/**
* __connman_service_lookup:
* @identifier: service identifier
GKeyFile *keyfile;
gchar *pathname, *data = NULL;
gsize length;
- char *str;
+ gchar *str;
DBG("service %p", service);
}
str = g_key_file_get_string(keyfile,
+ service->identifier, "Modified", NULL);
+ if (str != NULL) {
+ g_time_val_from_iso8601(str, &service->modified);
+ g_free(str);
+ }
+
+ str = g_key_file_get_string(keyfile,
service->identifier, "Passphrase", NULL);
if (str != NULL) {
g_free(service->passphrase);
GKeyFile *keyfile;
gchar *pathname, *data = NULL;
gsize length;
+ gchar *str;
DBG("service %p", service);
break;
}
+ str = g_time_val_to_iso8601(&service->modified);
+ if (str != NULL) {
+ g_key_file_set_string(keyfile, service->identifier,
+ "Modified", str);
+ g_free(str);
+ }
+
if (service->passphrase != NULL)
g_key_file_set_string(keyfile, service->identifier,
"Passphrase", service->passphrase);