Mercurial > pidgin.yaz
comparison libpurple/protocols/oscar/oscar.c @ 20229:e01a6dc25900
applied changes from 02a707bbb0cf1cab4c65c4977bed39c67c5b2452
through 4bf967409db36d8f3cc8671f6633ea448165dd99
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Fri, 28 Sep 2007 15:50:42 +0000 |
parents | 0bf3907e62fd |
children | 72d7a692b1ac |
comparison
equal
deleted
inserted
replaced
20228:0bf3907e62fd | 20229:e01a6dc25900 |
---|---|
187 static int purple_popup (OscarData *, FlapConnection *, FlapFrame *, ...); | 187 static int purple_popup (OscarData *, FlapConnection *, FlapFrame *, ...); |
188 static int purple_ssi_parseerr (OscarData *, FlapConnection *, FlapFrame *, ...); | 188 static int purple_ssi_parseerr (OscarData *, FlapConnection *, FlapFrame *, ...); |
189 static int purple_ssi_parserights (OscarData *, FlapConnection *, FlapFrame *, ...); | 189 static int purple_ssi_parserights (OscarData *, FlapConnection *, FlapFrame *, ...); |
190 static int purple_ssi_parselist (OscarData *, FlapConnection *, FlapFrame *, ...); | 190 static int purple_ssi_parselist (OscarData *, FlapConnection *, FlapFrame *, ...); |
191 static int purple_ssi_parseack (OscarData *, FlapConnection *, FlapFrame *, ...); | 191 static int purple_ssi_parseack (OscarData *, FlapConnection *, FlapFrame *, ...); |
192 static int purple_ssi_parseadd (OscarData *, FlapConnection *, FlapFrame *, ...); | 192 static int purple_ssi_parseaddmod (OscarData *, FlapConnection *, FlapFrame *, ...); |
193 static int purple_ssi_authgiven (OscarData *, FlapConnection *, FlapFrame *, ...); | 193 static int purple_ssi_authgiven (OscarData *, FlapConnection *, FlapFrame *, ...); |
194 static int purple_ssi_authrequest (OscarData *, FlapConnection *, FlapFrame *, ...); | 194 static int purple_ssi_authrequest (OscarData *, FlapConnection *, FlapFrame *, ...); |
195 static int purple_ssi_authreply (OscarData *, FlapConnection *, FlapFrame *, ...); | 195 static int purple_ssi_authreply (OscarData *, FlapConnection *, FlapFrame *, ...); |
196 static int purple_ssi_gotadded (OscarData *, FlapConnection *, FlapFrame *, ...); | 196 static int purple_ssi_gotadded (OscarData *, FlapConnection *, FlapFrame *, ...); |
197 | 197 |
1218 oscar_data_addhandler(od, SNAC_FAMILY_CHATNAV, SNAC_SUBTYPE_CHATNAV_INFO, purple_chatnav_info, 0); | 1218 oscar_data_addhandler(od, SNAC_FAMILY_CHATNAV, SNAC_SUBTYPE_CHATNAV_INFO, purple_chatnav_info, 0); |
1219 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_ERROR, purple_ssi_parseerr, 0); | 1219 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_ERROR, purple_ssi_parseerr, 0); |
1220 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_RIGHTSINFO, purple_ssi_parserights, 0); | 1220 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_RIGHTSINFO, purple_ssi_parserights, 0); |
1221 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_LIST, purple_ssi_parselist, 0); | 1221 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_LIST, purple_ssi_parselist, 0); |
1222 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_SRVACK, purple_ssi_parseack, 0); | 1222 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_SRVACK, purple_ssi_parseack, 0); |
1223 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_ADD, purple_ssi_parseadd, 0); | 1223 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_ADD, purple_ssi_parseaddmod, 0); |
1224 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_RECVAUTH, purple_ssi_authgiven, 0); | 1224 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_RECVAUTH, purple_ssi_authgiven, 0); |
1225 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_RECVAUTHREQ, purple_ssi_authrequest, 0); | 1225 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_RECVAUTHREQ, purple_ssi_authrequest, 0); |
1226 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_RECVAUTHREP, purple_ssi_authreply, 0); | 1226 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_RECVAUTHREP, purple_ssi_authreply, 0); |
1227 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_ADDED, purple_ssi_gotadded, 0); | 1227 oscar_data_addhandler(od, SNAC_FAMILY_FEEDBAG, SNAC_SUBTYPE_FEEDBAG_ADDED, purple_ssi_gotadded, 0); |
1228 oscar_data_addhandler(od, SNAC_FAMILY_ICBM, 0x0005, purple_icbm_param_info, 0); | 1228 oscar_data_addhandler(od, SNAC_FAMILY_ICBM, 0x0005, purple_icbm_param_info, 0); |
4932 alias_utf8 = NULL; | 4932 alias_utf8 = NULL; |
4933 | 4933 |
4934 b = purple_find_buddy_in_group(gc->account, curitem->name, g); | 4934 b = purple_find_buddy_in_group(gc->account, curitem->name, g); |
4935 if (b) { | 4935 if (b) { |
4936 /* Get server stored alias */ | 4936 /* Get server stored alias */ |
4937 if (alias_utf8) { | 4937 purple_blist_alias_buddy(b, alias_utf8); |
4938 g_free(b->alias); | |
4939 b->alias = g_strdup(alias_utf8); | |
4940 } | |
4941 } else { | 4938 } else { |
4942 b = purple_buddy_new(gc->account, curitem->name, alias_utf8); | 4939 b = purple_buddy_new(gc->account, curitem->name, alias_utf8); |
4943 | 4940 |
4944 purple_debug_info("oscar", | 4941 purple_debug_info("oscar", |
4945 "ssi: adding buddy %s to group %s to local list\n", curitem->name, g->name); | 4942 "ssi: adding buddy %s to group %s to local list\n", curitem->name, g->name); |
5079 } | 5076 } |
5080 | 5077 |
5081 return 1; | 5078 return 1; |
5082 } | 5079 } |
5083 | 5080 |
5084 static int purple_ssi_parseadd(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { | 5081 static int |
5085 PurpleConnection *gc = od->gc; | 5082 purple_ssi_parseaddmod(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) |
5083 { | |
5084 PurpleConnection *gc; | |
5085 PurpleAccount *account; | |
5086 char *gname, *gname_utf8, *alias, *alias_utf8; | 5086 char *gname, *gname_utf8, *alias, *alias_utf8; |
5087 PurpleBuddy *b; | 5087 PurpleBuddy *b; |
5088 PurpleGroup *g; | 5088 PurpleGroup *g; |
5089 va_list ap; | 5089 va_list ap; |
5090 guint16 type; | 5090 guint16 snac_subtype, type; |
5091 const char *name; | 5091 const char *name; |
5092 | 5092 |
5093 gc = od->gc; | |
5094 account = purple_connection_get_account(gc); | |
5095 | |
5093 va_start(ap, fr); | 5096 va_start(ap, fr); |
5097 snac_subtype = (guint16)va_arg(ap, int); | |
5094 type = (guint16)va_arg(ap, int); | 5098 type = (guint16)va_arg(ap, int); |
5095 name = va_arg(ap, char *); | 5099 name = va_arg(ap, char *); |
5096 va_end(ap); | 5100 va_end(ap); |
5097 | 5101 |
5098 if ((type != 0x0000) || (name == NULL)) | 5102 if ((type != 0x0000) || (name == NULL)) |
5099 return 1; | 5103 return 1; |
5100 | 5104 |
5101 gname = aim_ssi_itemlist_findparentname(od->ssi.local, name); | 5105 gname = aim_ssi_itemlist_findparentname(od->ssi.local, name); |
5102 gname_utf8 = gname ? oscar_utf8_try_convert(gc->account, gname) : NULL; | 5106 gname_utf8 = gname ? oscar_utf8_try_convert(account, gname) : NULL; |
5103 | 5107 |
5104 alias = aim_ssi_getalias(od->ssi.local, gname, name); | 5108 alias = aim_ssi_getalias(od->ssi.local, gname, name); |
5105 if (alias != NULL) | 5109 if (alias != NULL) |
5106 { | 5110 { |
5107 if (g_utf8_validate(alias, -1, NULL)) | 5111 if (g_utf8_validate(alias, -1, NULL)) |
5108 alias_utf8 = g_strdup(alias); | 5112 alias_utf8 = g_strdup(alias); |
5109 else | 5113 else |
5110 alias_utf8 = oscar_utf8_try_convert(purple_connection_get_account(gc), alias); | 5114 alias_utf8 = oscar_utf8_try_convert(account, alias); |
5111 } | 5115 } |
5112 else | 5116 else |
5113 alias_utf8 = NULL; | 5117 alias_utf8 = NULL; |
5114 | |
5115 b = purple_find_buddy(gc->account, name); | |
5116 g_free(alias); | 5118 g_free(alias); |
5117 | 5119 |
5120 b = purple_find_buddy(account, name); | |
5118 if (b) { | 5121 if (b) { |
5119 /* Get server stored alias */ | 5122 /* |
5120 if (alias_utf8) { | 5123 * You're logged in somewhere else and you aliased one |
5121 g_free(b->alias); | 5124 * of your buddies, so update our local buddy list with |
5122 b->alias = g_strdup(alias_utf8); | 5125 * the person's new alias. |
5123 } | 5126 */ |
5124 } else { | 5127 purple_blist_alias_buddy(b, alias_utf8); |
5125 b = purple_buddy_new(gc->account, name, alias_utf8); | 5128 } else if (snac_subtype == 0x0008) { |
5129 /* | |
5130 * You're logged in somewhere else and you added a buddy to | |
5131 * your server list, so add them to your local buddy list. | |
5132 */ | |
5133 b = purple_buddy_new(account, name, alias_utf8); | |
5126 | 5134 |
5127 if (!(g = purple_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) { | 5135 if (!(g = purple_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) { |
5128 g = purple_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); | 5136 g = purple_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); |
5129 purple_blist_add_group(g, NULL); | 5137 purple_blist_add_group(g, NULL); |
5130 } | 5138 } |
5131 | 5139 |
5132 purple_debug_info("oscar", | 5140 purple_debug_info("oscar", |
5133 "ssi: adding buddy %s to group %s to local list\n", name, gname_utf8 ? gname_utf8 : _("Orphans")); | 5141 "ssi: adding buddy %s to group %s to local list\n", name, gname_utf8 ? gname_utf8 : _("Orphans")); |
5134 purple_blist_add_buddy(b, NULL, g, NULL); | 5142 purple_blist_add_buddy(b, NULL, g, NULL); |
5135 } | 5143 } |
5144 | |
5136 g_free(gname_utf8); | 5145 g_free(gname_utf8); |
5137 g_free(alias_utf8); | 5146 g_free(alias_utf8); |
5138 | 5147 |
5139 return 1; | 5148 return 1; |
5140 } | 5149 } |