| 1318 struct yahoo_packet *pkt; |
1318 struct yahoo_packet *pkt; |
| 1319 char *encoded_msg = NULL; |
1319 char *encoded_msg = NULL; |
| 1320 const char *who = add_req->who; |
1320 const char *who = add_req->who; |
| 1321 |
1321 |
| 1322 if (msg && *msg) |
1322 if (msg && *msg) |
| 1323 encoded_msg = yahoo_string_encode(add_req->gc, msg, NULL); |
1323 encoded_msg = yahoo_string_encode(add_req->gc, msg, FALSE); |
| 1324 |
1324 |
| 1325 pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH_REQ_15, |
1325 pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH_REQ_15, |
| 1326 YAHOO_STATUS_AVAILABLE, yd->session_id); |
1326 YAHOO_STATUS_AVAILABLE, yd->session_id); |
| 1327 |
1327 |
| 1328 if (add_req->fed) { |
1328 if (add_req->fed) { |
| 1331 1, add_req->id, |
1331 1, add_req->id, |
| 1332 5, who, |
1332 5, who, |
| 1333 241, add_req->fed, |
1333 241, add_req->fed, |
| 1334 13, 2, |
1334 13, 2, |
| 1335 334, 0, |
1335 334, 0, |
| 1336 97, 1, |
1336 97, 1, /* UTF-8 */ |
| 1337 14, encoded_msg ? encoded_msg : ""); |
1337 14, encoded_msg ? encoded_msg : ""); |
| 1338 } |
1338 } |
| 1339 else { |
1339 else { |
| 1340 yahoo_packet_hash(pkt, "ssiiis", |
1340 yahoo_packet_hash(pkt, "ssiiis", |
| 1341 1, add_req->id, |
1341 1, add_req->id, |
| 1342 5, who, |
1342 5, who, |
| 1343 13, 2, |
1343 13, 2, |
| 1344 334, 0, |
1344 334, 0, |
| 1345 97, 1, |
1345 97, 1, /* UTF-8 */ |
| 1346 14, encoded_msg ? encoded_msg : ""); |
1346 14, encoded_msg ? encoded_msg : ""); |
| 1347 } |
1347 } |
| 1348 |
1348 |
| 1349 |
1349 |
| 1350 yahoo_packet_send_and_free(pkt, yd); |
1350 yahoo_packet_send_and_free(pkt, yd); |
| 4561 { |
4561 { |
| 4562 YahooData *yd = purple_connection_get_protocol_data(gc); |
4562 YahooData *yd = purple_connection_get_protocol_data(gc); |
| 4563 struct yahoo_packet *pkt = NULL; |
4563 struct yahoo_packet *pkt = NULL; |
| 4564 char *msg = yahoo_html_to_codes(what); |
4564 char *msg = yahoo_html_to_codes(what); |
| 4565 char *msg2; |
4565 char *msg2; |
| 4566 gboolean utf8 = TRUE; |
|
| 4567 PurpleWhiteboard *wb; |
4566 PurpleWhiteboard *wb; |
| 4568 int ret = 1; |
4567 int ret = 1; |
| 4569 const char *fed_who; |
4568 const char *fed_who; |
| 4570 gsize lenb = 0; |
4569 gsize lenb = 0; |
| 4571 glong lenc = 0; |
4570 glong lenc = 0; |
| 4572 struct yahoo_p2p_data *p2p_data; |
4571 struct yahoo_p2p_data *p2p_data; |
| 4573 YahooFederation fed = YAHOO_FEDERATION_NONE; |
4572 YahooFederation fed = YAHOO_FEDERATION_NONE; |
| 4574 msg2 = yahoo_string_encode(gc, msg, &utf8); |
4573 msg2 = yahoo_string_encode(gc, msg, TRUE); |
| 4575 |
4574 |
| 4576 if(msg2) { |
4575 if(msg2) { |
| 4577 lenb = strlen(msg2); |
4576 lenb = strlen(msg2); |
| 4578 lenc = g_utf8_strlen(msg2, -1); |
4577 lenc = g_utf8_strlen(msg2, -1); |
| 4579 |
4578 |
| 4652 } |
4651 } |
| 4653 yahoo_packet_hash(pkt, "ss", 1, purple_connection_get_display_name(gc), 5, fed_who); |
4652 yahoo_packet_hash(pkt, "ss", 1, purple_connection_get_display_name(gc), 5, fed_who); |
| 4654 if (fed) |
4653 if (fed) |
| 4655 yahoo_packet_hash_int(pkt, 241, fed); |
4654 yahoo_packet_hash_int(pkt, 241, fed); |
| 4656 |
4655 |
| 4657 if (utf8) |
4656 yahoo_packet_hash_str(pkt, 97, "1"); /* UTF-8 */ |
| 4658 yahoo_packet_hash_str(pkt, 97, "1"); |
|
| 4659 yahoo_packet_hash_str(pkt, 14, msg2); |
4657 yahoo_packet_hash_str(pkt, 14, msg2); |
| 4660 |
4658 |
| 4661 /* |
4659 /* |
| 4662 * IMVironment. |
4660 * IMVironment. |
| 4663 * |
4661 * |
| 4778 struct yahoo_packet *pkt; |
4776 struct yahoo_packet *pkt; |
| 4779 int old_status; |
4777 int old_status; |
| 4780 const char *msg = NULL; |
4778 const char *msg = NULL; |
| 4781 char *tmp = NULL; |
4779 char *tmp = NULL; |
| 4782 char *conv_msg = NULL; |
4780 char *conv_msg = NULL; |
| 4783 gboolean utf8 = TRUE; |
|
| 4784 |
4781 |
| 4785 if (!purple_status_is_active(status)) |
4782 if (!purple_status_is_active(status)) |
| 4786 return; |
4783 return; |
| 4787 |
4784 |
| 4788 gc = purple_account_get_connection(account); |
4785 gc = purple_account_get_connection(account); |
| 4795 if (yd->current_status == YAHOO_STATUS_CUSTOM) |
4792 if (yd->current_status == YAHOO_STATUS_CUSTOM) |
| 4796 { |
4793 { |
| 4797 msg = purple_status_get_attr_string(status, "message"); |
4794 msg = purple_status_get_attr_string(status, "message"); |
| 4798 |
4795 |
| 4799 if (purple_status_is_available(status)) { |
4796 if (purple_status_is_available(status)) { |
| 4800 tmp = yahoo_string_encode(gc, msg, &utf8); |
4797 tmp = yahoo_string_encode(gc, msg, TRUE); |
| 4801 conv_msg = purple_markup_strip_html(tmp); |
4798 conv_msg = purple_markup_strip_html(tmp); |
| 4802 g_free(tmp); |
4799 g_free(tmp); |
| 4803 } else { |
4800 } else { |
| 4804 if ((msg == NULL) || (*msg == '\0')) |
4801 if ((msg == NULL) || (*msg == '\0')) |
| 4805 msg = _("Away"); |
4802 msg = _("Away"); |
| 4806 tmp = yahoo_string_encode(gc, msg, &utf8); |
4803 tmp = yahoo_string_encode(gc, msg, TRUE); |
| 4807 conv_msg = purple_markup_strip_html(tmp); |
4804 conv_msg = purple_markup_strip_html(tmp); |
| 4808 g_free(tmp); |
4805 g_free(tmp); |
| 4809 } |
4806 } |
| 4810 } |
4807 } |
| 4811 |
4808 |
| 4819 |
4816 |
| 4820 pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, yd->session_id); |
4817 pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, yd->session_id); |
| 4821 yahoo_packet_hash_int(pkt, 10, yd->current_status); |
4818 yahoo_packet_hash_int(pkt, 10, yd->current_status); |
| 4822 |
4819 |
| 4823 if (yd->current_status == YAHOO_STATUS_CUSTOM) { |
4820 if (yd->current_status == YAHOO_STATUS_CUSTOM) { |
| 4824 yahoo_packet_hash_str(pkt, 97, utf8 ? "1" : 0); |
4821 yahoo_packet_hash_str(pkt, 97, "1"); /* UTF-8 */ |
| 4825 yahoo_packet_hash_str(pkt, 19, conv_msg); |
4822 yahoo_packet_hash_str(pkt, 19, conv_msg); |
| 4826 } else { |
4823 } else { |
| 4827 yahoo_packet_hash_str(pkt, 19, ""); |
4824 yahoo_packet_hash_str(pkt, 19, ""); |
| 4828 } |
4825 } |
| 4829 |
4826 |
| 4879 const char *tmp; |
4876 const char *tmp; |
| 4880 if (status == NULL) |
4877 if (status == NULL) |
| 4881 status = purple_presence_get_active_status(purple_account_get_presence(purple_connection_get_account(gc))); |
4878 status = purple_presence_get_active_status(purple_account_get_presence(purple_connection_get_account(gc))); |
| 4882 tmp = purple_status_get_attr_string(status, "message"); |
4879 tmp = purple_status_get_attr_string(status, "message"); |
| 4883 if (tmp != NULL) { |
4880 if (tmp != NULL) { |
| 4884 gboolean utf8 = TRUE; |
4881 msg = yahoo_string_encode(gc, tmp, TRUE); |
| 4885 msg = yahoo_string_encode(gc, tmp, &utf8); |
|
| 4886 msg2 = purple_markup_strip_html(msg); |
4882 msg2 = purple_markup_strip_html(msg); |
| 4887 yahoo_packet_hash_str(pkt, 97, utf8 ? "1" : 0); |
4883 yahoo_packet_hash_str(pkt, 97, "1"); /* UTF-8 */ |
| 4888 yahoo_packet_hash_str(pkt, 19, msg2); |
4884 yahoo_packet_hash_str(pkt, 19, msg2); |
| 4889 } else { |
4885 } else { |
| 4890 /* get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for |
4886 /* get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for |
| 4891 * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message */ |
4887 * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message */ |
| 4892 yahoo_packet_hash_str(pkt, 19, _("Away")); |
4888 yahoo_packet_hash_str(pkt, 19, _("Away")); |
| 5028 if (g) |
5024 if (g) |
| 5029 group = purple_group_get_name(g); |
5025 group = purple_group_get_name(g); |
| 5030 else |
5026 else |
| 5031 group = "Buddies"; |
5027 group = "Buddies"; |
| 5032 |
5028 |
| 5033 group2 = yahoo_string_encode(gc, group, NULL); |
5029 group2 = yahoo_string_encode(gc, group, FALSE); |
| 5034 pkt = yahoo_packet_new(YAHOO_SERVICE_ADDBUDDY, YAHOO_STATUS_AVAILABLE, yd->session_id); |
5030 pkt = yahoo_packet_new(YAHOO_SERVICE_ADDBUDDY, YAHOO_STATUS_AVAILABLE, yd->session_id); |
| 5035 if (fed) { |
5031 if (fed) { |
| 5036 yahoo_packet_hash(pkt, "sssssssisss", |
5032 yahoo_packet_hash(pkt, "sssssssisss", |
| 5037 14, "", |
5033 14, "", |
| 5038 65, group2, |
5034 65, group2, |
| 5039 97, "1", |
5035 97, "1", /* UTF-8 */ |
| 5040 1, purple_connection_get_display_name(gc), |
5036 1, purple_connection_get_display_name(gc), |
| 5041 302, "319", |
5037 302, "319", |
| 5042 300, "319", |
5038 300, "319", |
| 5043 7, fed_bname, |
5039 7, fed_bname, |
| 5044 241, fed, |
5040 241, fed, |
| 5099 if (remove) { |
5095 if (remove) { |
| 5100 g_hash_table_remove(yd->friends, bname); |
5096 g_hash_table_remove(yd->friends, bname); |
| 5101 f = NULL; /* f no longer valid - Just making it clear */ |
5097 f = NULL; /* f no longer valid - Just making it clear */ |
| 5102 } |
5098 } |
| 5103 |
5099 |
| 5104 cg = yahoo_string_encode(gc, gname, NULL); |
5100 cg = yahoo_string_encode(gc, gname, FALSE); |
| 5105 pkt = yahoo_packet_new(YAHOO_SERVICE_REMBUDDY, YAHOO_STATUS_AVAILABLE, yd->session_id); |
5101 pkt = yahoo_packet_new(YAHOO_SERVICE_REMBUDDY, YAHOO_STATUS_AVAILABLE, yd->session_id); |
| 5106 |
5102 |
| 5107 switch (fed) { |
5103 switch (fed) { |
| 5108 case YAHOO_FEDERATION_MSN: |
5104 case YAHOO_FEDERATION_MSN: |
| 5109 case YAHOO_FEDERATION_OCS: |
5105 case YAHOO_FEDERATION_OCS: |
| 5214 |
5210 |
| 5215 /* If old and new are the same, we would probably |
5211 /* If old and new are the same, we would probably |
| 5216 * end up deleting the buddy, which would be bad. |
5212 * end up deleting the buddy, which would be bad. |
| 5217 * This might happen because of the charset conversation. |
5213 * This might happen because of the charset conversation. |
| 5218 */ |
5214 */ |
| 5219 gpn = yahoo_string_encode(gc, new_group, NULL); |
5215 gpn = yahoo_string_encode(gc, new_group, FALSE); |
| 5220 gpo = yahoo_string_encode(gc, old_group, NULL); |
5216 gpo = yahoo_string_encode(gc, old_group, FALSE); |
| 5221 if (!strcmp(gpn, gpo)) { |
5217 if (!strcmp(gpn, gpo)) { |
| 5222 g_free(gpn); |
5218 g_free(gpn); |
| 5223 g_free(gpo); |
5219 g_free(gpo); |
| 5224 return; |
5220 return; |
| 5225 } |
5221 } |
| 5244 { |
5240 { |
| 5245 YahooData *yd = purple_connection_get_protocol_data(gc); |
5241 YahooData *yd = purple_connection_get_protocol_data(gc); |
| 5246 struct yahoo_packet *pkt; |
5242 struct yahoo_packet *pkt; |
| 5247 char *gpn, *gpo; |
5243 char *gpn, *gpo; |
| 5248 |
5244 |
| 5249 gpn = yahoo_string_encode(gc, purple_group_get_name(group), NULL); |
5245 gpn = yahoo_string_encode(gc, purple_group_get_name(group), FALSE); |
| 5250 gpo = yahoo_string_encode(gc, old_name, NULL); |
5246 gpo = yahoo_string_encode(gc, old_name, FALSE); |
| 5251 if (!strcmp(gpn, gpo)) { |
5247 if (!strcmp(gpn, gpo)) { |
| 5252 g_free(gpn); |
5248 g_free(gpn); |
| 5253 g_free(gpo); |
5249 g_free(gpo); |
| 5254 return; |
5250 return; |
| 5255 } |
5251 } |