From f189dbc687843603e33cc950af3c158becf21a60 Mon Sep 17 00:00:00 2001 From: James Booth Date: Fri, 16 Jun 2017 00:59:21 +0100 Subject: [PATCH] Only send ping requests to client that support it --- src/command/cmd_funcs.c | 5 ++ tests/functionaltests/functionaltests.c | 8 ++- tests/functionaltests/test_ping.c | 93 ++++++++++++++++++++++++- tests/functionaltests/test_ping.h | 8 ++- 4 files changed, 105 insertions(+), 9 deletions(-) diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 42553f5a..6409ec54 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -5868,6 +5868,11 @@ cmd_ping(ProfWin *window, const char *const command, gchar **args) return TRUE; } + if (args[0] != NULL && caps_jid_has_feature(args[0], XMPP_FEATURE_PING) == FALSE) { + cons_show("%s does not support ping requests.", args[0]); + return TRUE; + } + iq_send_ping(args[0]); if (args[0] == NULL) { diff --git a/tests/functionaltests/functionaltests.c b/tests/functionaltests/functionaltests.c index 170cde81..b634cfd2 100644 --- a/tests/functionaltests/functionaltests.c +++ b/tests/functionaltests/functionaltests.c @@ -35,9 +35,11 @@ int main(int argc, char* argv[]) { PROF_FUNC_TEST(connect_bad_password), PROF_FUNC_TEST(connect_shows_presence_updates), - PROF_FUNC_TEST(ping_multiple), - PROF_FUNC_TEST(ping_not_supported), - PROF_FUNC_TEST(ping_responds), + PROF_FUNC_TEST(ping_server), + PROF_FUNC_TEST(ping_server_not_supported), + PROF_FUNC_TEST(ping_responds_to_server_request), + PROF_FUNC_TEST(ping_jid), + PROF_FUNC_TEST(ping_jid_not_supported), PROF_FUNC_TEST(rooms_query), diff --git a/tests/functionaltests/test_ping.c b/tests/functionaltests/test_ping.c index b072645d..5bb937b6 100644 --- a/tests/functionaltests/test_ping.c +++ b/tests/functionaltests/test_ping.c @@ -12,7 +12,7 @@ #include "proftest.h" void -ping_multiple(void **state) +ping_server(void **state) { stbbr_for_id("prof_disco_info_onconnect_2", "" @@ -50,7 +50,7 @@ ping_multiple(void **state) } void -ping_not_supported(void **state) +ping_server_not_supported(void **state) { stbbr_for_id("prof_disco_info_onconnect_2", "" @@ -67,7 +67,7 @@ ping_not_supported(void **state) } void -ping_responds(void **state) +ping_responds_to_server_request(void **state) { prof_connect(); @@ -81,3 +81,90 @@ ping_responds(void **state) "" )); } + +void ping_jid(void **state) +{ + stbbr_for_id("prof_caps_4", + "" + "" + "" + "" + "" + "" + "" + "" + ); + + prof_connect(); + + stbbr_send( + "" + "10" + "I'm here" + "" + "" + ); + assert_true(prof_output_exact("Buddy1 (mobile) is online, \"I'm here\"")); + + assert_true(stbbr_received( + "" + "" + "" + )); + + stbbr_for_id("prof_ping_5", + "" + ); + + prof_input("/ping buddy1@localhost/mobile"); + + assert_true(stbbr_received( + "" + "" + "" + )); + assert_true(prof_output_exact("Ping response from buddy1@localhost/mobile")); +} + +void ping_jid_not_supported(void **state) +{ + stbbr_for_id("prof_caps_4", + "" + "" + "" + "" + "" + "" + "" + ); + + prof_connect(); + + stbbr_send( + "" + "10" + "I'm here" + "" + "" + ); + assert_true(prof_output_exact("Buddy1 (mobile) is online, \"I'm here\"")); + + assert_true(stbbr_received( + "" + "" + "" + )); + + prof_input("/ping buddy1@localhost/mobile"); + assert_true(prof_output_exact("buddy1@localhost/mobile does not support ping requests.")); +} diff --git a/tests/functionaltests/test_ping.h b/tests/functionaltests/test_ping.h index 9992c9fb..1f2eeb91 100644 --- a/tests/functionaltests/test_ping.h +++ b/tests/functionaltests/test_ping.h @@ -1,3 +1,5 @@ -void ping_multiple(void **state); -void ping_not_supported(void **state); -void ping_responds(void **state); +void ping_server(void **state); +void ping_server_not_supported(void **state); +void ping_responds_to_server_request(void **state); +void ping_jid(void **state); +void ping_jid_not_supported(void **state);