protocols/ircv3/purpleircv3ctcphandlers.c

changeset 42947
741fc66f01b8
parent 42937
34ac8ac8c7b6
equal deleted inserted replaced
42946:25a2db55796d 42947:741fc66f01b8
54 g_clear_object(&ctcp_response); 54 g_clear_object(&ctcp_response);
55 55
56 ibis_client_write(client, response); 56 ibis_client_write(client, response);
57 } 57 }
58 58
59 static void
60 purple_ircv3_ctcp_handle_ping(G_GNUC_UNUSED PurpleIRCv3Connection *connection,
61 IbisClient *client, IbisMessage *message,
62 IbisCTCPMessage *ctcp_message)
63 {
64 IbisMessage *response = NULL;
65 IbisCTCPMessage *ctcp_response = NULL;
66 GStrv params = NULL;
67 char *nick = NULL;
68 const char *source = NULL;
69
70 ctcp_response = ibis_ctcp_message_new(IBIS_CTCP_PING);
71 params = ibis_ctcp_message_get_params(ctcp_message);
72 if(params != NULL) {
73 ibis_ctcp_message_set_paramsv(ctcp_response, params);
74 }
75
76 response = ibis_message_new(IBIS_MSG_NOTICE);
77
78 source = ibis_message_get_source(message);
79 ibis_source_parse(source, &nick, NULL, NULL);
80 ibis_message_set_params(response, nick, NULL);
81 g_free(nick);
82
83 ibis_message_set_ctcp_message(response, ctcp_response);
84 g_clear_object(&ctcp_response);
85
86 ibis_client_write(client, response);
87 }
88
59 /****************************************************************************** 89 /******************************************************************************
60 * Internal API 90 * Internal API
61 *****************************************************************************/ 91 *****************************************************************************/
62 void 92 void
63 purple_ircv3_ctcp_handler(PurpleIRCv3Connection *connection, 93 purple_ircv3_ctcp_handler(PurpleIRCv3Connection *connection,
70 command = ibis_ctcp_message_get_command(ctcp_message); 100 command = ibis_ctcp_message_get_command(ctcp_message);
71 101
72 if(purple_strequal(command, IBIS_CTCP_VERSION)) { 102 if(purple_strequal(command, IBIS_CTCP_VERSION)) {
73 purple_ircv3_ctcp_handle_version(connection, client, message, 103 purple_ircv3_ctcp_handle_version(connection, client, message,
74 ctcp_message); 104 ctcp_message);
105 } else if(purple_strequal(command, IBIS_CTCP_PING)) {
106 purple_ircv3_ctcp_handle_ping(connection, client, message,
107 ctcp_message);
75 } 108 }
76 } 109 }

mercurial