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

Reply via email to