Jukka Rissanen [Mon, 12 Nov 2012 12:07:58 +0000 (14:07 +0200)]
selinux: Add Type Enforcement rule compilation
The SELinux rules are needed for VPN. They allow various vpn
clients to send notifications to connman-vpnd via net.connman.Task
dbus interface if the connman processes are run under systemd
and the system is in enforcing mode.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:57 +0000 (14:07 +0200)]
main: Plugin and provider cleanup order fixed
We must cleanup the plugin first before cleaning up the provider
because the vpn plugin needs providers from provider hash.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:56 +0000 (14:07 +0200)]
vpn: Go to failure state if vpn information cannot be found
Jukka Rissanen [Mon, 12 Nov 2012 12:07:55 +0000 (14:07 +0200)]
openconnect-script: Print errors to syslog instead of stderr
Use syslog for error printing because normally the stderr
goes to /dev/null and we do not see the errors.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:54 +0000 (14:07 +0200)]
openvpn-script: Print errors to syslog instead of stderr
Use syslog for error printing because normally the stderr
goes to /dev/null and we do not see the errors.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:53 +0000 (14:07 +0200)]
vpnd: Quit if no VPN configurations are found
Jukka Rissanen [Mon, 12 Nov 2012 12:07:52 +0000 (14:07 +0200)]
vpnd: Add function that quits vpnd if no VPN configurations are found
Jukka Rissanen [Mon, 12 Nov 2012 12:07:51 +0000 (14:07 +0200)]
vpn-plugin: Set state correctly if vpn client process cannot be started
Jukka Rissanen [Mon, 12 Nov 2012 12:07:50 +0000 (14:07 +0200)]
vpnd: Make sure provider is taken to ready state
If the connman_inet_ifup() says the interface is already UP,
then it is possible that we might not get a call to vpn_newlink().
That would be really bad as the provider would then never go to
ready state. So in this case we manually call vpn_newlink() to
take the interface UP. If the newlink was called before our call,
then our manual call will be ignored.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:49 +0000 (14:07 +0200)]
pptp: Remember the connection password
Jukka Rissanen [Mon, 12 Nov 2012 12:07:48 +0000 (14:07 +0200)]
l2tp: Remember the connection password
Jukka Rissanen [Mon, 12 Nov 2012 12:07:47 +0000 (14:07 +0200)]
vpn-provider: Remove vpn provider from storage when needed
Jukka Rissanen [Mon, 12 Nov 2012 12:07:46 +0000 (14:07 +0200)]
vpn-provider: Send ConnectionRemoved signal when needed
Jukka Rissanen [Mon, 12 Nov 2012 12:07:45 +0000 (14:07 +0200)]
provider: Do not remove the provider as it would remove it from storage
Jukka Rissanen [Mon, 12 Nov 2012 12:07:44 +0000 (14:07 +0200)]
storage: Add function to remove provider files
Jukka Rissanen [Mon, 12 Nov 2012 12:07:43 +0000 (14:07 +0200)]
provider: Add callback when creating vpn provider
Because the vpnd Create() in manager API only creates and does
not connect the vpn, we must do the connect part after the
vpn is created. This requires a callback which is called when
the connection is established. Eventually this patch becomes
obsolete because the CreateProvider() connman API is deprecated.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:42 +0000 (14:07 +0200)]
vpn-provider: Send ConnectionAdded signal when needed
Jukka Rissanen [Mon, 12 Nov 2012 12:07:41 +0000 (14:07 +0200)]
provider: Removed the connect part from the create() function
The connect operation is done separately from create operation
in connman-vpnd so change the function to reflect that.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:40 +0000 (14:07 +0200)]
vpn: Free allocated ipconfig struct
Jukka Rissanen [Mon, 12 Nov 2012 12:07:39 +0000 (14:07 +0200)]
ipconfig: Add ipconfig unref function
Jukka Rissanen [Mon, 12 Nov 2012 12:07:38 +0000 (14:07 +0200)]
manager: Deprecating connect/remove provider API
The VPN configuration API is provided by connman-vpnd instead
of connmand.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:37 +0000 (14:07 +0200)]
vpn: Add preliminary agent support
Jukka Rissanen [Mon, 12 Nov 2012 12:07:36 +0000 (14:07 +0200)]
agent: Split agent code into generic and service specific parts
Jukka Rissanen [Mon, 12 Nov 2012 12:07:35 +0000 (14:07 +0200)]
vpn: Introduce config file for vpnd
Jukka Rissanen [Mon, 12 Nov 2012 12:07:34 +0000 (14:07 +0200)]
doc: Example configuration file for vpnd
Jukka Rissanen [Mon, 12 Nov 2012 12:07:33 +0000 (14:07 +0200)]
vpn: Hash provider data using the ident instead of path
Needed as sometimes we do not know the path but know the ident.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:32 +0000 (14:07 +0200)]
vpnd: Add -r option which enables route handling in vpnd
By default routes are handled by connman daemon.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:31 +0000 (14:07 +0200)]
vpn: Resolve vpn hostname if necessary
Jukka Rissanen [Mon, 12 Nov 2012 12:07:30 +0000 (14:07 +0200)]
provider: Refactor server and user route handling
The server and user route handling is refactored in order to
reflect the vpn dbus API changes. The routes are now array of
dicts in dbus API.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:29 +0000 (14:07 +0200)]
provider: Initially provider ipconfigs are now OFF
The ipconfig is marked as fixed when IP address is set to
that ipconfig.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:28 +0000 (14:07 +0200)]
plugin: Add VPN plugin that will interact with vpnd
Jukka Rissanen [Mon, 12 Nov 2012 12:07:27 +0000 (14:07 +0200)]
provider: Support functions added
Jukka Rissanen [Mon, 12 Nov 2012 12:07:26 +0000 (14:07 +0200)]
provider: Remove functionality that is no longer used
The VPN support functionality is moved into connman-vpnd.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:25 +0000 (14:07 +0200)]
provider: Add more driver interface functions needed by vpnd plugin
Jukka Rissanen [Mon, 12 Nov 2012 12:07:24 +0000 (14:07 +0200)]
provider: Provider disconnect function made available to plugin
The VPN needs to be able to call the provider disconnect.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:23 +0000 (14:07 +0200)]
test: New VPN test script that connect to connman-vpnd
Jukka Rissanen [Mon, 12 Nov 2012 12:07:22 +0000 (14:07 +0200)]
test: Renamed old VPN scripts
Renamed connect-vpn to connect-provider and
disconnect-vpn to remove-provider
In order to not confuse the user, change the name of the old
vpn connect/disconnect script. Now the name of the script
reflects the name of the manager dbus api.
The connect-provider will use the old ConnectProvider
manager dbus interface instead of directly connecting
to connman-vpnd.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:21 +0000 (14:07 +0200)]
vpn: New vpn daemon that handles vpn connections and clients
Jukka Rissanen [Mon, 12 Nov 2012 12:07:20 +0000 (14:07 +0200)]
log: Give program name and version in log init
This allows the correct output when the log functions
are used from separate vpn daemon.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:19 +0000 (14:07 +0200)]
device: Move device creation func into device.c
The device creation function should be part of device.c and
not inet.c. After this change the inet.c can be used by
separate vpn daemon.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:18 +0000 (14:07 +0200)]
ipconfig: Move IP address API into separate ipaddress.c file
Done so that connman_ipaddress_* functions can be used from
separate vpn daemon.
Jukka Rissanen [Mon, 12 Nov 2012 12:07:17 +0000 (14:07 +0200)]
doc: VPN daemon API descriptions
Patrik Flykt [Wed, 21 Nov 2012 14:25:11 +0000 (16:25 +0200)]
core: Use interface index instead of interface name
Service and network code use only interface indexes. Convert the rest of
the code using interface names to use interface indexes instead. The files
affected are:
include/resolver.h
src/connman.h
src/dnsproxy.c
src/resolver.c
src/rtnl.c
src/service.c
src/tethering.c
As the network and service code used interface indexes, the interface
name had to be looked up via a SIOCGIFNAME ioctl when needed. If a service
was removed due to the interface and network being taken down, the lookup
wouldn't work. This caused DNS servers to be left behind with broken sockets
since removing the DNS servers was done using the interface name.
Patrik Flykt [Fri, 16 Nov 2012 13:15:44 +0000 (15:15 +0200)]
TODO: Add WiFi plugin data struct handling task
Patrik Flykt [Fri, 16 Nov 2012 12:32:58 +0000 (14:32 +0200)]
dnsproxy: Use TCP connections only for the intended request
The DNS proxy code creates and uses a TCP connection only for a single
request at a time. A TCP DNS proxy is added to the end of the server
list, but should not be used for generic requests as the connection
will be closed down after the response to the initial request. Any
other requests sent over the connection will silently disappear.
Add a check to ignore TCP DNS servers for generic lookups.
Patrik Flykt [Mon, 19 Nov 2012 08:21:00 +0000 (10:21 +0200)]
dnsproxy: Check the result of socket creation when resolving
If the socket creation failed, continue with the next server.
Patrik Flykt [Fri, 16 Nov 2012 12:12:46 +0000 (14:12 +0200)]
dnsproxy: Check GIO channel for NULL before use
Check GIO channel for NULL before using it. Also shut down the GIO channel
so that already pending input will not use the free'd structure.
Forest Bond [Thu, 15 Nov 2012 15:23:50 +0000 (10:23 -0500)]
dnsproxy: Close the UDP socket on error condition.
The socket is created again on the next request.
Previously, an error condition only caused the event watch to be removed
and then added again on the next request to avoid processing spurious
error events. But in some network environments, the error condition is
caused by an overly aggressive firewall that rejects our UDP packets and
sends an ICMP error packet indicating an unreachable host and/or port.
In some of these cases we can recover by using a different UDP source
port for outgoing requests (i.e. by closing and re-opening the socket).
Daniel Wagner [Thu, 15 Nov 2012 09:50:15 +0000 (10:50 +0100)]
ofono: Remove network if GPRS context is removed
Whenever the GPRS contextext is removed we need also to remove
the network object. Following sequence was observed:
cm_update_attached() /huawei_1 Attached 1
modem_changed() /huawei_1 Interfaces 0x07
Plugin creates network object and registers it at core
cm_update_attached() /huawei_1 Attached 0
service.c:run_auto_connect()
set_property() /huawei_1 path /huawei_1/context1 org.ofono.ConnectionContext.Active
Obviously, the context is not attached at this point so we get an
Failed to change property: /huawei_1/context1 org.ofono.ConnectionContext.Active: org.ofono.Error.NotAttached GPRS is not
attached
Fixes BMC#25725
Danny Jeongseok Seo [Tue, 13 Nov 2012 01:44:26 +0000 (10:44 +0900)]
iptables: A file descriptor cannot be a nagative integer
When a socket() has failed and a negative file descriptor has been set,
close() cannot accept a negative number as a parameter.
Danny Jeongseok Seo [Mon, 12 Nov 2012 11:34:42 +0000 (20:34 +0900)]
manager: Fix negative error code
Fix error code for __connman_error_failed
Patrik Flykt [Fri, 9 Nov 2012 08:54:21 +0000 (10:54 +0200)]
wifi: Handle D-Bus method call failure
If -ECONNABORTED is received from the gsupplicant network disconnect
callback, it's an indication that the interface has already been
removed from wpa_supplicant side. This can happen due to a race condition
between rtnl and wpa_supplicant interface removal when a USB WiFi dongle
is pulled out.
The pointers given to the callback can no longer be trusted, don't touch
them in the callback. The have been removed by other code at this point.
Patrik Flykt [Fri, 9 Nov 2012 08:54:20 +0000 (10:54 +0200)]
supplicant: Handle race condition on WiFi dongle removal
When a WiFi USB dongle is removed, both rtnl and wpa_supplicant will
be telling that the device is gone. While disconnecting and removing
an interface via gsupplicant, check that D-Bus doesn't give us an
error indicating the interface is already unregistered from D-Bus.
The gdb output looks like:
(gdb) where
#0 0x0042247c in network_connect (network=0x2) at plugins/wifi.c:1197
#1 0x004228f0 in disconnect_callback (result=<value optimized out>,
interface=0x0, user_data=0x99) at plugins/wifi.c:1254
#2 0x0042b910 in network_remove_result (error=0x4d5458
"org.freedesktop.DBus.Error.UnknownMethod", iter=<value optimized
out>,
user_data=<value optimized out>) at gsupplicant/supplicant.c:3593
#3 0x0042ede0 in method_call_reply (call=0x4c6fd0,
user_data=0x4d3be8) at gsupplicant/dbus.c:386
#4 0x2abfddb4 in complete_pending_call_and_unlock () from
/usr/lib/libdbus-1.so.3
Also don't call the same callback twice.
Patrik Flykt [Tue, 13 Nov 2012 12:11:18 +0000 (14:11 +0200)]
bridge: Close socket on error
Danny Jeongseok Seo [Fri, 9 Nov 2012 08:21:24 +0000 (17:21 +0900)]
gdhcp: Fix resource leak
The socket was not closed when the sendto failed.
Danny Jeongseok Seo [Fri, 9 Nov 2012 05:44:12 +0000 (14:44 +0900)]
gweb: Check null before reference
Danny Jeongseok Seo [Fri, 9 Nov 2012 05:46:27 +0000 (14:46 +0900)]
inet: Fix resource leak
The socket was not closed when err < 0 is true.
Jukka Rissanen [Wed, 7 Nov 2012 08:14:05 +0000 (10:14 +0200)]
wifi: Skip service if there is error while loading its settings
If service settings cannot be loaded, then skip that service.
Thanks for Felipe Tonello for reporting the issue.
Jukka Rissanen [Thu, 1 Nov 2012 12:41:55 +0000 (14:41 +0200)]
README: Add information about network interface clearing at startup
Daniel Wagner [Wed, 31 Oct 2012 09:33:39 +0000 (10:33 +0100)]
session: Register session after policy plugin returned config
Move the configuration part of __connman_session_create() into
session_create_cb(). With this change the policy plugin is able
to do async work to retrieve a configuration.
Daniel Wagner [Wed, 31 Oct 2012 09:33:38 +0000 (10:33 +0100)]
session: Factor out user settings in __connman_session_create()
In order to be able to pass the user configuration provided through from
the D-Bus Manager.SessionCreate() call to the callback we need to store
the configuration into a local data data structure. This data structure
can then be passed into the callback introduced later on.
Daniel Wagner [Wed, 31 Oct 2012 09:33:37 +0000 (10:33 +0100)]
session: Remove struct connman_session_bearer
Instead start using enum connman_service_type directly.
Daniel Wagner [Wed, 31 Oct 2012 09:33:36 +0000 (10:33 +0100)]
session: Handle no match case in parse_bearers()
Daniel Wagner [Wed, 31 Oct 2012 09:33:35 +0000 (10:33 +0100)]
session: parse_bearers() should check for invalid types
Daniel Wagner [Wed, 31 Oct 2012 09:33:34 +0000 (10:33 +0100)]
session: Rename session_parse_allowed_bearers() to parse_bearers()
This function name was a source of confusion because in a later patch
we introduce connman_session_parse_allowed_bearers() which will
call parse_bearers(). With this change it should be more readable.
Daniel Wagner [Wed, 31 Oct 2012 09:33:33 +0000 (10:33 +0100)]
session: Remove match_all from connman_session_bearer
The match_all will be expressed through CONNMAN_SESSION_TYPE_UNKNOWN.
The 'no match' case happens when allowed_bearers is NULL.
Daniel Wagner [Wed, 31 Oct 2012 09:33:32 +0000 (10:33 +0100)]
session: Remove name variable from connman_session_bearer
The string is only used when appending the bearer to the D-Bus
message in append_allowed_bearers(). Let's use
__connman_session_type2string() in append_allowed_bearers(). This
saves a bit of memory.
Daniel Wagner [Wed, 31 Oct 2012 09:33:31 +0000 (10:33 +0100)]
session: Add callback to policy create()
Instead returning directly a config when create() is called
in policy plugin, use a callback function for handing over a valid
configuration from the plugin to the session core. This prepares
support for asynchronous create call.
Daniel Wagner [Wed, 31 Oct 2012 09:33:30 +0000 (10:33 +0100)]
session: Policy register should check callback existence
Let's ensure that the policy plugin has all necessary callbacks
installed when connman_session_policy_register() is called. The rest
of the code expects that the create() and destroy() callbacks exist
whenever a plugin is used.
Daniel Wagner [Wed, 31 Oct 2012 09:33:29 +0000 (10:33 +0100)]
session: Pick directly first policy in list
There is no point in iterating over the list when we always
pick the first element in the list.
Daniel Wagner [Wed, 31 Oct 2012 09:33:28 +0000 (10:33 +0100)]
session: Factor out memory release part of cleanup_session
We want to reuse this code snippet for the error case in
__connman_session_create() too.
Daniel Wagner [Wed, 31 Oct 2012 09:33:27 +0000 (10:33 +0100)]
manager: Allow async CreateSession method call
The CreateSession D-Bus call should be marked as async call in order
to allow the session core to defer the response.
Daniel Wagner [Wed, 31 Oct 2012 09:33:26 +0000 (10:33 +0100)]
storage: Add void if function does not have any arguments
Jukka Rissanen [Thu, 1 Nov 2012 12:16:24 +0000 (14:16 +0200)]
dhcp: Clear ipaddresses from ipconfig before starting DHCP
This is needed if manually configured addresses were used and later
DHCP was taken into use. If the manually configured IP information
(address, netmask and gateway) and the information given by DHCP is the
same, DHCP will not set the IP address to the interface.
Jukka Rissanen [Thu, 1 Nov 2012 12:16:23 +0000 (14:16 +0200)]
ipconfig: Add function to clear ipaddress information
Emil Renner Berthing [Tue, 23 Oct 2012 10:29:24 +0000 (13:29 +0300)]
openvpn: Support '--tls-auth <file>' with optional '<direction>' argument
Connman OpenVPN
OpenVPN.TLSAuth --tls-auth <file> [<direction>]
OpenVPN.TLSAuthDir optional <direction> argument to '--tls-auth'
Since 'OpenVPN.TLSAuthDir' contains the optional <direction> argument for
'OpenVPN.TLSAuth', handle them separately. The special handling is
identified by setting openvpn command line argument to NULL.
Emil Renner Berthing [Tue, 23 Oct 2012 10:29:23 +0000 (13:29 +0300)]
openvpn: Add more options
Connman OpenVPN
OpenVPN.NSCertType --ns-cert-type <client|server>
OpenVPN.AskPass --askpass <file>
OpenVPN.AuthNoCache --auth-nocache
Marcel Holtmann [Fri, 26 Oct 2012 08:48:16 +0000 (01:48 -0700)]
Release 1.9
Tomasz Bursztyka [Fri, 26 Oct 2012 07:33:11 +0000 (10:33 +0300)]
technology: Do not proceed with tethering if technology is not enabled
Fixes BMC#25846
Marti Raudsepp [Thu, 25 Oct 2012 18:30:44 +0000 (21:30 +0300)]
systemd: prevent duplicate logging messages in journal
By default, both stdout and syslog messages go to the systemd journal,
which results in duplicate messages being logged.
Thanks to Vinicius Costa Gomes for pointing out this problem.
Tomasz Bursztyka [Thu, 25 Oct 2012 07:54:57 +0000 (10:54 +0300)]
technology: Do not presume a technology being hardblocked when created
This fixes an issue with the TechnologyAdded signal when the first
un-hardblock event occurs:
- when a technology was created, D-Bus registration was done and hardblock
was set to TRUE even if there was no evidence that the technology was
rfkill driven
- when the technology was updated to be rfkill driven, hardblock was already
set to TRUE and thus the technology was not unregistered
- when an rfkill event un-hardblocks the technology, the TechnologyAdded
signal was not sent since the technology was already registered to D-Bus
Patrik Flykt [Thu, 25 Oct 2012 10:52:22 +0000 (13:52 +0300)]
dnsproxy: Add reply host part length checking
Check that the first part of the name is not of zero length before
attempting to calculate the length of the domain part. Also ensure
the domain lenght checking does not run outside of the receive
buffer.
Also add debug messages for ids and lengths in order to pinpoint
any possible problems.
Tomasz Bursztyka [Tue, 23 Oct 2012 07:26:44 +0000 (10:26 +0300)]
wispr: Free wispr portal context in the relevant place
This fixes 2 issues:
- calling __connman_service_ipconfig_indicate_state() might lead to
restart wispr_portal check, so context should not be freed afterward
but beforehand.
- freeing the context in wispr_manage_message() should not happen since
wispr_manage_message() will return back to wispr_portal_web_result()
where we can still use the context.
Thanks to Julien Massot <jmassot@aldebaran-robotics.com> who reported
the issue and provided logs.
Tomasz Bursztyka [Mon, 22 Oct 2012 07:07:49 +0000 (10:07 +0300)]
device: Do not mark connecting networks unavailable
When autoscan fallback code is started, it sets scanning to true which
in turn marks all networks unavailable except for the ones that are
already connected. When connecting during an ongoing autoscan, the
connection attempt stops autoscan and all unavailable networks are
removed, also the one to be connected.
The fix is to ignore both connected and connecting networks when
marking networks unavailable.
Jukka Rissanen [Fri, 19 Oct 2012 07:44:03 +0000 (10:44 +0300)]
network: Fix typo in debug print
Jukka Rissanen [Thu, 18 Oct 2012 11:35:19 +0000 (14:35 +0300)]
web: Make debug func print more useful information
The file and function name are printed in debug prints.
Jukka Rissanen [Thu, 18 Oct 2012 11:35:18 +0000 (14:35 +0300)]
gresolv: Remove query from queue before destroying the query
The order of actions is important here.
Jukka Rissanen [Thu, 18 Oct 2012 11:35:17 +0000 (14:35 +0300)]
gresolv: Make sure we will not receive DNS data after closing
We must close the channel when freeing the resolver object,
otherwise we might still receive data when the resolver has been
freed already.
Fixes BMC#25757
Jukka Rissanen [Thu, 18 Oct 2012 11:35:16 +0000 (14:35 +0300)]
gresolv: Add more debug prints
Jukka Rissanen [Thu, 18 Oct 2012 11:35:15 +0000 (14:35 +0300)]
gresolv: Make debug func print more useful information
The file and function names are printed in debug prints.
Patrik Flykt [Wed, 17 Oct 2012 10:34:43 +0000 (13:34 +0300)]
service: Prefer user connected services with SingleConnectedTechnology
Don't override user connected services with the ones selected by the
preferred technology list when SingleConnectedTechnology is enabled.
Do this by checking each connected service sorted in the beginning of
the service list for the userconnect flag.
Patrik Flykt [Wed, 17 Oct 2012 10:34:42 +0000 (13:34 +0300)]
service: Clear user connected flag on disconnect
Remember whether the service was connected by the user via D-Bus
until the service gets disconnected.
Patrik Flykt [Wed, 17 Oct 2012 10:34:41 +0000 (13:34 +0300)]
service: Keep only a single connected technology if configured
If SingleConnectedTechnology is enabled in main.conf, disconnect any
previously connected services when the new service enters ready state.
Patrik Flykt [Wed, 17 Oct 2012 10:34:40 +0000 (13:34 +0300)]
main: Add SingleConnectedTechnology main.conf variable
Patrik Flykt [Wed, 17 Oct 2012 10:34:39 +0000 (13:34 +0300)]
main.conf: Add SingleConnectedTechnology description
Patrik Flykt [Wed, 17 Oct 2012 10:34:23 +0000 (13:34 +0300)]
service: Fix default service switching and setting gateway
Calling switch_default_service() didn't change the service order since
the services were already sorted that way. Also update the gateway
immediately.
Patrik Flykt [Wed, 17 Oct 2012 10:34:22 +0000 (13:34 +0300)]
main.conf: Update preferred technology description
Patrik Flykt [Wed, 17 Oct 2012 10:34:21 +0000 (13:34 +0300)]
service: A preferred service in state ready is good enough
Simplify the preferred service selection such that a connected
service is good enough, especially since a connecting service
will also terminate the search for the current preferred one.
Patrik Flykt [Wed, 17 Oct 2012 10:34:20 +0000 (13:34 +0300)]
service: Don't trigger autoconnect when neither service is preferred
Don't trigger a new autoconnect when neither the default nor the new
service is preferred. Rely on the fact that normal autoconnect selection
mechanism has done the work for us already.
Tomasz Bursztyka [Wed, 17 Oct 2012 07:46:15 +0000 (10:46 +0300)]
client: Add Remove() method support for service