diff options
author | Patrik Flykt <patrik.flykt@nokia.com> | 2010-12-02 16:09:15 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-12-02 16:48:11 +0100 |
commit | 164c97cf932c31b6de2ed94f583daebe20b88dfc (patch) | |
tree | 6e00005b060b0cd1a57e56eb3736dbc5075f170c /src | |
parent | 7f5e9f73abe64c790d75e92b775eb7f040a8ffe3 (diff) | |
download | connman-164c97cf932c31b6de2ed94f583daebe20b88dfc.tar.gz connman-164c97cf932c31b6de2ed94f583daebe20b88dfc.tar.bz2 connman-164c97cf932c31b6de2ed94f583daebe20b88dfc.zip |
service: Call __connman_agent_report_error when a service fails to connect
When a service fails, call __connman_agent_report_error to send an
ReportError method call to the agent. Sending of ReportError is requested
only if the service was connected due to a D-Bus request. Thus automatic
connection creation will be done silently without invoking an agent.
Diffstat (limited to 'src')
-rw-r--r-- | src/service.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/service.c b/src/service.c index 1c29d886..03fb2cb1 100644 --- a/src/service.c +++ b/src/service.c @@ -2942,6 +2942,17 @@ static void service_complete(struct connman_service *service) __connman_storage_save_service(service); } +static void report_error_cb(struct connman_service *service, + gboolean retry, void *user_data) +{ + if (retry == TRUE) + __connman_service_connect(service); + else { + service_complete(service); + __connman_profile_changed(FALSE); + } +} + int __connman_service_indicate_state(struct connman_service *service, enum connman_service_state state) { @@ -3038,6 +3049,11 @@ int __connman_service_indicate_state(struct connman_service *service, } if (state == CONNMAN_SERVICE_STATE_FAILURE) { + if (service->userconnect == TRUE && + __connman_agent_report_error(service, + error2string(service->error), + report_error_cb, NULL) == -EIO) + return 0; service_complete(service); } else service->error = CONNMAN_SERVICE_ERROR_UNKNOWN; @@ -3258,7 +3274,12 @@ int __connman_service_connect(struct connman_service *service) if (err != -EINPROGRESS) { __connman_ipconfig_disable(service->ipconfig); __connman_stats_service_unregister(service); - return err; + if (service->userconnect == TRUE) + return __connman_agent_report_error(service, + error2string(service->error), + report_error_cb, NULL); + else + return err; } service->timeout = g_timeout_add_seconds(CONNECT_TIMEOUT, |