Thus it is possible to accept or reject an incoming peer connection. --- client/agent.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+)
diff --git a/client/agent.c b/client/agent.c index 5a1b944..d020889 100644 --- a/client/agent.c +++ b/client/agent.c @@ -589,6 +589,42 @@ static DBusMessage *agent_request_input(DBusConnection *connection, return NULL; } +static void request_authorization_return(char *input, void *user_data) +{ + struct agent_data *request = user_data; + + switch (confirm_input(input)) { + case 1: + request->reply = dbus_message_new_method_return( + request->message); + dbus_message_iter_init_append(request->reply, &request->iter); + + dbus_message_iter_open_container(&request->iter, + DBUS_TYPE_ARRAY, + DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING + DBUS_TYPE_STRING_AS_STRING + DBUS_TYPE_VARIANT_AS_STRING + DBUS_DICT_ENTRY_END_CHAR_AS_STRING, + &request->dict); + dbus_message_iter_close_container(&request->iter, + &request->dict); + g_dbus_send_message(agent_connection, request->reply); + request->reply = NULL; + break; + case 0: + g_dbus_send_error(agent_connection, request->message, + "net.connman.Agent.Error.Rejected", NULL); + break; + default: + g_dbus_send_error(agent_connection, request->message, + "net.connman.Agent.Error.Canceled", NULL); + break; + } + + pending_message_remove(request); + pending_command_complete(""); +} + static DBusMessage * agent_request_peer_authorization(DBusConnection *connection, DBusMessage *message, void *user_data) @@ -596,6 +632,8 @@ agent_request_peer_authorization(DBusConnection *connection, struct agent_data *request = user_data; DBusMessageIter iter, dict; char *peer, *str; + bool input; + int i; if (handle_message(message, request, agent_request_peer_authorization) == false) @@ -616,6 +654,20 @@ agent_request_peer_authorization(DBusConnection *connection, parse_agent_request(request, &iter); + for (input = false, i = 0; request->input[i].attribute; i++) { + if (request->input[i].requested == true) { + input = true; + break; + } + } + + if (!input) { + request->message = dbus_message_ref(message); + __connmanctl_agent_mode("Accept connection (yes/no)? ", + request_authorization_return, request); + return NULL; + } + request->reply = dbus_message_new_method_return(message); dbus_message_iter_init_append(request->reply, &request->iter); -- 1.8.5.5 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman