[PATCH 16/16] client: Add support for RequestPeerAuthorization on WPS
This method will be requested by ConnMan when it will need to know whether to use WPS PIN or WPS PBC when connecting a peer. --- client/agent.c | 110 ++--- 1 file changed, 82 insertions(+), 28 deletions(-) diff --git a/client/agent.c b/client/agent.c index 64c84da..5a1b944 100644 --- a/client/agent.c +++ b/client/agent.c @@ -492,37 +492,16 @@ static void request_input_string_return(char *input, void *user_data) request_input_next(request); } -static DBusMessage *agent_request_input(DBusConnection *connection, - DBusMessage *message, void *user_data) +static void parse_agent_request(struct agent_data *request, + DBusMessageIter *iter) { - struct agent_data *request = user_data; - DBusMessageIter iter, dict, entry, variant; - char *service, *str, *field; - DBusMessageIter dict_entry, field_entry, field_value; - char *argument, *value, *attr_type = NULL; - + DBusMessageIter dict, entry, variant, dict_entry; + DBusMessageIter field_entry, field_value; + char *field, *argument, *value; + char *attr_type = NULL; int i; - if (handle_message(message, request, agent_request_input) == false) - return NULL; - - dbus_message_iter_init(message, &iter); - - dbus_message_iter_get_basic(&iter, &str); - service = strip_path(str); - - dbus_message_iter_next(&iter); - dbus_message_iter_recurse(&iter, &dict); - - __connmanctl_save_rl(); - if (strcmp(request->interface, AGENT_INTERFACE) == 0) - fprintf(stdout, "Agent RequestInput %s\n", service); - else - fprintf(stdout, "VPN Agent RequestInput %s\n", service); - __connmanctl_dbus_print(&dict, " ", " = ", "\n"); - fprintf(stdout, "\n"); - - dbus_message_iter_recurse(&iter, &dict); + dbus_message_iter_recurse(iter, &dict); while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) { @@ -566,6 +545,76 @@ static DBusMessage *agent_request_input(DBusConnection *connection, dbus_message_iter_next(&dict); } +} + +static DBusMessage *agent_request_input(DBusConnection *connection, + DBusMessage *message, void *user_data) +{ + struct agent_data *request = user_data; + DBusMessageIter iter, dict; + char *service, *str; + + if (handle_message(message, request, agent_request_input) == false) + return NULL; + + dbus_message_iter_init(message, &iter); + + dbus_message_iter_get_basic(&iter, &str); + service = strip_path(str); + + dbus_message_iter_next(&iter); + dbus_message_iter_recurse(&iter, &dict); + + __connmanctl_save_rl(); + if (strcmp(request->interface, AGENT_INTERFACE) == 0) + fprintf(stdout, "Agent RequestInput %s\n", service); + else + fprintf(stdout, "VPN Agent RequestInput %s\n", service); + __connmanctl_dbus_print(&dict, " ", " = ", "\n"); + fprintf(stdout, "\n"); + + parse_agent_request(request, &iter); + + request->reply = dbus_message_new_method_return(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); + + request_input_next(request); + + return NULL; +} + +static DBusMessage * +agent_request_peer_authorization(DBusConnection *connection, + DBusMessage *message, void *user_data) +{ + struct agent_data *request = user_data; + DBusMessageIter iter, dict; + char *peer, *str; + + if (handle_message(message, request, agent_request_peer_authorization) + == false) + return NULL; + + dbus_message_iter_init(message, &iter); + + dbus_message_iter_get_basic(&iter, &str); + peer = strip_path(str); + + dbus_message_iter_next(&iter); + dbus_message_iter_recurse(&iter, &dict); + + __connmanctl_save_rl(); + fprintf(stdout, "Agent RequestPeerAuthorization %s\n", peer); + __connmanctl_dbus_print(&dict, " ", " = ", "\n"); + fprintf(stdout, "\n"); + + parse_agent_request(request, &iter); request->reply = dbus_message_new_method_return(message); dbus_message_iter_init_append(request->reply, &request->iter); @@ -601,6 +650,11 @@ static const GDBusMethodTable agent_methods[] = { { "fields", "a{sv}" }), GDBUS_ARGS({ "fields", "a{sv}" }),
[PATCH 16/16] client: Add support for RequestPeerAuthorization on WPS
This method will be requested by ConnMan when it will need to know whether to use WPS PIN or WPS PBC when connecting a peer. --- client/agent.c | 110 ++--- 1 file changed, 82 insertions(+), 28 deletions(-) diff --git a/client/agent.c b/client/agent.c index 64c84da..5a1b944 100644 --- a/client/agent.c +++ b/client/agent.c @@ -492,37 +492,16 @@ static void request_input_string_return(char *input, void *user_data) request_input_next(request); } -static DBusMessage *agent_request_input(DBusConnection *connection, - DBusMessage *message, void *user_data) +static void parse_agent_request(struct agent_data *request, + DBusMessageIter *iter) { - struct agent_data *request = user_data; - DBusMessageIter iter, dict, entry, variant; - char *service, *str, *field; - DBusMessageIter dict_entry, field_entry, field_value; - char *argument, *value, *attr_type = NULL; - + DBusMessageIter dict, entry, variant, dict_entry; + DBusMessageIter field_entry, field_value; + char *field, *argument, *value; + char *attr_type = NULL; int i; - if (handle_message(message, request, agent_request_input) == false) - return NULL; - - dbus_message_iter_init(message, &iter); - - dbus_message_iter_get_basic(&iter, &str); - service = strip_path(str); - - dbus_message_iter_next(&iter); - dbus_message_iter_recurse(&iter, &dict); - - __connmanctl_save_rl(); - if (strcmp(request->interface, AGENT_INTERFACE) == 0) - fprintf(stdout, "Agent RequestInput %s\n", service); - else - fprintf(stdout, "VPN Agent RequestInput %s\n", service); - __connmanctl_dbus_print(&dict, " ", " = ", "\n"); - fprintf(stdout, "\n"); - - dbus_message_iter_recurse(&iter, &dict); + dbus_message_iter_recurse(iter, &dict); while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) { @@ -566,6 +545,76 @@ static DBusMessage *agent_request_input(DBusConnection *connection, dbus_message_iter_next(&dict); } +} + +static DBusMessage *agent_request_input(DBusConnection *connection, + DBusMessage *message, void *user_data) +{ + struct agent_data *request = user_data; + DBusMessageIter iter, dict; + char *service, *str; + + if (handle_message(message, request, agent_request_input) == false) + return NULL; + + dbus_message_iter_init(message, &iter); + + dbus_message_iter_get_basic(&iter, &str); + service = strip_path(str); + + dbus_message_iter_next(&iter); + dbus_message_iter_recurse(&iter, &dict); + + __connmanctl_save_rl(); + if (strcmp(request->interface, AGENT_INTERFACE) == 0) + fprintf(stdout, "Agent RequestInput %s\n", service); + else + fprintf(stdout, "VPN Agent RequestInput %s\n", service); + __connmanctl_dbus_print(&dict, " ", " = ", "\n"); + fprintf(stdout, "\n"); + + parse_agent_request(request, &iter); + + request->reply = dbus_message_new_method_return(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); + + request_input_next(request); + + return NULL; +} + +static DBusMessage * +agent_request_peer_authorization(DBusConnection *connection, + DBusMessage *message, void *user_data) +{ + struct agent_data *request = user_data; + DBusMessageIter iter, dict; + char *peer, *str; + + if (handle_message(message, request, agent_request_peer_authorization) + == false) + return NULL; + + dbus_message_iter_init(message, &iter); + + dbus_message_iter_get_basic(&iter, &str); + peer = strip_path(str); + + dbus_message_iter_next(&iter); + dbus_message_iter_recurse(&iter, &dict); + + __connmanctl_save_rl(); + fprintf(stdout, "Agent RequestPeerAuthorization %s\n", peer); + __connmanctl_dbus_print(&dict, " ", " = ", "\n"); + fprintf(stdout, "\n"); + + parse_agent_request(request, &iter); request->reply = dbus_message_new_method_return(message); dbus_message_iter_init_append(request->reply, &request->iter); @@ -601,6 +650,11 @@ static const GDBusMethodTable agent_methods[] = { { "fields", "a{sv}" }), GDBUS_ARGS({ "fields", "a{sv}" }),