return CONNMAN_DEVICE_POLICY_UNKNOWN;
}
+static int set_carrier(struct connman_device *device, connman_bool_t carrier)
+{
+ if (carrier == TRUE) {
+ enum connman_element_type type = CONNMAN_ELEMENT_TYPE_UNKNOWN;
+ struct connman_element *element;
+
+ switch (device->element.ipv4.method) {
+ case CONNMAN_IPV4_METHOD_UNKNOWN:
+ case CONNMAN_IPV4_METHOD_OFF:
+ return 0;
+ case CONNMAN_IPV4_METHOD_STATIC:
+ type = CONNMAN_ELEMENT_TYPE_IPV4;
+ break;
+ case CONNMAN_IPV4_METHOD_DHCP:
+ type = CONNMAN_ELEMENT_TYPE_DHCP;
+ break;
+ }
+
+ element = connman_element_create(NULL);
+ if (element != NULL) {
+ element->type = type;
+ element->index = device->element.index;
+
+ if (connman_element_register(element,
+ &device->element) < 0)
+ connman_element_unref(element);
+ }
+ } else
+ connman_element_unregister_children(&device->element);
+
+ return 0;
+}
+
static int set_powered(struct connman_device *device, connman_bool_t powered)
{
struct connman_device_driver *driver = device->driver;
} else {
g_hash_table_remove_all(device->networks);
+ set_carrier(device, FALSE);
+
if (driver->disable) {
err = driver->disable(device);
__connman_notifier_device_type_decrease(device->type);
case CONNMAN_DEVICE_POLICY_MANUAL:
if (device->powered == FALSE)
err = set_powered(device, TRUE);
+ else
+ err = set_carrier(device, device->carrier);
break;
}
DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING
DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict);
- str = type2description(device->type);
- if (str != NULL && device->interface != NULL) {
- char *name = g_strdup_printf("%s (%s)", str, device->interface);
- if (name != NULL)
- connman_dbus_dict_append_variant(&dict, "Name",
- DBUS_TYPE_STRING, &name);
- g_free(name);
- }
+ if (device->name != NULL)
+ connman_dbus_dict_append_variant(&dict, "Name",
+ DBUS_TYPE_STRING, &device->name);
str = type2string(device->type);
if (str != NULL)
if (network == NULL)
return __connman_error_failed(msg);
- while (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_DICT_ENTRY) {
+ while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_DICT_ENTRY) {
DBusMessageIter entry, value;
const char *key, *str;
- dbus_message_iter_recurse(&iter, &entry);
+ dbus_message_iter_recurse(&array, &entry);
dbus_message_iter_get_basic(&entry, &key);
dbus_message_iter_next(&entry);
switch (dbus_message_iter_get_arg_type(&value)) {
case DBUS_TYPE_STRING:
dbus_message_iter_get_basic(&value, &str);
- connman_network_set_string(network, key, str);
+ if (g_str_equal(key, "WiFi.SSID") == TRUE)
+ connman_network_set_blob(network, key,
+ str, strlen(str));
+ else
+ connman_network_set_string(network, key, str);
break;
}
- dbus_message_iter_next(&iter);
+ dbus_message_iter_next(&array);
}
index = connman_device_get_index(device);
connman_network_set_index(network, index);
+ connman_network_set_protocol(network, CONNMAN_NETWORK_PROTOCOL_IP);
+
err = device->driver->join(device, network);
connman_network_unref(network);
device->element.ipv4.method = CONNMAN_IPV4_METHOD_DHCP;
device->type = type;
+ device->name = g_strdup(type2description(device->type));
device->mode = CONNMAN_DEVICE_MODE_UNKNOWN;
device->policy = CONNMAN_DEVICE_POLICY_AUTO;
connman_element_unref(&device->element);
}
+const char *__connman_device_get_type(struct connman_device *device)
+{
+ return type2string(device->type);
+}
+
+/**
+ * connman_device_get_type:
+ * @device: device structure
+ *
+ * Get type of device
+ */
+enum connman_device_type connman_device_get_type(struct connman_device *device)
+{
+ return device->type;
+}
+
/**
* connman_device_get_name:
* @device: device structure
g_free(device->interface);
device->interface = g_strdup(interface);
+
+ if (device->name == NULL) {
+ const char *str = type2description(device->type);
+ if (str != NULL && device->interface != NULL)
+ device->name = g_strdup_printf("%s (%s)", str,
+ device->interface);
+ }
}
/**
device->carrier = carrier;
- if (carrier == TRUE) {
- enum connman_element_type type = CONNMAN_ELEMENT_TYPE_UNKNOWN;
- struct connman_element *element;
-
- switch (device->element.ipv4.method) {
- case CONNMAN_IPV4_METHOD_UNKNOWN:
- case CONNMAN_IPV4_METHOD_OFF:
- return 0;
- case CONNMAN_IPV4_METHOD_STATIC:
- type = CONNMAN_ELEMENT_TYPE_IPV4;
- break;
- case CONNMAN_IPV4_METHOD_DHCP:
- type = CONNMAN_ELEMENT_TYPE_DHCP;
- break;
- }
-
- element = connman_element_create(NULL);
- if (element != NULL) {
- element->type = type;
- element->index = device->element.index;
-
- if (connman_element_register(element,
- &device->element) < 0)
- connman_element_unref(element);
- }
- } else
- connman_element_unregister_children(&device->element);
+ switch (device->policy) {
+ case CONNMAN_DEVICE_POLICY_UNKNOWN:
+ case CONNMAN_DEVICE_POLICY_IGNORE:
+ case CONNMAN_DEVICE_POLICY_OFF:
+ return 0;
+ case CONNMAN_DEVICE_POLICY_AUTO:
+ case CONNMAN_DEVICE_POLICY_MANUAL:
+ break;
+ }
- return 0;
+ return set_carrier(device, device->carrier);
}
void __connman_device_disconnect(struct connman_device *device)