[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} }), agent_request_input) }, + {
[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} }), agent_request_input) }, + {