int __connman_agent_request_browser(struct connman_service *service, browser_authentication_cb_t callback, const char *url, void *user_data) { struct request_browser_reply_data *browser_reply_data; DBusMessage *message; DBusMessageIter iter; const char *path, *agent_sender, *agent_path; int err; void *agent; agent = connman_agent_get_info(NULL, &agent_sender, &agent_path); if (!service || !agent || !agent_path || !callback) return -ESRCH; if (!url) url = ""; message = dbus_message_new_method_call(agent_sender, agent_path, CONNMAN_AGENT_INTERFACE, "RequestBrowser"); if (!message) return -ENOMEM; dbus_message_iter_init_append(message, &iter); path = __connman_service_get_path(service); dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH, &path); dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &url); browser_reply_data = g_try_new0(struct request_browser_reply_data, 1); if (!browser_reply_data) { dbus_message_unref(message); return -ENOMEM; } browser_reply_data->service = service; browser_reply_data->callback = callback; browser_reply_data->user_data = user_data; err = connman_agent_queue_message(service, message, connman_timeout_browser_launch(), request_browser_reply, browser_reply_data, agent); if (err < 0 && err != -EBUSY) { DBG("error %d sending browser request", err); dbus_message_unref(message); g_free(browser_reply_data); return err; } dbus_message_unref(message); return -EINPROGRESS; }
int __connman_agent_report_error(struct connman_service *service, const char *error, report_error_cb_t callback, void *user_data) { DBusMessage *message; DBusMessageIter iter; const char *path; struct report_error_data *report_error; DBusPendingCall *call; if (service == NULL || agent_path == NULL || error == NULL || callback == NULL) return -ESRCH; message = dbus_message_new_method_call(agent_sender, agent_path, CONNMAN_AGENT_INTERFACE, "ReportError"); if (message == NULL) return -ENOMEM; dbus_message_iter_init_append(message, &iter); path = __connman_service_get_path(service); dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH, &path); dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &error); report_error = g_try_new0(struct report_error_data, 1); if (report_error == NULL) { dbus_message_unref(message); return -ENOMEM; } if (dbus_connection_send_with_reply(connection, message, &call, -1) == FALSE) { dbus_message_unref(message); g_free(report_error); return -ESRCH; } if (call == NULL) { dbus_message_unref(message); g_free(report_error); return -ESRCH; } report_error->service = connman_service_ref(service); report_error->callback = callback; report_error->user_data = user_data; dbus_pending_call_set_notify(call, report_error_reply, report_error, NULL); dbus_message_unref(message); return -EIO; }
int __connman_agent_request_login_input(struct connman_service *service, authentication_cb_t callback, void *user_data) { DBusMessage *message; const char *path, *agent_sender, *agent_path; DBusMessageIter iter; DBusMessageIter dict; struct request_input_reply *username_password_reply; int err; void *agent; agent = connman_agent_get_info(NULL, &agent_sender, &agent_path); if (!service || !agent || !agent_path || !callback) return -ESRCH; message = dbus_message_new_method_call(agent_sender, agent_path, CONNMAN_AGENT_INTERFACE, "RequestInput"); if (!message) return -ENOMEM; dbus_message_iter_init_append(message, &iter); path = __connman_service_get_path(service); dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH, &path); connman_dbus_dict_open(&iter, &dict); connman_dbus_dict_append_dict(&dict, "Username", request_input_append_identity, service); connman_dbus_dict_append_dict(&dict, "Password", request_input_append_password, service); connman_dbus_dict_close(&iter, &dict); username_password_reply = g_try_new0(struct request_input_reply, 1); if (!username_password_reply) { dbus_message_unref(message); return -ENOMEM; } username_password_reply->service = service; username_password_reply->callback = callback; username_password_reply->user_data = user_data; err = connman_agent_queue_message(service, message, connman_timeout_input_request(), request_input_login_reply, username_password_reply, agent); if (err < 0 && err != -EBUSY) { DBG("error %d sending agent request", err); dbus_message_unref(message); g_free(username_password_reply); return err; } dbus_message_unref(message); return -EINPROGRESS; }
int __connman_agent_request_passphrase_input(struct connman_service *service, authentication_cb_t callback, const char *dbus_sender, void *user_data) { DBusMessage *message; const char *path, *agent_sender, *agent_path; DBusMessageIter iter; DBusMessageIter dict; struct request_input_reply *passphrase_reply; int err; void *agent; agent = connman_agent_get_info(dbus_sender, &agent_sender, &agent_path); DBG("agent %p service %p path %s", agent, service, agent_path); if (!service || !agent || !agent_path || !callback) return -ESRCH; message = dbus_message_new_method_call(agent_sender, agent_path, CONNMAN_AGENT_INTERFACE, "RequestInput"); if (!message) return -ENOMEM; dbus_message_iter_init_append(message, &iter); path = __connman_service_get_path(service); dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH, &path); connman_dbus_dict_open(&iter, &dict); if (__connman_service_is_hidden(service)) { connman_dbus_dict_append_dict(&dict, "Name", request_input_append_name, NULL); connman_dbus_dict_append_dict(&dict, "SSID", request_input_append_ssid, NULL); } if (__connman_service_get_security(service) == CONNMAN_SERVICE_SECURITY_8021X) { connman_dbus_dict_append_dict(&dict, "Identity", request_input_append_identity, service); } if (__connman_service_get_security(service) != CONNMAN_SERVICE_SECURITY_NONE) { connman_dbus_dict_append_dict(&dict, "Passphrase", request_input_append_passphrase, service); previous_passphrase_handler(&dict, service); } if (__connman_service_wps_enabled(service)) connman_dbus_dict_append_dict(&dict, "WPS", request_input_append_wps, NULL); connman_dbus_dict_close(&iter, &dict); passphrase_reply = g_try_new0(struct request_input_reply, 1); if (!passphrase_reply) { dbus_message_unref(message); return -ENOMEM; } passphrase_reply->service = service; passphrase_reply->callback = callback; passphrase_reply->user_data = user_data; err = connman_agent_queue_message(service, message, connman_timeout_input_request(), request_input_passphrase_reply, passphrase_reply, agent); if (err < 0 && err != -EBUSY) { DBG("error %d sending agent message", err); dbus_message_unref(message); g_free(passphrase_reply); return err; } dbus_message_unref(message); return -EINPROGRESS; }
int __connman_agent_request_input(struct connman_service *service, authentication_cb_t callback, void *user_data) { DBusMessage *message; const char *path; DBusMessageIter iter; DBusMessageIter dict; DBusPendingCall *call; struct request_input_reply *passphrase_reply; if (service == NULL || agent_path == NULL || callback == NULL) return -ESRCH; message = dbus_message_new_method_call(agent_sender, agent_path, CONNMAN_AGENT_INTERFACE, "RequestInput"); if (message == NULL) return -ENOMEM; dbus_message_iter_init_append(message, &iter); path = __connman_service_get_path(service); dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH, &path); connman_dbus_dict_open(&iter, &dict); if (__connman_service_get_security(service) == CONNMAN_SERVICE_SECURITY_8021X) { connman_dbus_dict_append_dict(&dict, "Identity", request_input_append_identity, service); } connman_dbus_dict_append_dict(&dict, "Passphrase", request_input_append_passphrase, service); if (__connman_service_wps_enabled(service) == TRUE) { connman_dbus_dict_append_dict(&dict, "WPS", request_input_append_wps, NULL); } connman_dbus_dict_close(&iter, &dict); passphrase_reply = g_try_new0(struct request_input_reply, 1); if (passphrase_reply == NULL) { dbus_message_unref(message); return -ENOMEM; } if (dbus_connection_send_with_reply(connection, message, &call, -1) == FALSE) { dbus_message_unref(message); g_free(passphrase_reply); return -ESRCH; } if (call == NULL) { dbus_message_unref(message); g_free(passphrase_reply); return -ESRCH; } passphrase_reply->service = connman_service_ref(service); passphrase_reply->callback = callback; passphrase_reply->user_data = user_data; dbus_pending_call_set_notify(call, request_input_passphrase_reply, passphrase_reply, NULL); dbus_message_unref(message); return -EIO; }