| 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 } |