libpurple/protocols/oscar/oscar.c

changeset 29986
ac5cbbbd080d
parent 29894
7f3cb48a71ec
child 30017
ef9bd5ea90ec
equal deleted inserted replaced
29985:cc4458135802 29986:ac5cbbbd080d
200 static int purple_conv_chat_leave (OscarData *, FlapConnection *, FlapFrame *, ...); 200 static int purple_conv_chat_leave (OscarData *, FlapConnection *, FlapFrame *, ...);
201 static int purple_conv_chat_info_update (OscarData *, FlapConnection *, FlapFrame *, ...); 201 static int purple_conv_chat_info_update (OscarData *, FlapConnection *, FlapFrame *, ...);
202 static int purple_conv_chat_incoming_msg(OscarData *, FlapConnection *, FlapFrame *, ...); 202 static int purple_conv_chat_incoming_msg(OscarData *, FlapConnection *, FlapFrame *, ...);
203 static int purple_email_parseupdate(OscarData *, FlapConnection *, FlapFrame *, ...); 203 static int purple_email_parseupdate(OscarData *, FlapConnection *, FlapFrame *, ...);
204 static int purple_icon_parseicon (OscarData *, FlapConnection *, FlapFrame *, ...); 204 static int purple_icon_parseicon (OscarData *, FlapConnection *, FlapFrame *, ...);
205 static int oscar_icon_req (OscarData *, FlapConnection *, FlapFrame *, ...);
206 static int purple_parse_msgack (OscarData *, FlapConnection *, FlapFrame *, ...); 205 static int purple_parse_msgack (OscarData *, FlapConnection *, FlapFrame *, ...);
207 static int purple_parse_evilnotify (OscarData *, FlapConnection *, FlapFrame *, ...); 206 static int purple_parse_evilnotify (OscarData *, FlapConnection *, FlapFrame *, ...);
208 static int purple_parse_searcherror(OscarData *, FlapConnection *, FlapFrame *, ...); 207 static int purple_parse_searcherror(OscarData *, FlapConnection *, FlapFrame *, ...);
209 static int purple_parse_searchreply(OscarData *, FlapConnection *, FlapFrame *, ...); 208 static int purple_parse_searchreply(OscarData *, FlapConnection *, FlapFrame *, ...);
210 static int purple_bosrights (OscarData *, FlapConnection *, FlapFrame *, ...); 209 static int purple_bosrights (OscarData *, FlapConnection *, FlapFrame *, ...);
1560 oscar_data_addhandler(od, SNAC_FAMILY_LOCATE, SNAC_SUBTYPE_LOCATE_USERINFO, purple_parse_userinfo, 0); 1559 oscar_data_addhandler(od, SNAC_FAMILY_LOCATE, SNAC_SUBTYPE_LOCATE_USERINFO, purple_parse_userinfo, 0);
1561 oscar_data_addhandler(od, SNAC_FAMILY_LOCATE, SNAC_SUBTYPE_LOCATE_ERROR, purple_parse_locerr, 0); 1560 oscar_data_addhandler(od, SNAC_FAMILY_LOCATE, SNAC_SUBTYPE_LOCATE_ERROR, purple_parse_locerr, 0);
1562 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, 0x0001, purple_parse_genericerr, 0); 1561 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, 0x0001, purple_parse_genericerr, 0);
1563 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, 0x000f, purple_selfinfo, 0); 1562 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, 0x000f, purple_selfinfo, 0);
1564 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, 0x001f, purple_memrequest, 0); 1563 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, 0x001f, purple_memrequest, 0);
1565 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, 0x0021, oscar_icon_req,0);
1566 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, SNAC_SUBTYPE_OSERVICE_REDIRECT, purple_handle_redirect, 0); 1564 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, SNAC_SUBTYPE_OSERVICE_REDIRECT, purple_handle_redirect, 0);
1567 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, SNAC_SUBTYPE_OSERVICE_MOTD, purple_parse_motd, 0); 1565 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, SNAC_SUBTYPE_OSERVICE_MOTD, purple_parse_motd, 0);
1568 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, SNAC_SUBTYPE_OSERVICE_EVIL, purple_parse_evilnotify, 0); 1566 oscar_data_addhandler(od, SNAC_FAMILY_OSERVICE, SNAC_SUBTYPE_OSERVICE_EVIL, purple_parse_evilnotify, 0);
1569 oscar_data_addhandler(od, SNAC_FAMILY_POPUP, 0x0002, purple_popup, 0); 1567 oscar_data_addhandler(od, SNAC_FAMILY_POPUP, 0x0002, purple_popup, 0);
1570 oscar_data_addhandler(od, SNAC_FAMILY_USERLOOKUP, SNAC_SUBTYPE_USERLOOKUP_ERROR, purple_parse_searcherror, 0); 1568 oscar_data_addhandler(od, SNAC_FAMILY_USERLOOKUP, SNAC_SUBTYPE_USERLOOKUP_ERROR, purple_parse_searcherror, 0);
6241 } 6239 }
6242 6240
6243 return ret; 6241 return ret;
6244 } 6242 }
6245 6243
6246
6247 static int oscar_icon_req(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) {
6248 PurpleConnection *gc = od->gc;
6249 va_list ap;
6250 guint16 type;
6251 guint8 flags = 0, length = 0;
6252 guchar *md5 = NULL;
6253
6254 va_start(ap, fr);
6255 type = va_arg(ap, int);
6256
6257 switch(type) {
6258 case 0x0000:
6259 case 0x0001: {
6260 flags = va_arg(ap, int);
6261 length = va_arg(ap, int);
6262 md5 = va_arg(ap, guchar *);
6263
6264 if ((flags == 0x00) || (flags == 0x41)) {
6265 if (!flap_connection_getbytype(od, SNAC_FAMILY_BART) && !od->iconconnecting) {
6266 od->iconconnecting = TRUE;
6267 od->set_icon = TRUE;
6268 aim_srv_requestnew(od, SNAC_FAMILY_BART);
6269 } else {
6270 PurpleAccount *account = purple_connection_get_account(gc);
6271 PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
6272 if (img == NULL) {
6273 aim_ssi_delicon(od);
6274 } else {
6275
6276 purple_debug_info("oscar",
6277 "Uploading icon to icon server\n");
6278 aim_bart_upload(od, purple_imgstore_get_data(img),
6279 purple_imgstore_get_size(img));
6280 purple_imgstore_unref(img);
6281 }
6282 }
6283 } else if (flags == 0x81) {
6284 PurpleAccount *account = purple_connection_get_account(gc);
6285 PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
6286 if (img == NULL)
6287 aim_ssi_delicon(od);
6288 else {
6289 aim_ssi_seticon(od, md5, length);
6290 purple_imgstore_unref(img);
6291 }
6292 }
6293 } break;
6294
6295 case 0x0002: { /* We just set an "available" message? */
6296 } break;
6297 }
6298
6299 va_end(ap);
6300
6301 return 0;
6302 }
6303
6304 void oscar_set_permit_deny(PurpleConnection *gc) { 6244 void oscar_set_permit_deny(PurpleConnection *gc) {
6305 PurpleAccount *account = purple_connection_get_account(gc); 6245 PurpleAccount *account = purple_connection_get_account(gc);
6306 OscarData *od = purple_connection_get_protocol_data(gc); 6246 OscarData *od = purple_connection_get_protocol_data(gc);
6307 PurplePrivacyType perm_deny; 6247 PurplePrivacyType perm_deny;
6308 6248

mercurial