| 315 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
314 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
| 316 _("Unable to read from socket")); |
315 _("Unable to read from socket")); |
| 317 return; |
316 return; |
| 318 } |
317 } |
| 319 |
318 |
| 320 #if GGP_ENABLE_GG11 |
|
| 321 if (purple_debug_is_verbose()) { |
319 if (purple_debug_is_verbose()) { |
| 322 purple_debug_misc("gg", "ggp_callback_recv: got event %s", |
320 purple_debug_misc("gg", "ggp_callback_recv: got event %s", |
| 323 gg_debug_event(ev->type)); |
321 gg_debug_event(ev->type)); |
| 324 } |
322 } |
| 325 #endif |
|
| 326 |
323 |
| 327 purple_input_remove(info->inpa); |
324 purple_input_remove(info->inpa); |
| 328 info->inpa = purple_input_add(info->session->fd, |
325 info->inpa = purple_input_add(info->session->fd, |
| 329 ggp_tcpsocket_inputcond_gg_to_purple(info->session->check), |
326 ggp_tcpsocket_inputcond_gg_to_purple(info->session->check), |
| 330 ggp_callback_recv, gc); |
327 ggp_callback_recv, gc); |
| 340 break; |
337 break; |
| 341 case GG_EVENT_MSG: |
338 case GG_EVENT_MSG: |
| 342 ggp_message_got(gc, &ev->event.msg); |
339 ggp_message_got(gc, &ev->event.msg); |
| 343 break; |
340 break; |
| 344 case GG_EVENT_ACK: |
341 case GG_EVENT_ACK: |
| 345 #if GGP_ENABLE_GG11 |
|
| 346 case GG_EVENT_ACK110: |
342 case GG_EVENT_ACK110: |
| 347 #endif |
|
| 348 break; |
343 break; |
| 349 case GG_EVENT_IMAGE_REPLY: |
344 case GG_EVENT_IMAGE_REPLY: |
| 350 ggp_image_recv(gc, &ev->event.image_reply); |
345 ggp_image_recv(gc, &ev->event.image_reply); |
| 351 break; |
346 break; |
| 352 case GG_EVENT_IMAGE_REQUEST: |
347 case GG_EVENT_IMAGE_REQUEST: |
| 365 ggp_xml_event_handler(gc, ev->event.xml_event.data); |
360 ggp_xml_event_handler(gc, ev->event.xml_event.data); |
| 366 break; |
361 break; |
| 367 case GG_EVENT_USER_DATA: |
362 case GG_EVENT_USER_DATA: |
| 368 ggp_events_user_data(gc, &ev->event.user_data); |
363 ggp_events_user_data(gc, &ev->event.user_data); |
| 369 break; |
364 break; |
| 370 #if GGP_ENABLE_GG11 |
|
| 371 case GG_EVENT_JSON_EVENT: |
365 case GG_EVENT_JSON_EVENT: |
| 372 ggp_events_json(gc, &ev->event.json_event); |
366 ggp_events_json(gc, &ev->event.json_event); |
| 373 break; |
367 break; |
| 374 #endif |
|
| 375 case GG_EVENT_USERLIST100_VERSION: |
368 case GG_EVENT_USERLIST100_VERSION: |
| 376 ggp_roster_version(gc, &ev->event.userlist100_version); |
369 ggp_roster_version(gc, &ev->event.userlist100_version); |
| 377 break; |
370 break; |
| 378 case GG_EVENT_USERLIST100_REPLY: |
371 case GG_EVENT_USERLIST100_REPLY: |
| 379 ggp_roster_reply(gc, &ev->event.userlist100_reply); |
372 ggp_roster_reply(gc, &ev->event.userlist100_reply); |
| 382 ggp_message_got_multilogon(gc, &ev->event.multilogon_msg); |
375 ggp_message_got_multilogon(gc, &ev->event.multilogon_msg); |
| 383 break; |
376 break; |
| 384 case GG_EVENT_MULTILOGON_INFO: |
377 case GG_EVENT_MULTILOGON_INFO: |
| 385 ggp_multilogon_info(gc, &ev->event.multilogon_info); |
378 ggp_multilogon_info(gc, &ev->event.multilogon_info); |
| 386 break; |
379 break; |
| 387 #if GGP_ENABLE_GG11 |
|
| 388 case GG_EVENT_IMTOKEN: |
380 case GG_EVENT_IMTOKEN: |
| 389 purple_debug_info("gg", "gg11: got IMTOKEN\n"); |
381 purple_debug_info("gg", "gg11: got IMTOKEN\n"); |
| 390 g_free(info->imtoken); |
382 g_free(info->imtoken); |
| 391 info->imtoken = g_strdup(ev->event.imtoken.imtoken); |
383 info->imtoken = g_strdup(ev->event.imtoken.imtoken); |
| 392 break; |
384 break; |
| 399 case GG_EVENT_CHAT_INFO_UPDATE: |
391 case GG_EVENT_CHAT_INFO_UPDATE: |
| 400 case GG_EVENT_CHAT_CREATED: |
392 case GG_EVENT_CHAT_CREATED: |
| 401 case GG_EVENT_CHAT_INVITE_ACK: |
393 case GG_EVENT_CHAT_INVITE_ACK: |
| 402 ggp_chat_got_event(gc, ev); |
394 ggp_chat_got_event(gc, ev); |
| 403 break; |
395 break; |
| 404 #endif |
|
| 405 case GG_EVENT_DISCONNECT: |
396 case GG_EVENT_DISCONNECT: |
| 406 ggp_servconn_remote_disconnect(gc); |
397 ggp_servconn_remote_disconnect(gc); |
| 407 break; |
398 break; |
| 408 default: |
399 default: |
| 409 purple_debug_warning("gg", |
400 purple_debug_warning("gg", |
| 453 purple_debug_info("gg", "GG_STATE_READING_REPLY\n"); |
444 purple_debug_info("gg", "GG_STATE_READING_REPLY\n"); |
| 454 break; |
445 break; |
| 455 case GG_STATE_TLS_NEGOTIATION: |
446 case GG_STATE_TLS_NEGOTIATION: |
| 456 purple_debug_info("gg", "GG_STATE_TLS_NEGOTIATION\n"); |
447 purple_debug_info("gg", "GG_STATE_TLS_NEGOTIATION\n"); |
| 457 break; |
448 break; |
| 458 #if GGP_ENABLE_GG11 |
|
| 459 case GG_STATE_RESOLVING_HUB: |
449 case GG_STATE_RESOLVING_HUB: |
| 460 purple_debug_info("gg", "GG_STATE_RESOLVING_HUB\n"); |
450 purple_debug_info("gg", "GG_STATE_RESOLVING_HUB\n"); |
| 461 break; |
451 break; |
| 462 case GG_STATE_READING_HUB: |
452 case GG_STATE_READING_HUB: |
| 463 purple_debug_info("gg", "GG_STATE_READING_HUB\n"); |
453 purple_debug_info("gg", "GG_STATE_READING_HUB\n"); |
| 464 break; |
454 break; |
| 465 #endif |
|
| 466 default: |
455 default: |
| 467 purple_debug_error("gg", "unknown state = %d\n", |
456 purple_debug_error("gg", "unknown state = %d\n", |
| 468 info->session->state); |
457 info->session->state); |
| 469 break; |
458 break; |
| 470 } |
459 } |
| 495 /* Nothing happened. */ |
484 /* Nothing happened. */ |
| 496 purple_debug_info("gg", "GG_EVENT_NONE\n"); |
485 purple_debug_info("gg", "GG_EVENT_NONE\n"); |
| 497 break; |
486 break; |
| 498 case GG_EVENT_CONN_SUCCESS: |
487 case GG_EVENT_CONN_SUCCESS: |
| 499 { |
488 { |
| 500 #if GGP_ENABLE_GG11 |
|
| 501 purple_debug_info("gg", "GG_EVENT_CONN_SUCCESS:" |
489 purple_debug_info("gg", "GG_EVENT_CONN_SUCCESS:" |
| 502 " successfully connected to %s\n", |
490 " successfully connected to %s\n", |
| 503 info->session->connect_host); |
491 info->session->connect_host); |
| 504 ggp_servconn_add_server(info->session-> |
492 ggp_servconn_add_server(info->session-> |
| 505 connect_host); |
493 connect_host); |
| 506 #endif |
|
| 507 purple_input_remove(info->inpa); |
494 purple_input_remove(info->inpa); |
| 508 info->inpa = purple_input_add(info->session->fd, |
495 info->inpa = purple_input_add(info->session->fd, |
| 509 PURPLE_INPUT_READ, |
496 PURPLE_INPUT_READ, |
| 510 ggp_callback_recv, gc); |
497 ggp_callback_recv, gc); |
| 511 |
498 |
| 564 purple_connection_error(gc, |
551 purple_connection_error(gc, |
| 565 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
552 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
| 566 _("Error connecting to master " |
553 _("Error connecting to master " |
| 567 "server")); |
554 "server")); |
| 568 break; |
555 break; |
| 569 #if GGP_ENABLE_GG11 |
|
| 570 case GG_FAILURE_INTERNAL: |
556 case GG_FAILURE_INTERNAL: |
| 571 purple_connection_error(gc, |
557 purple_connection_error(gc, |
| 572 PURPLE_CONNECTION_ERROR_OTHER_ERROR, |
558 PURPLE_CONNECTION_ERROR_OTHER_ERROR, |
| 573 _("Internal error")); |
559 _("Internal error")); |
| 574 break; |
560 break; |
| 575 #endif |
|
| 576 default: |
561 default: |
| 577 purple_connection_error(gc, |
562 purple_connection_error(gc, |
| 578 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
563 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
| 579 _("Connection failed")); |
564 _("Connection failed")); |
| 580 } |
565 } |
| 662 static void ggp_login(PurpleAccount *account) |
647 static void ggp_login(PurpleAccount *account) |
| 663 { |
648 { |
| 664 PurpleConnection *gc = purple_account_get_connection(account); |
649 PurpleConnection *gc = purple_account_get_connection(account); |
| 665 struct gg_login_params *glp; |
650 struct gg_login_params *glp; |
| 666 GGPInfo *info; |
651 GGPInfo *info; |
| 667 #if GGP_ENABLE_GG11 |
|
| 668 const char *address; |
652 const char *address; |
| 669 #endif |
|
| 670 const gchar *encryption_type, *protocol_version; |
653 const gchar *encryption_type, *protocol_version; |
| 671 |
654 |
| 672 if (!ggp_deprecated_setup_proxy(gc)) |
|
| 673 return; |
|
| 674 |
|
| 675 purple_connection_set_flags(gc, |
655 purple_connection_set_flags(gc, |
| 676 #if ! GGP_ENABLE_GG11 |
|
| 677 PURPLE_CONNECTION_FLAG_NO_IMAGES | |
|
| 678 #endif |
|
| 679 PURPLE_CONNECTION_FLAG_HTML | |
656 PURPLE_CONNECTION_FLAG_HTML | |
| 680 PURPLE_CONNECTION_FLAG_NO_URLDESC); |
657 PURPLE_CONNECTION_FLAG_NO_URLDESC); |
| 681 |
658 |
| 682 glp = g_new0(struct gg_login_params, 1); |
659 glp = g_new0(struct gg_login_params, 1); |
| 683 #if GGP_ENABLE_GG11 |
|
| 684 glp->struct_size = sizeof(struct gg_login_params); |
660 glp->struct_size = sizeof(struct gg_login_params); |
| 685 #endif |
|
| 686 info = g_new0(GGPInfo, 1); |
661 info = g_new0(GGPInfo, 1); |
| 687 |
662 |
| 688 purple_connection_set_protocol_data(gc, info); |
663 purple_connection_set_protocol_data(gc, info); |
| 689 |
664 |
| 690 ggp_tcpsocket_setup(gc, glp); |
665 ggp_tcpsocket_setup(gc, glp); |
| 747 |
722 |
| 748 protocol_version = purple_account_get_string(account, |
723 protocol_version = purple_account_get_string(account, |
| 749 "protocol_version", "default"); |
724 "protocol_version", "default"); |
| 750 purple_debug_info("gg", "Requested protocol version: %s\n", |
725 purple_debug_info("gg", "Requested protocol version: %s\n", |
| 751 protocol_version); |
726 protocol_version); |
| 752 #if GGP_ENABLE_GG11 |
|
| 753 if (g_strcmp0(protocol_version, "gg10") == 0) |
727 if (g_strcmp0(protocol_version, "gg10") == 0) |
| 754 glp->protocol_version = GG_PROTOCOL_VERSION_100; |
728 glp->protocol_version = GG_PROTOCOL_VERSION_100; |
| 755 else if (g_strcmp0(protocol_version, "gg11") == 0) |
729 else if (g_strcmp0(protocol_version, "gg11") == 0) |
| 756 glp->protocol_version = GG_PROTOCOL_VERSION_110; |
730 glp->protocol_version = GG_PROTOCOL_VERSION_110; |
| 757 glp->compatibility = GG_COMPAT_1_12_0; |
731 glp->compatibility = GG_COMPAT_1_12_0; |
| 758 #else |
|
| 759 glp->protocol_version = 0x2e; |
|
| 760 #endif |
|
| 761 |
732 |
| 762 ggp_status_set_initial(gc, glp); |
733 ggp_status_set_initial(gc, glp); |
| 763 |
734 |
| 764 #if GGP_ENABLE_GG11 |
|
| 765 address = purple_account_get_string(account, "gg_server", ""); |
735 address = purple_account_get_string(account, "gg_server", ""); |
| 766 if (address && *address) |
736 if (address && *address) |
| 767 glp->connect_host = g_strdup(address); |
737 glp->connect_host = g_strdup(address); |
| 768 #endif |
|
| 769 |
738 |
| 770 info->session = gg_login(glp); |
739 info->session = gg_login(glp); |
| 771 #if GGP_ENABLE_GG11 |
|
| 772 g_free(glp->connect_host); |
740 g_free(glp->connect_host); |
| 773 #endif |
|
| 774 purple_str_wipe(glp->password); |
741 purple_str_wipe(glp->password); |
| 775 g_free(glp); |
742 g_free(glp); |
| 776 |
743 |
| 777 purple_connection_update_progress(gc, _("Connecting"), 0, 2); |
744 purple_connection_update_progress(gc, _("Connecting"), 0, 2); |
| 778 if (info->session == NULL) { |
745 if (info->session == NULL) { |
| 987 ggp_list_emblem, /* list_emblem */ |
954 ggp_list_emblem, /* list_emblem */ |
| 988 ggp_status_buddy_text, /* status_text */ |
955 ggp_status_buddy_text, /* status_text */ |
| 989 ggp_tooltip_text, /* tooltip_text */ |
956 ggp_tooltip_text, /* tooltip_text */ |
| 990 ggp_status_types, /* status_types */ |
957 ggp_status_types, /* status_types */ |
| 991 NULL, /* blist_node_menu */ |
958 NULL, /* blist_node_menu */ |
| 992 #if GGP_ENABLE_GG11 |
|
| 993 ggp_chat_info, /* chat_info */ |
959 ggp_chat_info, /* chat_info */ |
| 994 ggp_chat_info_defaults, /* chat_info_defaults */ |
960 ggp_chat_info_defaults, /* chat_info_defaults */ |
| 995 #else |
|
| 996 NULL, NULL, |
|
| 997 #endif |
|
| 998 ggp_login, /* login */ |
961 ggp_login, /* login */ |
| 999 ggp_close, /* close */ |
962 ggp_close, /* close */ |
| 1000 ggp_message_send_im, /* send_im */ |
963 ggp_message_send_im, /* send_im */ |
| 1001 NULL, /* set_info */ |
964 NULL, /* set_info */ |
| 1002 ggp_send_typing, /* send_typing */ |
965 ggp_send_typing, /* send_typing */ |
| 1011 NULL, /* add_permit */ |
974 NULL, /* add_permit */ |
| 1012 ggp_add_deny, /* add_deny */ |
975 ggp_add_deny, /* add_deny */ |
| 1013 NULL, /* rem_permit */ |
976 NULL, /* rem_permit */ |
| 1014 ggp_rem_deny, /* rem_deny */ |
977 ggp_rem_deny, /* rem_deny */ |
| 1015 NULL, /* set_permit_deny */ |
978 NULL, /* set_permit_deny */ |
| 1016 #if GGP_ENABLE_GG11 |
|
| 1017 ggp_chat_join, /* join_chat */ |
979 ggp_chat_join, /* join_chat */ |
| 1018 NULL, /* TODO */ /* reject_chat */ |
980 NULL, /* TODO */ /* reject_chat */ |
| 1019 ggp_chat_get_name, /* get_chat_name */ |
981 ggp_chat_get_name, /* get_chat_name */ |
| 1020 ggp_chat_invite, /* chat_invite */ |
982 ggp_chat_invite, /* chat_invite */ |
| 1021 ggp_chat_leave, /* chat_leave */ |
983 ggp_chat_leave, /* chat_leave */ |
| 1022 ggp_chat_send, /* chat_send */ |
984 ggp_chat_send, /* chat_send */ |
| 1023 #else |
|
| 1024 NULL, NULL, NULL, NULL, NULL, NULL, |
|
| 1025 #endif |
|
| 1026 ggp_keepalive, /* keepalive */ |
985 ggp_keepalive, /* keepalive */ |
| 1027 NULL, /* register_user */ |
986 NULL, /* register_user */ |
| 1028 NULL, /* get_cb_info */ |
987 NULL, /* get_cb_info */ |
| 1029 ggp_roster_alias_buddy, /* alias_buddy */ |
988 ggp_roster_alias_buddy, /* alias_buddy */ |
| 1030 ggp_roster_group_buddy, /* group_buddy */ |
989 ggp_roster_group_buddy, /* group_buddy */ |
| 1035 ggp_avatar_own_set, /* set_buddy_icon */ |
994 ggp_avatar_own_set, /* set_buddy_icon */ |
| 1036 NULL, /* remove_group */ |
995 NULL, /* remove_group */ |
| 1037 NULL, /* get_cb_real_name */ |
996 NULL, /* get_cb_real_name */ |
| 1038 NULL, /* set_chat_topic */ |
997 NULL, /* set_chat_topic */ |
| 1039 NULL, /* find_blist_chat */ |
998 NULL, /* find_blist_chat */ |
| 1040 #if GGP_ENABLE_GG11 |
|
| 1041 ggp_chat_roomlist_get_list, /* roomlist_get_list */ |
999 ggp_chat_roomlist_get_list, /* roomlist_get_list */ |
| 1042 #else |
|
| 1043 NULL, |
|
| 1044 #endif |
|
| 1045 NULL, /* roomlist_cancel */ |
1000 NULL, /* roomlist_cancel */ |
| 1046 NULL, /* roomlist_expand_category */ |
1001 NULL, /* roomlist_expand_category */ |
| 1047 ggp_edisc_xfer_can_receive_file, /* can_receive_file */ |
1002 ggp_edisc_xfer_can_receive_file, /* can_receive_file */ |
| 1048 ggp_edisc_xfer_send_file, /* send_file */ |
1003 ggp_edisc_xfer_send_file, /* send_file */ |
| 1049 ggp_edisc_xfer_send_new, /* new_xfer */ |
1004 ggp_edisc_xfer_send_new, /* new_xfer */ |