comparison libpurple/protocols/yahoo/libymsg.c @ 32692:0f94ec89f0bc

merged from im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 26 Sep 2011 14:57:21 +0900
parents 9aee8493db7f 904686722499
children 4a34689eeb33
comparison
equal deleted inserted replaced
32438:55e678325bda 32692:0f94ec89f0bc
494 static void yahoo_process_list_15(PurpleConnection *gc, struct yahoo_packet *pkt) 494 static void yahoo_process_list_15(PurpleConnection *gc, struct yahoo_packet *pkt)
495 { 495 {
496 GSList *l = pkt->hash; 496 GSList *l = pkt->hash;
497 497
498 PurpleAccount *account = purple_connection_get_account(gc); 498 PurpleAccount *account = purple_connection_get_account(gc);
499 YahooData *yd = gc->proto_data; 499 YahooData *yd = purple_connection_get_protocol_data(gc);
500 GHashTable *ht; 500 GHashTable *ht;
501 char *norm_bud = NULL; 501 char *norm_bud = NULL;
502 char *temp = NULL; 502 char *temp = NULL;
503 YahooFriend *f = NULL; /* It's your friends. They're going to want you to share your StarBursts. */ 503 YahooFriend *f = NULL; /* It's your friends. They're going to want you to share your StarBursts. */
504 /* But what if you had no friends? */ 504 /* But what if you had no friends? */
636 GSList *l = pkt->hash; 636 GSList *l = pkt->hash;
637 gboolean export = FALSE; 637 gboolean export = FALSE;
638 gboolean got_serv_list = FALSE; 638 gboolean got_serv_list = FALSE;
639 YahooFriend *f = NULL; 639 YahooFriend *f = NULL;
640 PurpleAccount *account = purple_connection_get_account(gc); 640 PurpleAccount *account = purple_connection_get_account(gc);
641 YahooData *yd = gc->proto_data; 641 YahooData *yd = purple_connection_get_protocol_data(gc);
642 GHashTable *ht; 642 GHashTable *ht;
643 643
644 char **lines; 644 char **lines;
645 char **split; 645 char **split;
646 char **buddies; 646 char **buddies;
785 char *stat = NULL; 785 char *stat = NULL;
786 char *game = NULL; 786 char *game = NULL;
787 YahooFriend *f = NULL; 787 YahooFriend *f = NULL;
788 GSList *l = pkt->hash; 788 GSList *l = pkt->hash;
789 gint val_11 = 0; 789 gint val_11 = 0;
790 YahooData *yd = gc->proto_data; 790 YahooData *yd = purple_connection_get_protocol_data(gc);
791 YahooFederation fed = YAHOO_FEDERATION_NONE; 791 YahooFederation fed = YAHOO_FEDERATION_NONE;
792 792
793 account = purple_connection_get_account(gc); 793 account = purple_connection_get_account(gc);
794 794
795 while (l) { 795 while (l) {
897 struct _yahoo_im *sms = NULL; 897 struct _yahoo_im *sms = NULL;
898 YahooData *yd; 898 YahooData *yd;
899 char *server_msg = NULL; 899 char *server_msg = NULL;
900 char *m; 900 char *m;
901 901
902 yd = gc->proto_data; 902 yd = purple_connection_get_protocol_data(gc);
903 account = purple_connection_get_account(gc); 903 account = purple_connection_get_account(gc);
904 904
905 while (l != NULL) { 905 while (l != NULL) {
906 struct yahoo_pair *pair = l->data; 906 struct yahoo_pair *pair = l->data;
907 if (pair->key == 4) { 907 if (pair->key == 4) {
958 958
959 /* pkt_type is YAHOO_PKT_TYPE_SERVER if pkt arrives from yahoo server, YAHOO_PKT_TYPE_P2P if pkt arrives through p2p */ 959 /* pkt_type is YAHOO_PKT_TYPE_SERVER if pkt arrives from yahoo server, YAHOO_PKT_TYPE_P2P if pkt arrives through p2p */
960 static void yahoo_process_message(PurpleConnection *gc, struct yahoo_packet *pkt, yahoo_pkt_type pkt_type) 960 static void yahoo_process_message(PurpleConnection *gc, struct yahoo_packet *pkt, yahoo_pkt_type pkt_type)
961 { 961 {
962 PurpleAccount *account; 962 PurpleAccount *account;
963 YahooData *yd = gc->proto_data; 963 YahooData *yd = purple_connection_get_protocol_data(gc);
964 GSList *l = pkt->hash; 964 GSList *l = pkt->hash;
965 GSList *list = NULL; 965 GSList *list = NULL;
966 struct _yahoo_im *im = NULL; 966 struct _yahoo_im *im = NULL;
967 967
968 account = purple_connection_get_account(gc); 968 account = purple_connection_get_account(gc);
1059 if(wb == NULL) 1059 if(wb == NULL)
1060 { 1060 {
1061 doodle_session *ds; 1061 doodle_session *ds;
1062 wb = purple_whiteboard_create(account, im->from, 1062 wb = purple_whiteboard_create(account, im->from,
1063 DOODLE_STATE_REQUESTED); 1063 DOODLE_STATE_REQUESTED);
1064 ds = wb->proto_data; 1064 ds = purple_whiteboard_get_protocol_data(wb);
1065 ds->imv_key = g_strdup(pair->value); 1065 ds->imv_key = g_strdup(pair->value);
1066 1066
1067 yahoo_doodle_command_send_request(gc, im->from, pair->value); 1067 yahoo_doodle_command_send_request(gc, im->from, pair->value);
1068 yahoo_doodle_command_send_ready(gc, im->from, pair->value); 1068 yahoo_doodle_command_send_ready(gc, im->from, pair->value);
1069 } 1069 }
1200 static void 1200 static void
1201 yahoo_buddy_add_authorize_cb(gpointer data) 1201 yahoo_buddy_add_authorize_cb(gpointer data)
1202 { 1202 {
1203 struct yahoo_add_request *add_req = data; 1203 struct yahoo_add_request *add_req = data;
1204 struct yahoo_packet *pkt; 1204 struct yahoo_packet *pkt;
1205 YahooData *yd = add_req->gc->proto_data; 1205 YahooData *yd = purple_connection_get_protocol_data(add_req->gc);
1206 const char *who = add_req->who; 1206 const char *who = add_req->who;
1207 1207
1208 pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH_REQ_15, YAHOO_STATUS_AVAILABLE, yd->session_id); 1208 pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH_REQ_15, YAHOO_STATUS_AVAILABLE, yd->session_id);
1209 if (add_req->fed) { 1209 if (add_req->fed) {
1210 who += 4; 1210 who += 4;
1231 } 1231 }
1232 1232
1233 static void 1233 static void
1234 yahoo_buddy_add_deny_cb(struct yahoo_add_request *add_req, const char *msg) 1234 yahoo_buddy_add_deny_cb(struct yahoo_add_request *add_req, const char *msg)
1235 { 1235 {
1236 YahooData *yd = add_req->gc->proto_data; 1236 YahooData *yd = purple_connection_get_protocol_data(add_req->gc);
1237 struct yahoo_packet *pkt; 1237 struct yahoo_packet *pkt;
1238 char *encoded_msg = NULL; 1238 char *encoded_msg = NULL;
1239 const char *who = add_req->who; 1239 const char *who = add_req->who;
1240 1240
1241 if (msg && *msg) 1241 if (msg && *msg)
1293 } 1293 }
1294 1294
1295 static void yahoo_buddy_denied_our_add(PurpleConnection *gc, const char *who, const char *reason) 1295 static void yahoo_buddy_denied_our_add(PurpleConnection *gc, const char *who, const char *reason)
1296 { 1296 {
1297 char *notify_msg; 1297 char *notify_msg;
1298 YahooData *yd = gc->proto_data; 1298 YahooData *yd = purple_connection_get_protocol_data(gc);
1299 1299
1300 if (who == NULL) 1300 if (who == NULL)
1301 return; 1301 return;
1302 1302
1303 if (reason != NULL) { 1303 if (reason != NULL) {
1629 } 1629 }
1630 1630
1631 static void yahoo_process_mail(PurpleConnection *gc, struct yahoo_packet *pkt) 1631 static void yahoo_process_mail(PurpleConnection *gc, struct yahoo_packet *pkt)
1632 { 1632 {
1633 PurpleAccount *account = purple_connection_get_account(gc); 1633 PurpleAccount *account = purple_connection_get_account(gc);
1634 YahooData *yd = gc->proto_data; 1634 YahooData *yd = purple_connection_get_protocol_data(gc);
1635 const char *who = NULL; 1635 const char *who = NULL;
1636 const char *email = NULL; 1636 const char *email = NULL;
1637 const char *subj = NULL; 1637 const char *subj = NULL;
1638 const char *yahoo_mail_url = (yd->jp? YAHOOJP_MAIL_URL: YAHOO_MAIL_URL); 1638 const char *yahoo_mail_url = (yd->jp? YAHOOJP_MAIL_URL: YAHOO_MAIL_URL);
1639 int count = 0; 1639 int count = 0;
1713 *out = '\0'; 1713 *out = '\0';
1714 } 1714 }
1715 1715
1716 static void yahoo_auth16_stage3(PurpleConnection *gc, const char *crypt) 1716 static void yahoo_auth16_stage3(PurpleConnection *gc, const char *crypt)
1717 { 1717 {
1718 YahooData *yd = gc->proto_data; 1718 YahooData *yd = purple_connection_get_protocol_data(gc);
1719 PurpleAccount *account = purple_connection_get_account(gc); 1719 PurpleAccount *account = purple_connection_get_account(gc);
1720 const char *name = purple_normalize(account, purple_account_get_username(account)); 1720 const char *name = purple_normalize(account, purple_account_get_username(account));
1721 PurpleCipher *md5_cipher; 1721 PurpleCipher *md5_cipher;
1722 PurpleCipherContext *md5_ctx; 1722 PurpleCipherContext *md5_ctx;
1723 guchar md5_digest[16]; 1723 guchar md5_digest[16];
2018 char *url = NULL; 2018 char *url = NULL;
2019 gboolean yahoojp = yahoo_is_japan(account); 2019 gboolean yahoojp = yahoo_is_japan(account);
2020 gboolean proxy_ssl = purple_account_get_bool(account, "proxy_ssl", FALSE); 2020 gboolean proxy_ssl = purple_account_get_bool(account, "proxy_ssl", FALSE);
2021 2021
2022 url = g_strdup_printf(yahoojp ? YAHOOJP_LOGIN_URL : YAHOO_LOGIN_URL, token); 2022 url = g_strdup_printf(yahoojp ? YAHOOJP_LOGIN_URL : YAHOO_LOGIN_URL, token);
2023 url_data = purple_util_fetch_url_request_len( 2023 url_data = purple_util_fetch_url_request(
2024 proxy_ssl ? account : NULL, url, TRUE, YAHOO_CLIENT_USERAGENT, 2024 proxy_ssl ? account : NULL, url, TRUE, YAHOO_CLIENT_USERAGENT,
2025 TRUE, NULL, TRUE, -1, yahoo_auth16_stage2, auth_data); 2025 TRUE, NULL, TRUE, -1, yahoo_auth16_stage2, auth_data);
2026 if (url_data) 2026 if (url_data)
2027 yd->url_datas = g_slist_prepend(yd->url_datas, url_data); 2027 yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
2028 g_free(url); 2028 g_free(url);
2059 url = g_strdup_printf(yahoojp ? YAHOOJP_TOKEN_URL : YAHOO_TOKEN_URL, 2059 url = g_strdup_printf(yahoojp ? YAHOOJP_TOKEN_URL : YAHOO_TOKEN_URL,
2060 encoded_username, encoded_password, purple_url_encode(seed)); 2060 encoded_username, encoded_password, purple_url_encode(seed));
2061 g_free(encoded_password); 2061 g_free(encoded_password);
2062 g_free(encoded_username); 2062 g_free(encoded_username);
2063 2063
2064 url_data = purple_util_fetch_url_request_len( 2064 url_data = purple_util_fetch_url_request(
2065 proxy_ssl ? account : NULL, url, TRUE, 2065 proxy_ssl ? account : NULL, url, TRUE,
2066 YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, -1, 2066 YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, -1,
2067 yahoo_auth16_stage1_cb, auth_data); 2067 yahoo_auth16_stage1_cb, auth_data);
2068 if (url_data) 2068 if (url_data)
2069 yd->url_datas = g_slist_prepend(yd->url_datas, url_data); 2069 yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
2211 } 2211 }
2212 2212
2213 static void yahoo_process_authresp(PurpleConnection *gc, struct yahoo_packet *pkt) 2213 static void yahoo_process_authresp(PurpleConnection *gc, struct yahoo_packet *pkt)
2214 { 2214 {
2215 #ifdef TRY_WEBMESSENGER_LOGIN 2215 #ifdef TRY_WEBMESSENGER_LOGIN
2216 YahooData *yd = gc->proto_data; 2216 YahooData *yd = purple_connection_get_protocol_data(gc);
2217 #endif /* TRY_WEBMESSENGER_LOGIN */ 2217 #endif /* TRY_WEBMESSENGER_LOGIN */
2218 GSList *l = pkt->hash; 2218 GSList *l = pkt->hash;
2219 int err = 0; 2219 int err = 0;
2220 char *msg; 2220 char *msg;
2221 char *url = NULL; 2221 char *url = NULL;
2251 if (yd->fd >= 0) 2251 if (yd->fd >= 0)
2252 close(yd->fd); 2252 close(yd->fd);
2253 if (gc->inpa) 2253 if (gc->inpa)
2254 purple_input_remove(gc->inpa); 2254 purple_input_remove(gc->inpa);
2255 url_data = purple_util_fetch_url(WEBMESSENGER_URL, TRUE, 2255 url_data = purple_util_fetch_url(WEBMESSENGER_URL, TRUE,
2256 "Purple/" VERSION, FALSE, yahoo_login_page_cb, gc); 2256 "Purple/" VERSION, FALSE, -1, yahoo_login_page_cb, gc);
2257 if (url_data != NULL) 2257 if (url_data != NULL)
2258 yd->url_datas = g_slist_prepend(yd->url_datas, url_data); 2258 yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
2259 return; 2259 return;
2260 } 2260 }
2261 #endif /* TRY_WEBMESSENGER_LOGIN */ 2261 #endif /* TRY_WEBMESSENGER_LOGIN */
2304 char *group = NULL; 2304 char *group = NULL;
2305 char *decoded_group; 2305 char *decoded_group;
2306 char *buf; 2306 char *buf;
2307 YahooFriend *f; 2307 YahooFriend *f;
2308 GSList *l = pkt->hash; 2308 GSList *l = pkt->hash;
2309 YahooData *yd = gc->proto_data; 2309 YahooData *yd = purple_connection_get_protocol_data(gc);
2310 YahooFederation fed = YAHOO_FEDERATION_NONE; 2310 YahooFederation fed = YAHOO_FEDERATION_NONE;
2311 2311
2312 while (l) { 2312 while (l) {
2313 struct yahoo_pair *pair = l->data; 2313 struct yahoo_pair *pair = l->data;
2314 2314
2398 { 2398 {
2399 struct yahoo_p2p_data *p2p_data = value; 2399 struct yahoo_p2p_data *p2p_data = value;
2400 PurpleConnection *gc = user_data; 2400 PurpleConnection *gc = user_data;
2401 struct yahoo_packet *pkt_to_send; 2401 struct yahoo_packet *pkt_to_send;
2402 PurpleAccount *account; 2402 PurpleAccount *account;
2403 YahooData *yd = gc->proto_data; 2403 YahooData *yd = purple_connection_get_protocol_data(gc);
2404 2404
2405 account = purple_connection_get_account(gc); 2405 account = purple_connection_get_account(gc);
2406 2406
2407 pkt_to_send = yahoo_packet_new(YAHOO_SERVICE_P2PFILEXFER, YAHOO_STATUS_AVAILABLE, yd->session_id); 2407 pkt_to_send = yahoo_packet_new(YAHOO_SERVICE_P2PFILEXFER, YAHOO_STATUS_AVAILABLE, yd->session_id);
2408 yahoo_packet_hash(pkt_to_send, "ssisi", 2408 yahoo_packet_hash(pkt_to_send, "ssisi",
2417 } 2417 }
2418 2418
2419 static gboolean yahoo_p2p_keepalive(gpointer data) 2419 static gboolean yahoo_p2p_keepalive(gpointer data)
2420 { 2420 {
2421 PurpleConnection *gc = data; 2421 PurpleConnection *gc = data;
2422 YahooData *yd = gc->proto_data; 2422 YahooData *yd = purple_connection_get_protocol_data(gc);
2423 2423
2424 g_hash_table_foreach(yd->peers, yahoo_p2p_keepalive_cb, gc); 2424 g_hash_table_foreach(yd->peers, yahoo_p2p_keepalive_cb, gc);
2425 2425
2426 return TRUE; 2426 return TRUE;
2427 } 2427 }
2464 YahooFriend *f; 2464 YahooFriend *f;
2465 2465
2466 if(!(p2p_data = data)) 2466 if(!(p2p_data = data))
2467 return ; 2467 return ;
2468 2468
2469 yd = p2p_data->gc->proto_data; 2469 yd = purple_connection_get_protocol_data(p2p_data->gc);
2470 2470
2471 /* lets see whats in the packet */ 2471 /* lets see whats in the packet */
2472 while (l) { 2472 while (l) {
2473 struct yahoo_pair *pair = l->data; 2473 struct yahoo_pair *pair = l->data;
2474 2474
2549 struct yahoo_p2p_data *p2p_data; 2549 struct yahoo_p2p_data *p2p_data;
2550 YahooData *yd; 2550 YahooData *yd;
2551 2551
2552 if(!(p2p_data = data)) 2552 if(!(p2p_data = data))
2553 return ; 2553 return ;
2554 yd = p2p_data->gc->proto_data; 2554 yd = purple_connection_get_protocol_data(p2p_data->gc);
2555 2555
2556 len = read(source, buf, sizeof(buf)); 2556 len = read(source, buf, sizeof(buf));
2557 if ((len < 0) && ((errno == EAGAIN) || (errno == EWOULDBLOCK))) 2557 if ((len < 0) && ((errno == EAGAIN) || (errno == EWOULDBLOCK)))
2558 return ; /* No Worries*/ 2558 return ; /* No Worries*/
2559 else if (len <= 0) 2559 else if (len <= 0)
2621 struct yahoo_p2p_data *p2p_data; 2621 struct yahoo_p2p_data *p2p_data;
2622 YahooData *yd; 2622 YahooData *yd;
2623 2623
2624 if(!(p2p_data = data)) 2624 if(!(p2p_data = data))
2625 return ; 2625 return ;
2626 yd = p2p_data->gc->proto_data; 2626 yd = purple_connection_get_protocol_data(p2p_data->gc);
2627 2627
2628 acceptfd = accept(source, NULL, 0); 2628 acceptfd = accept(source, NULL, 0);
2629 if(acceptfd == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) 2629 if(acceptfd == -1 && (errno == EAGAIN || errno == EWOULDBLOCK))
2630 return; 2630 return;
2631 else if(acceptfd == -1) { 2631 else if(acceptfd == -1) {
2661 YahooData *yd; 2661 YahooData *yd;
2662 2662
2663 if(!(p2p_data = data)) 2663 if(!(p2p_data = data))
2664 return FALSE; 2664 return FALSE;
2665 2665
2666 yd = p2p_data->gc->proto_data; 2666 yd = purple_connection_get_protocol_data(p2p_data->gc);
2667 2667
2668 purple_debug_warning("yahoo","yahoo p2p server timeout, peer failed to connect\n"); 2668 purple_debug_warning("yahoo","yahoo p2p server timeout, peer failed to connect\n");
2669 yahoo_p2p_disconnect_destroy_data(data); 2669 yahoo_p2p_disconnect_destroy_data(data);
2670 purple_input_remove(yd->yahoo_p2p_server_watcher); 2670 purple_input_remove(yd->yahoo_p2p_server_watcher);
2671 yd->yahoo_p2p_server_watcher = 0; 2671 yd->yahoo_p2p_server_watcher = 0;
2682 YahooData *yd; 2682 YahooData *yd;
2683 2683
2684 if(!(p2p_data = data)) 2684 if(!(p2p_data = data))
2685 return ; 2685 return ;
2686 2686
2687 yd = p2p_data->gc->proto_data; 2687 yd = purple_connection_get_protocol_data(p2p_data->gc);
2688 yd->listen_data = NULL; 2688 yd->listen_data = NULL;
2689 2689
2690 if(listenfd == -1) { 2690 if(listenfd == -1) {
2691 purple_debug_warning("yahoo","p2p: error starting p2p server\n"); 2691 purple_debug_warning("yahoo","p2p: error starting p2p server\n");
2692 yahoo_p2p_disconnect_destroy_data(data); 2692 yahoo_p2p_disconnect_destroy_data(data);
2710 char temp_str[100]; 2710 char temp_str[100];
2711 gchar *base64_ip = NULL; 2711 gchar *base64_ip = NULL;
2712 YahooFriend *f; 2712 YahooFriend *f;
2713 struct yahoo_packet *pkt; 2713 struct yahoo_packet *pkt;
2714 PurpleAccount *account; 2714 PurpleAccount *account;
2715 YahooData *yd = gc->proto_data; 2715 YahooData *yd = purple_connection_get_protocol_data(gc);
2716 struct yahoo_p2p_data *p2p_data; 2716 struct yahoo_p2p_data *p2p_data;
2717 const char *norm_username; 2717 const char *norm_username;
2718 2718
2719 f = yahoo_friend_find(gc, who); 2719 f = yahoo_friend_find(gc, who);
2720 account = purple_connection_get_account(gc); 2720 account = purple_connection_get_account(gc);
2774 /* FIXME: If the port is already used, purple_network_listener returns NULL and old listener won't be canceled 2774 /* FIXME: If the port is already used, purple_network_listener returns NULL and old listener won't be canceled
2775 * in yahoo_close function. */ 2775 * in yahoo_close function. */
2776 if (yd->listen_data) 2776 if (yd->listen_data)
2777 purple_debug_warning("yahoo","p2p: Failed to create p2p server - server already exists\n"); 2777 purple_debug_warning("yahoo","p2p: Failed to create p2p server - server already exists\n");
2778 else { 2778 else {
2779 yd->listen_data = purple_network_listen(YAHOO_PAGER_PORT_P2P, SOCK_STREAM, yahoo_p2p_server_listen_cb, p2p_data); 2779 yd->listen_data = purple_network_listen(YAHOO_PAGER_PORT_P2P, AF_UNSPEC, SOCK_STREAM, TRUE, yahoo_p2p_server_listen_cb, p2p_data);
2780 if (yd->listen_data == NULL) 2780 if (yd->listen_data == NULL)
2781 purple_debug_warning("yahoo","p2p: Failed to created p2p server\n"); 2781 purple_debug_warning("yahoo","p2p: Failed to created p2p server\n");
2782 } 2782 }
2783 2783
2784 g_free(base64_ip); 2784 g_free(base64_ip);
2791 struct yahoo_packet *pkt_to_send; 2791 struct yahoo_packet *pkt_to_send;
2792 PurpleAccount *account; 2792 PurpleAccount *account;
2793 YahooData *yd; 2793 YahooData *yd;
2794 2794
2795 p2p_data = data; 2795 p2p_data = data;
2796 yd = p2p_data->gc->proto_data; 2796 yd = purple_connection_get_protocol_data(p2p_data->gc);
2797 2797
2798 if(error_message != NULL) { 2798 if(error_message != NULL) {
2799 purple_debug_warning("yahoo","p2p: %s\n",error_message); 2799 purple_debug_warning("yahoo","p2p: %s\n",error_message);
2800 yahoo_send_p2p_pkt(p2p_data->gc, p2p_data->host_username, 2);/* send p2p init packet with val_13=2 */ 2800 yahoo_send_p2p_pkt(p2p_data->gc, p2p_data->host_username, 2);/* send p2p init packet with val_13=2 */
2801 2801
3136 } 3136 }
3137 3137
3138 static void yahoo_pending(gpointer data, gint source, PurpleInputCondition cond) 3138 static void yahoo_pending(gpointer data, gint source, PurpleInputCondition cond)
3139 { 3139 {
3140 PurpleConnection *gc = data; 3140 PurpleConnection *gc = data;
3141 YahooData *yd = gc->proto_data; 3141 YahooData *yd = purple_connection_get_protocol_data(gc);
3142 char buf[1024]; 3142 char buf[1024];
3143 int len; 3143 int len;
3144 3144
3145 len = read(yd->fd, buf, sizeof(buf)); 3145 len = read(yd->fd, buf, sizeof(buf));
3146 3146
3244 purple_connection_error(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); 3244 purple_connection_error(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp);
3245 g_free(tmp); 3245 g_free(tmp);
3246 return; 3246 return;
3247 } 3247 }
3248 3248
3249 yd = gc->proto_data; 3249 yd = purple_connection_get_protocol_data(gc);
3250 yd->fd = source; 3250 yd->fd = source;
3251 3251
3252 pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH, yd->current_status, yd->session_id); 3252 pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH, yd->current_status, yd->session_id);
3253 3253
3254 yahoo_packet_hash_str(pkt, 1, purple_normalize(gc->account, purple_account_get_username(purple_connection_get_account(gc)))); 3254 yahoo_packet_hash_str(pkt, 1, purple_normalize(gc->account, purple_account_get_username(purple_connection_get_account(gc))));
3270 purple_connection_error(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); 3270 purple_connection_error(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp);
3271 g_free(tmp); 3271 g_free(tmp);
3272 return; 3272 return;
3273 } 3273 }
3274 3274
3275 yd = gc->proto_data; 3275 yd = purple_connection_get_protocol_data(gc);
3276 yd->fd = source; 3276 yd->fd = source;
3277 3277
3278 pkt = yahoo_packet_new(YAHOO_SERVICE_WEBLOGIN, YAHOO_STATUS_WEBLOGIN, yd->session_id); 3278 pkt = yahoo_packet_new(YAHOO_SERVICE_WEBLOGIN, YAHOO_STATUS_WEBLOGIN, yd->session_id);
3279 3279
3280 yahoo_packet_hash(pkt, "sss", 0, 3280 yahoo_packet_hash(pkt, "sss", 0,
3289 3289
3290 static void yahoo_web_pending(gpointer data, gint source, PurpleInputCondition cond) 3290 static void yahoo_web_pending(gpointer data, gint source, PurpleInputCondition cond)
3291 { 3291 {
3292 PurpleConnection *gc = data; 3292 PurpleConnection *gc = data;
3293 PurpleAccount *account = purple_connection_get_account(gc); 3293 PurpleAccount *account = purple_connection_get_account(gc);
3294 YahooData *yd = gc->proto_data; 3294 YahooData *yd = purple_connection_get_protocol_data(gc);
3295 char bufread[2048], *i = bufread, *buf = bufread; 3295 char bufread[2048], *i = bufread, *buf = bufread;
3296 int len; 3296 int len;
3297 GString *s; 3297 GString *s;
3298 3298
3299 len = read(source, bufread, sizeof(bufread) - 1); 3299 len = read(source, bufread, sizeof(bufread) - 1);
3368 PurpleConnection *gc; 3368 PurpleConnection *gc;
3369 YahooData *yd; 3369 YahooData *yd;
3370 int written, remaining; 3370 int written, remaining;
3371 3371
3372 gc = data; 3372 gc = data;
3373 yd = gc->proto_data; 3373 yd = purple_connection_get_protocol_data(gc);
3374 3374
3375 remaining = strlen(yd->auth) - yd->auth_written; 3375 remaining = strlen(yd->auth) - yd->auth_written;
3376 written = write(source, yd->auth + yd->auth_written, remaining); 3376 written = write(source, yd->auth + yd->auth_written, remaining);
3377 3377
3378 if (written < 0 && errno == EAGAIN) 3378 if (written < 0 && errno == EAGAIN)
3478 yahoo_login_page_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, 3478 yahoo_login_page_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
3479 const gchar *url_text, size_t len, const gchar *error_message) 3479 const gchar *url_text, size_t len, const gchar *error_message)
3480 { 3480 {
3481 PurpleConnection *gc = (PurpleConnection *)user_data; 3481 PurpleConnection *gc = (PurpleConnection *)user_data;
3482 PurpleAccount *account = purple_connection_get_account(gc); 3482 PurpleAccount *account = purple_connection_get_account(gc);
3483 YahooData *yd = gc->proto_data; 3483 YahooData *yd = purple_connection_get_protocol_data(gc);
3484 const char *sn = purple_account_get_username(account); 3484 const char *sn = purple_account_get_username(account);
3485 const char *pass = purple_connection_get_password(gc); 3485 const char *pass = purple_connection_get_password(gc);
3486 GHashTable *hash = yahoo_login_page_hash(url_text, len); 3486 GHashTable *hash = yahoo_login_page_hash(url_text, len);
3487 GString *url = g_string_new("GET http://login.yahoo.com/config/login?login="); 3487 GString *url = g_string_new("GET http://login.yahoo.com/config/login?login=");
3488 char md5[33], *hashp = md5, *chal; 3488 char md5[33], *hashp = md5, *chal;
3675 g_free(cs_server); 3675 g_free(cs_server);
3676 } 3676 }
3677 3677
3678 void yahoo_login(PurpleAccount *account) { 3678 void yahoo_login(PurpleAccount *account) {
3679 PurpleConnection *gc = purple_account_get_connection(account); 3679 PurpleConnection *gc = purple_account_get_connection(account);
3680 YahooData *yd = gc->proto_data = g_new0(YahooData, 1); 3680 YahooData *yd = g_new0(YahooData, 1);
3681 PurpleStatus *status = purple_account_get_active_status(account); 3681 PurpleStatus *status = purple_account_get_active_status(account);
3682 gboolean use_whole_url = yahoo_account_use_http_proxy(gc); 3682 gboolean use_whole_url = yahoo_account_use_http_proxy(gc);
3683 gboolean proxy_ssl = purple_account_get_bool(account, "proxy_ssl", FALSE); 3683 gboolean proxy_ssl = purple_account_get_bool(account, "proxy_ssl", FALSE);
3684 PurpleUtilFetchUrlData *url_data; 3684 PurpleUtilFetchUrlData *url_data;
3685 3685
3686 purple_connection_set_protocol_data(gc, yd);
3686 gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC; 3687 gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_NO_URLDESC;
3687 3688
3688 purple_connection_update_progress(gc, _("Connecting"), 1, 2); 3689 purple_connection_update_progress(gc, _("Connecting"), 1, 2);
3689 3690
3690 purple_connection_set_display_name(gc, purple_account_get_username(account)); 3691 purple_connection_set_display_name(gc, purple_account_get_username(account));
3712 3713
3713 yahoo_picture_check(account); 3714 yahoo_picture_check(account);
3714 3715
3715 /* Get the pager server. Actually start connecting in the callback since we 3716 /* Get the pager server. Actually start connecting in the callback since we
3716 * must have the contents of the HTTP response to proceed. */ 3717 * must have the contents of the HTTP response to proceed. */
3717 url_data = purple_util_fetch_url_request_len( 3718 url_data = purple_util_fetch_url_request(
3718 proxy_ssl ? purple_connection_get_account(gc) : NULL, 3719 proxy_ssl ? purple_connection_get_account(gc) : NULL,
3719 yd->jp ? YAHOOJP_PAGER_HOST_REQ_URL : YAHOO_PAGER_HOST_REQ_URL, 3720 yd->jp ? YAHOOJP_PAGER_HOST_REQ_URL : YAHOO_PAGER_HOST_REQ_URL,
3720 use_whole_url ? TRUE : FALSE, 3721 use_whole_url ? TRUE : FALSE,
3721 YAHOO_CLIENT_USERAGENT, FALSE, NULL, FALSE, -1, 3722 YAHOO_CLIENT_USERAGENT, FALSE, NULL, FALSE, -1,
3722 yahoo_got_pager_server, yd); 3723 yahoo_got_pager_server, yd);
3725 3726
3726 return; 3727 return;
3727 } 3728 }
3728 3729
3729 void yahoo_close(PurpleConnection *gc) { 3730 void yahoo_close(PurpleConnection *gc) {
3730 YahooData *yd = (YahooData *)gc->proto_data; 3731 YahooData *yd = purple_connection_get_protocol_data(gc);
3731 GSList *l; 3732 GSList *l;
3732 3733
3733 if (gc->inpa) 3734 if (gc->inpa)
3734 purple_input_remove(gc->inpa); 3735 purple_input_remove(gc->inpa);
3735 3736
3814 yahoo_personal_details_reset(&yd->ypd, TRUE); 3815 yahoo_personal_details_reset(&yd->ypd, TRUE);
3815 3816
3816 g_free(yd->current_list15_grp); 3817 g_free(yd->current_list15_grp);
3817 3818
3818 g_free(yd); 3819 g_free(yd);
3819 gc->proto_data = NULL; 3820 purple_connection_set_protocol_data(gc, NULL);
3820 } 3821 }
3821 3822
3822 const char *yahoo_list_icon(PurpleAccount *a, PurpleBuddy *b) 3823 const char *yahoo_list_icon(PurpleAccount *a, PurpleBuddy *b)
3823 { 3824 {
3824 return "yahoo"; 3825 return "yahoo";
3831 YahooFriend *f; 3832 YahooFriend *f;
3832 PurplePresence *presence; 3833 PurplePresence *presence;
3833 3834
3834 if (!b || !(account = purple_buddy_get_account(b)) || 3835 if (!b || !(account = purple_buddy_get_account(b)) ||
3835 !(gc = purple_account_get_connection(account)) || 3836 !(gc = purple_account_get_connection(account)) ||
3836 !gc->proto_data) 3837 !purple_connection_get_protocol_data(gc))
3837 return NULL; 3838 return NULL;
3838 3839
3839 f = yahoo_friend_find(gc, purple_buddy_get_name(b)); 3840 f = yahoo_friend_find(gc, purple_buddy_get_name(b));
3840 if (!f) { 3841 if (!f) {
3841 return "not-authorized"; 3842 return "not-authorized";
3896 3897
3897 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); 3898 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
3898 3899
3899 buddy = (PurpleBuddy *) node; 3900 buddy = (PurpleBuddy *) node;
3900 gc = purple_account_get_connection(purple_buddy_get_account(buddy)); 3901 gc = purple_account_get_connection(purple_buddy_get_account(buddy));
3901 yd = gc->proto_data; 3902 yd = purple_connection_get_protocol_data(gc);
3902 id = yd->conf_id; 3903 id = yd->conf_id;
3903 3904
3904 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); 3905 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
3905 g_hash_table_replace(components, g_strdup("room"), 3906 g_hash_table_replace(components, g_strdup("room"),
3906 g_strdup_printf("%s-%d", purple_connection_get_display_name(gc), id)); 3907 g_strdup_printf("%s-%d", purple_connection_get_display_name(gc), id));
4059 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); 4060 g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
4060 4061
4061 buddy = (PurpleBuddy *) node; 4062 buddy = (PurpleBuddy *) node;
4062 gc = purple_account_get_connection(purple_buddy_get_account(buddy)); 4063 gc = purple_account_get_connection(purple_buddy_get_account(buddy));
4063 4064
4064 yahoo_add_buddy(gc, buddy, NULL); 4065 yahoo_add_buddy(gc, buddy, NULL, NULL);
4065 } 4066 }
4066 4067
4067 4068
4068 static void yahoo_chat_goto_menu(PurpleBlistNode *node, gpointer data) 4069 static void yahoo_chat_goto_menu(PurpleBlistNode *node, gpointer data)
4069 { 4070 {
4079 } 4080 }
4080 4081
4081 static GList *build_presence_submenu(YahooFriend *f, PurpleConnection *gc) { 4082 static GList *build_presence_submenu(YahooFriend *f, PurpleConnection *gc) {
4082 GList *m = NULL; 4083 GList *m = NULL;
4083 PurpleMenuAction *act; 4084 PurpleMenuAction *act;
4084 YahooData *yd = (YahooData *) gc->proto_data; 4085 YahooData *yd = purple_connection_get_protocol_data(gc);
4085 4086
4086 if (yd->current_status == YAHOO_STATUS_INVISIBLE) { 4087 if (yd->current_status == YAHOO_STATUS_INVISIBLE) {
4087 if (f->presence != YAHOO_PRESENCE_ONLINE) { 4088 if (f->presence != YAHOO_PRESENCE_ONLINE) {
4088 act = purple_menu_action_new(_("Appear Online"), 4089 act = purple_menu_action_new(_("Appear Online"),
4089 PURPLE_CALLBACK(yahoo_presence_settings), 4090 PURPLE_CALLBACK(yahoo_presence_settings),
4139 { 4140 {
4140 GList *m = NULL; 4141 GList *m = NULL;
4141 PurpleMenuAction *act; 4142 PurpleMenuAction *act;
4142 4143
4143 PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy)); 4144 PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy));
4144 YahooData *yd = gc->proto_data; 4145 YahooData *yd = purple_connection_get_protocol_data(gc);
4145 static char buf2[1024]; 4146 static char buf2[1024];
4146 YahooFriend *f; 4147 YahooFriend *f;
4147 4148
4148 f = yahoo_friend_find(gc, purple_buddy_get_name(buddy)); 4149 f = yahoo_friend_find(gc, purple_buddy_get_name(buddy));
4149 4150
4222 } 4223 }
4223 } 4224 }
4224 4225
4225 static void yahoo_act_id(PurpleConnection *gc, PurpleRequestFields *fields) 4226 static void yahoo_act_id(PurpleConnection *gc, PurpleRequestFields *fields)
4226 { 4227 {
4227 YahooData *yd = gc->proto_data; 4228 YahooData *yd = purple_connection_get_protocol_data(gc);
4228 const char *name = yd->profiles[purple_request_fields_get_choice(fields, "id")]; 4229 const char *name = yd->profiles[purple_request_fields_get_choice(fields, "id")];
4229 4230
4230 struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_IDACT, YAHOO_STATUS_AVAILABLE, yd->session_id); 4231 struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_IDACT, YAHOO_STATUS_AVAILABLE, yd->session_id);
4231 yahoo_packet_hash_str(pkt, 3, name); 4232 yahoo_packet_hash_str(pkt, 3, name);
4232 yahoo_packet_send_and_free(pkt, yd); 4233 yahoo_packet_send_and_free(pkt, yd);
4239 const gchar *token, size_t len, const gchar *error_message) 4240 const gchar *token, size_t len, const gchar *error_message)
4240 { 4241 {
4241 PurpleConnection *gc = user_data; 4242 PurpleConnection *gc = user_data;
4242 gboolean set_cookie = FALSE; 4243 gboolean set_cookie = FALSE;
4243 gchar *url; 4244 gchar *url;
4244 YahooData *yd = gc->proto_data; 4245 YahooData *yd = purple_connection_get_protocol_data(gc);
4245 4246
4246 g_return_if_fail(PURPLE_CONNECTION_IS_VALID(gc)); 4247 g_return_if_fail(PURPLE_CONNECTION_IS_VALID(gc));
4247 4248
4248 yd->url_datas = g_slist_remove(yd->url_datas, url_data); 4249 yd->url_datas = g_slist_remove(yd->url_datas, url_data);
4249 4250
4275 { 4276 {
4276 /* Setup a cookie that can be used by the browser */ 4277 /* Setup a cookie that can be used by the browser */
4277 /* XXX I have no idea how this will work with Yahoo! Japan. */ 4278 /* XXX I have no idea how this will work with Yahoo! Japan. */
4278 4279
4279 PurpleConnection *gc = action->context; 4280 PurpleConnection *gc = action->context;
4280 YahooData *yd = gc->proto_data; 4281 YahooData *yd = purple_connection_get_protocol_data(gc);
4281 4282
4282 PurpleUtilFetchUrlData *url_data; 4283 PurpleUtilFetchUrlData *url_data;
4283 const char* base_url = "http://login.yahoo.com"; 4284 const char* base_url = "http://login.yahoo.com";
4284 /* use whole URL if using HTTP Proxy */ 4285 /* use whole URL if using HTTP Proxy */
4285 gboolean use_whole_url = yahoo_account_use_http_proxy(gc); 4286 gboolean use_whole_url = yahoo_account_use_http_proxy(gc);
4290 "Host: login.yahoo.com\r\n" 4291 "Host: login.yahoo.com\r\n"
4291 "Content-Length: 0\r\n\r\n", 4292 "Content-Length: 0\r\n\r\n",
4292 use_whole_url ? base_url : "", 4293 use_whole_url ? base_url : "",
4293 yd->cookie_t, yd->cookie_y); 4294 yd->cookie_t, yd->cookie_y);
4294 4295
4295 url_data = purple_util_fetch_url_request_len( 4296 url_data = purple_util_fetch_url_request(
4296 purple_connection_get_account(gc), base_url, use_whole_url, 4297 purple_connection_get_account(gc), base_url, use_whole_url,
4297 YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, -1, 4298 YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, -1,
4298 yahoo_get_inbox_token_cb, gc); 4299 yahoo_get_inbox_token_cb, gc);
4299 4300
4300 g_free(request); 4301 g_free(request);
4389 static void yahoo_get_sms_carrier_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, 4390 static void yahoo_get_sms_carrier_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
4390 const gchar *webdata, size_t len, const gchar *error_message) 4391 const gchar *webdata, size_t len, const gchar *error_message)
4391 { 4392 {
4392 struct yahoo_sms_carrier_cb_data *sms_cb_data = user_data; 4393 struct yahoo_sms_carrier_cb_data *sms_cb_data = user_data;
4393 PurpleConnection *gc = sms_cb_data->gc; 4394 PurpleConnection *gc = sms_cb_data->gc;
4394 YahooData *yd = gc->proto_data; 4395 YahooData *yd = purple_connection_get_protocol_data(gc);
4395 char *status = NULL; 4396 char *status = NULL;
4396 char *carrier = NULL; 4397 char *carrier = NULL;
4397 PurpleAccount *account = purple_connection_get_account(gc); 4398 PurpleAccount *account = purple_connection_get_account(gc);
4398 PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, sms_cb_data->who, account); 4399 PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, sms_cb_data->who, account);
4399 4400
4444 } 4445 }
4445 } 4446 }
4446 4447
4447 static void yahoo_get_sms_carrier(PurpleConnection *gc, gpointer data) 4448 static void yahoo_get_sms_carrier(PurpleConnection *gc, gpointer data)
4448 { 4449 {
4449 YahooData *yd = gc->proto_data; 4450 YahooData *yd = purple_connection_get_protocol_data(gc);
4450 PurpleUtilFetchUrlData *url_data; 4451 PurpleUtilFetchUrlData *url_data;
4451 struct yahoo_sms_carrier_cb_data *sms_cb_data; 4452 struct yahoo_sms_carrier_cb_data *sms_cb_data;
4452 char *validate_request_str = NULL; 4453 char *validate_request_str = NULL;
4453 char *request = NULL; 4454 char *request = NULL;
4454 gboolean use_whole_url = FALSE; 4455 gboolean use_whole_url = FALSE;
4479 "Content-Length: %" G_GSIZE_FORMAT "\r\n" 4480 "Content-Length: %" G_GSIZE_FORMAT "\r\n"
4480 "Cache-Control: no-cache\r\n\r\n%s", 4481 "Cache-Control: no-cache\r\n\r\n%s",
4481 YAHOO_CLIENT_VERSION, yd->cookie_t, yd->cookie_y, strlen(validate_request_str), validate_request_str); 4482 YAHOO_CLIENT_VERSION, yd->cookie_t, yd->cookie_y, strlen(validate_request_str), validate_request_str);
4482 4483
4483 /* use whole URL if using HTTP Proxy */ 4484 /* use whole URL if using HTTP Proxy */
4484 if ((gc->account->proxy_info) && (gc->account->proxy_info->type == PURPLE_PROXY_HTTP)) 4485 if ((gc->account->proxy_info) && (purple_proxy_info_get_type(gc->account->proxy_info) == PURPLE_PROXY_HTTP))
4485 use_whole_url = TRUE; 4486 use_whole_url = TRUE;
4486 4487
4487 url_data = purple_util_fetch_url_request_len( 4488 url_data = purple_util_fetch_url_request(
4488 purple_connection_get_account(gc), YAHOO_SMS_CARRIER_URL, use_whole_url, 4489 purple_connection_get_account(gc), YAHOO_SMS_CARRIER_URL, use_whole_url,
4489 YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, -1, 4490 YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, -1,
4490 yahoo_get_sms_carrier_cb, data); 4491 yahoo_get_sms_carrier_cb, data);
4491 4492
4492 g_free(request); 4493 g_free(request);
4504 } 4505 }
4505 } 4506 }
4506 4507
4507 int yahoo_send_im(PurpleConnection *gc, const char *who, const char *what, PurpleMessageFlags flags) 4508 int yahoo_send_im(PurpleConnection *gc, const char *who, const char *what, PurpleMessageFlags flags)
4508 { 4509 {
4509 YahooData *yd = gc->proto_data; 4510 YahooData *yd = purple_connection_get_protocol_data(gc);
4510 struct yahoo_packet *pkt = NULL; 4511 struct yahoo_packet *pkt = NULL;
4511 char *msg = yahoo_html_to_codes(what); 4512 char *msg = yahoo_html_to_codes(what);
4512 char *msg2; 4513 char *msg2;
4513 gboolean utf8 = TRUE; 4514 gboolean utf8 = TRUE;
4514 PurpleWhiteboard *wb; 4515 PurpleWhiteboard *wb;
4661 return ret; 4662 return ret;
4662 } 4663 }
4663 4664
4664 unsigned int yahoo_send_typing(PurpleConnection *gc, const char *who, PurpleTypingState state) 4665 unsigned int yahoo_send_typing(PurpleConnection *gc, const char *who, PurpleTypingState state)
4665 { 4666 {
4666 YahooData *yd = gc->proto_data; 4667 YahooData *yd = purple_connection_get_protocol_data(gc);
4667 struct yahoo_p2p_data *p2p_data; 4668 struct yahoo_p2p_data *p2p_data;
4668 YahooFederation fed = YAHOO_FEDERATION_NONE; 4669 YahooFederation fed = YAHOO_FEDERATION_NONE;
4669 struct yahoo_packet *pkt = NULL; 4670 struct yahoo_packet *pkt = NULL;
4670 4671
4671 fed = yahoo_get_federation_from_name(who); 4672 fed = yahoo_get_federation_from_name(who);
4732 if (!purple_status_is_active(status)) 4733 if (!purple_status_is_active(status))
4733 return; 4734 return;
4734 4735
4735 gc = purple_account_get_connection(account); 4736 gc = purple_account_get_connection(account);
4736 presence = purple_status_get_presence(status); 4737 presence = purple_status_get_presence(status);
4737 yd = (YahooData *)gc->proto_data; 4738 yd = purple_connection_get_protocol_data(gc);
4738 old_status = yd->current_status; 4739 old_status = yd->current_status;
4739 4740
4740 yd->current_status = get_yahoo_status_from_purple_status(status); 4741 yd->current_status = get_yahoo_status_from_purple_status(status);
4741 4742
4742 if (yd->current_status == YAHOO_STATUS_CUSTOM) 4743 if (yd->current_status == YAHOO_STATUS_CUSTOM)
4798 } 4799 }
4799 } 4800 }
4800 4801
4801 void yahoo_set_idle(PurpleConnection *gc, int idle) 4802 void yahoo_set_idle(PurpleConnection *gc, int idle)
4802 { 4803 {
4803 YahooData *yd = gc->proto_data; 4804 YahooData *yd = purple_connection_get_protocol_data(gc);
4804 struct yahoo_packet *pkt = NULL; 4805 struct yahoo_packet *pkt = NULL;
4805 char *msg = NULL, *msg2 = NULL; 4806 char *msg = NULL, *msg2 = NULL;
4806 PurpleStatus *status = NULL; 4807 PurpleStatus *status = NULL;
4807 gboolean invisible = FALSE; 4808 gboolean invisible = FALSE;
4808 gboolean utf8 = TRUE; 4809 gboolean utf8 = TRUE;
4918 } 4919 }
4919 4920
4920 void yahoo_keepalive(PurpleConnection *gc) 4921 void yahoo_keepalive(PurpleConnection *gc)
4921 { 4922 {
4922 struct yahoo_packet *pkt; 4923 struct yahoo_packet *pkt;
4923 YahooData *yd = gc->proto_data; 4924 YahooData *yd = purple_connection_get_protocol_data(gc);
4924 time_t now = time(NULL); 4925 time_t now = time(NULL);
4925 4926
4926 /* We're only allowed to send a ping once an hour or the servers will boot us */ 4927 /* We're only allowed to send a ping once an hour or the servers will boot us */
4927 if ((now - yd->last_ping) >= PING_TIMEOUT) { 4928 if ((now - yd->last_ping) >= PING_TIMEOUT) {
4928 yd->last_ping = now; 4929 yd->last_ping = now;
4949 yahoo_packet_send_and_free(pkt, yd); 4950 yahoo_packet_send_and_free(pkt, yd);
4950 } 4951 }
4951 4952
4952 } 4953 }
4953 4954
4954 void yahoo_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *g) 4955 void yahoo_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *g, const char *message)
4955 { 4956 {
4956 YahooData *yd = (YahooData *)gc->proto_data; 4957 YahooData *yd = purple_connection_get_protocol_data(gc);
4957 struct yahoo_packet *pkt; 4958 struct yahoo_packet *pkt;
4958 const char *group = NULL; 4959 const char *group = NULL;
4959 char *group2; 4960 char *group2;
4960 const char *bname; 4961 const char *bname;
4961 const char *fed_bname; 4962 const char *fed_bname;
5014 g_free(group2); 5015 g_free(group2);
5015 } 5016 }
5016 5017
5017 void yahoo_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) 5018 void yahoo_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
5018 { 5019 {
5019 YahooData *yd = (YahooData *)gc->proto_data; 5020 YahooData *yd = purple_connection_get_protocol_data(gc);
5020 struct yahoo_packet *pkt; 5021 struct yahoo_packet *pkt;
5021 GSList *buddies, *l; 5022 GSList *buddies, *l;
5022 PurpleGroup *g; 5023 PurpleGroup *g;
5023 gboolean remove = TRUE; 5024 gboolean remove = TRUE;
5024 char *cg; 5025 char *cg;
5070 yahoo_packet_send_and_free(pkt, yd); 5071 yahoo_packet_send_and_free(pkt, yd);
5071 g_free(cg); 5072 g_free(cg);
5072 } 5073 }
5073 5074
5074 void yahoo_add_deny(PurpleConnection *gc, const char *who) { 5075 void yahoo_add_deny(PurpleConnection *gc, const char *who) {
5075 YahooData *yd = (YahooData *)gc->proto_data; 5076 YahooData *yd = purple_connection_get_protocol_data(gc);
5076 struct yahoo_packet *pkt; 5077 struct yahoo_packet *pkt;
5077 YahooFederation fed = YAHOO_FEDERATION_NONE; 5078 YahooFederation fed = YAHOO_FEDERATION_NONE;
5078 5079
5079 if (!yd->logged_in) 5080 if (!yd->logged_in)
5080 return; 5081 return;
5093 5094
5094 yahoo_packet_send_and_free(pkt, yd); 5095 yahoo_packet_send_and_free(pkt, yd);
5095 } 5096 }
5096 5097
5097 void yahoo_rem_deny(PurpleConnection *gc, const char *who) { 5098 void yahoo_rem_deny(PurpleConnection *gc, const char *who) {
5098 YahooData *yd = (YahooData *)gc->proto_data; 5099 YahooData *yd = purple_connection_get_protocol_data(gc);
5099 struct yahoo_packet *pkt; 5100 struct yahoo_packet *pkt;
5100 YahooFederation fed = YAHOO_FEDERATION_NONE; 5101 YahooFederation fed = YAHOO_FEDERATION_NONE;
5101 5102
5102 if (!yd->logged_in) 5103 if (!yd->logged_in)
5103 return; 5104 return;
5141 } 5142 }
5142 5143
5143 void yahoo_change_buddys_group(PurpleConnection *gc, const char *who, 5144 void yahoo_change_buddys_group(PurpleConnection *gc, const char *who,
5144 const char *old_group, const char *new_group) 5145 const char *old_group, const char *new_group)
5145 { 5146 {
5146 YahooData *yd = gc->proto_data; 5147 YahooData *yd = purple_connection_get_protocol_data(gc);
5147 struct yahoo_packet *pkt; 5148 struct yahoo_packet *pkt;
5148 char *gpn, *gpo; 5149 char *gpn, *gpo;
5149 YahooFriend *f = yahoo_friend_find(gc, who); 5150 YahooFriend *f = yahoo_friend_find(gc, who);
5150 const char *temp = NULL; 5151 const char *temp = NULL;
5151 5152
5188 } 5189 }
5189 5190
5190 void yahoo_rename_group(PurpleConnection *gc, const char *old_name, 5191 void yahoo_rename_group(PurpleConnection *gc, const char *old_name,
5191 PurpleGroup *group, GList *moved_buddies) 5192 PurpleGroup *group, GList *moved_buddies)
5192 { 5193 {
5193 YahooData *yd = gc->proto_data; 5194 YahooData *yd = purple_connection_get_protocol_data(gc);
5194 struct yahoo_packet *pkt; 5195 struct yahoo_packet *pkt;
5195 char *gpn, *gpo; 5196 char *gpn, *gpo;
5196 5197
5197 gpn = yahoo_string_encode(gc, purple_group_get_name(group), NULL); 5198 gpn = yahoo_string_encode(gc, purple_group_get_name(group), NULL);
5198 gpo = yahoo_string_encode(gc, old_name, NULL); 5199 gpo = yahoo_string_encode(gc, old_name, NULL);