Beispiel #1
0
static void modem_prop_changed_cb(const gchar *name, void *data)
{
	struct ofono_wan_data *od = data;
	const char *path = ofono_modem_get_path(od->modem);

	if (g_str_equal(name, "Interfaces")) {
		if (!od->cm && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_CONNECTION_MANAGER)) {
			od->cm = ofono_connection_manager_create(path);
			ofono_connection_manager_register_prop_changed_cb(od->cm, manager_property_changed_cb, od);
			ofono_connection_manager_register_contexts_changed_cb(od->cm, send_status_update_cb, od);
		}
		else if (od->cm && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_CONNECTION_MANAGER)) {
			ofono_connection_manager_free(od->cm);
			od->cm = NULL;
		}
		if (!od->netreg && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_NETWORK_REGISTRATION)) {
			od->netreg = ofono_network_registration_create(path);
			ofono_network_registration_register_prop_changed_handler(od->netreg, network_prop_changed_cb, od);
		}
		else if (od->netreg && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_NETWORK_REGISTRATION)) {
			ofono_network_registration_free(od->netreg);
			od->netreg = NULL;
			send_status_update_cb(od);
		}
	}
}
void ofono_connection_manager_unref(struct ofono_connection_manager *cm)
{
	if (!cm)
		return;

	if (__sync_sub_and_fetch(&cm->ref_count, 1))
		return;

	ofono_connection_manager_free(cm);
}