comparison libpurple/protocols/jabber/adhoccommands.c @ 26465:ae41d8e827e3

Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
author Paul Aurich <paul@darkrain42.org>
date Fri, 13 Mar 2009 02:26:45 +0000
parents 5f9a24d1c25e
children 83e6e710cbf3
comparison
equal deleted inserted replaced
26464:a4a5825fb1bb 26465:ae41d8e827e3
37 char *who; 37 char *who;
38 char *node; 38 char *node;
39 GList *actionslist; 39 GList *actionslist;
40 } JabberAdHocActionInfo; 40 } JabberAdHocActionInfo;
41 41
42 void jabber_adhoc_disco_result_cb(JabberStream *js, xmlnode *packet, gpointer data) { 42 void jabber_adhoc_disco_result_cb(JabberStream *js, const char *from,
43 const char *from = xmlnode_get_attrib(packet, "from"); 43 JabberIqType type, const char *id,
44 const char *type = xmlnode_get_attrib(packet, "type"); 44 xmlnode *packet, gpointer data)
45 {
45 const char *node; 46 const char *node;
46 xmlnode *query, *item; 47 xmlnode *query, *item;
47 JabberID *jabberid; 48 JabberID *jabberid;
48 JabberBuddy *jb; 49 JabberBuddy *jb;
49 JabberBuddyResource *jbr = NULL; 50 JabberBuddyResource *jbr = NULL;
50 51
51 if(strcmp(type, "result")) 52 if (type == JABBER_IQ_ERROR)
52 return; 53 return;
53 54
54 query = xmlnode_get_child_with_namespace(packet,"query","http://jabber.org/protocol/disco#items"); 55 query = xmlnode_get_child_with_namespace(packet,"query","http://jabber.org/protocol/disco#items");
55 if(!query) 56 if(!query)
56 return; 57 return;
93 94
94 jbr->commands = g_list_append(jbr->commands,cmd); 95 jbr->commands = g_list_append(jbr->commands,cmd);
95 } 96 }
96 } 97 }
97 98
98 static void jabber_adhoc_parse(JabberStream *js, xmlnode *packet, gpointer data); 99 static void jabber_adhoc_parse(JabberStream *js, const char *from,
100 JabberIqType type, const char *id,
101 xmlnode *packet, gpointer data);
102
99 103
100 static void do_adhoc_action_cb(JabberStream *js, xmlnode *result, const char *actionhandle, gpointer user_data) { 104 static void do_adhoc_action_cb(JabberStream *js, xmlnode *result, const char *actionhandle, gpointer user_data) {
101 xmlnode *command; 105 xmlnode *command;
102 GList *action; 106 GList *action;
103 JabberAdHocActionInfo *actionInfo = user_data; 107 JabberAdHocActionInfo *actionInfo = user_data;
129 g_free(actionInfo->node); 133 g_free(actionInfo->node);
130 134
131 jabber_iq_send(iq); 135 jabber_iq_send(iq);
132 } 136 }
133 137
134 static void jabber_adhoc_parse(JabberStream *js, xmlnode *packet, gpointer data) { 138 static void
139 jabber_adhoc_parse(JabberStream *js, const char *from,
140 JabberIqType type, const char *id,
141 xmlnode *packet, gpointer data)
142 {
135 xmlnode *command = xmlnode_get_child_with_namespace(packet, "command", "http://jabber.org/protocol/commands"); 143 xmlnode *command = xmlnode_get_child_with_namespace(packet, "command", "http://jabber.org/protocol/commands");
136 const char *status = xmlnode_get_attrib(command,"status"); 144 const char *status = xmlnode_get_attrib(command,"status");
137 xmlnode *xdata = xmlnode_get_child_with_namespace(command,"x","jabber:x:data"); 145 xmlnode *xdata = xmlnode_get_child_with_namespace(command,"x","jabber:x:data");
138 const char *type = xmlnode_get_attrib(packet,"type"); 146
139 147 if (type == JABBER_IQ_ERROR) {
140 if(type && !strcmp(type,"error")) {
141 char *msg = jabber_parse_error(js, packet, NULL); 148 char *msg = jabber_parse_error(js, packet, NULL);
142 if(!msg) 149 if(!msg)
143 msg = g_strdup(_("Unknown Error")); 150 msg = g_strdup(_("Unknown Error"));
144 151
145 purple_notify_error(NULL, _("Ad-Hoc Command Failed"), 152 purple_notify_error(NULL, _("Ad-Hoc Command Failed"),
146 _("Ad-Hoc Command Failed"), msg); 153 _("Ad-Hoc Command Failed"), msg);
147 g_free(msg); 154 g_free(msg);
148 return; 155 return;
149 } 156 }
150 if(!type || strcmp(type,"result"))
151 return;
152 157
153 if(!status) 158 if(!status)
154 return; 159 return;
155 160
156 if(!strcmp(status,"completed")) { 161 if(!strcmp(status,"completed")) {
157 /* display result */ 162 /* display result */
158 xmlnode *note = xmlnode_get_child(command,"note"); 163 xmlnode *note = xmlnode_get_child(command,"note");
159 164
160 if(note) { 165 if(note) {
161 char *data = xmlnode_get_data(note); 166 char *data = xmlnode_get_data(note);
162 purple_notify_info(NULL, xmlnode_get_attrib(packet, "from"), data, NULL); 167 purple_notify_info(NULL, from, data, NULL);
163 g_free(data); 168 g_free(data);
164 } 169 }
165 170
166 if(xdata) 171 if(xdata)
167 jabber_x_data_request(js, xdata, (jabber_x_data_cb)do_adhoc_ignoreme, NULL); 172 jabber_x_data_request(js, xdata, (jabber_x_data_cb)do_adhoc_ignoreme, NULL);
197 } 202 }
198 } 203 }
199 204
200 actionInfo = g_new0(JabberAdHocActionInfo, 1); 205 actionInfo = g_new0(JabberAdHocActionInfo, 1);
201 actionInfo->sessionid = g_strdup(xmlnode_get_attrib(command,"sessionid")); 206 actionInfo->sessionid = g_strdup(xmlnode_get_attrib(command,"sessionid"));
202 actionInfo->who = g_strdup(xmlnode_get_attrib(packet,"from")); 207 actionInfo->who = g_strdup(from);
203 actionInfo->node = g_strdup(xmlnode_get_attrib(command,"node")); 208 actionInfo->node = g_strdup(xmlnode_get_attrib(command,"node"));
204 actionInfo->actionslist = actionslist; 209 actionInfo->actionslist = actionslist;
205 210
206 jabber_x_data_request_with_actions(js,xdata,actionslist,actionindex,do_adhoc_action_cb,actionInfo); 211 jabber_x_data_request_with_actions(js,xdata,actionslist,actionindex,do_adhoc_action_cb,actionInfo);
207 } 212 }
216 221
217 jabber_adhoc_execute(js, cmd); 222 jabber_adhoc_execute(js, cmd);
218 } 223 }
219 } 224 }
220 225
221 static void jabber_adhoc_server_got_list_cb(JabberStream *js, xmlnode *packet, gpointer data) { 226 static void
227 jabber_adhoc_server_got_list_cb(JabberStream *js, const char *from,
228 JabberIqType type, const char *id,
229 xmlnode *packet, gpointer data)
230 {
222 xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items"); 231 xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items");
223 xmlnode *item; 232 xmlnode *item;
224 233
225 if(!query) 234 if(!query)
226 return; 235 return;