| 330 _("Server disconnected")); |
330 _("Server disconnected")); |
| 331 break; |
331 break; |
| 332 case GG_EVENT_MSG: |
332 case GG_EVENT_MSG: |
| 333 ggp_message_got(gc, &ev->event.msg); |
333 ggp_message_got(gc, &ev->event.msg); |
| 334 break; |
334 break; |
| |
335 #if GGP_ENABLE_GG11 |
| 335 case GG_EVENT_ACK110: |
336 case GG_EVENT_ACK110: |
| 336 break; |
337 break; |
| |
338 #endif |
| 337 case GG_EVENT_IMAGE_REPLY: |
339 case GG_EVENT_IMAGE_REPLY: |
| 338 ggp_image_recv(gc, &ev->event.image_reply); |
340 ggp_image_recv(gc, &ev->event.image_reply); |
| 339 break; |
341 break; |
| 340 case GG_EVENT_IMAGE_REQUEST: |
342 case GG_EVENT_IMAGE_REQUEST: |
| 341 ggp_image_send(gc, &ev->event.image_request); |
343 ggp_image_send(gc, &ev->event.image_request); |
| 353 ggp_xml_event_handler(gc, ev->event.xml_event.data); |
355 ggp_xml_event_handler(gc, ev->event.xml_event.data); |
| 354 break; |
356 break; |
| 355 case GG_EVENT_USER_DATA: |
357 case GG_EVENT_USER_DATA: |
| 356 ggp_events_user_data(gc, &ev->event.user_data); |
358 ggp_events_user_data(gc, &ev->event.user_data); |
| 357 break; |
359 break; |
| |
360 #if GGP_ENABLE_GG11 |
| 358 case GG_EVENT_JSON_EVENT: |
361 case GG_EVENT_JSON_EVENT: |
| 359 ggp_events_json(gc, &ev->event.json_event); |
362 ggp_events_json(gc, &ev->event.json_event); |
| 360 break; |
363 break; |
| |
364 #endif |
| 361 case GG_EVENT_USERLIST100_VERSION: |
365 case GG_EVENT_USERLIST100_VERSION: |
| 362 ggp_roster_version(gc, &ev->event.userlist100_version); |
366 ggp_roster_version(gc, &ev->event.userlist100_version); |
| 363 break; |
367 break; |
| 364 case GG_EVENT_USERLIST100_REPLY: |
368 case GG_EVENT_USERLIST100_REPLY: |
| 365 ggp_roster_reply(gc, &ev->event.userlist100_reply); |
369 ggp_roster_reply(gc, &ev->event.userlist100_reply); |
| 368 ggp_message_got_multilogon(gc, &ev->event.multilogon_msg); |
372 ggp_message_got_multilogon(gc, &ev->event.multilogon_msg); |
| 369 break; |
373 break; |
| 370 case GG_EVENT_MULTILOGON_INFO: |
374 case GG_EVENT_MULTILOGON_INFO: |
| 371 ggp_multilogon_info(gc, &ev->event.multilogon_info); |
375 ggp_multilogon_info(gc, &ev->event.multilogon_info); |
| 372 break; |
376 break; |
| |
377 #if GGP_ENABLE_GG11 |
| 373 case GG_EVENT_IMTOKEN: |
378 case GG_EVENT_IMTOKEN: |
| 374 purple_debug_info("gg", "gg11: got IMTOKEN\n"); |
379 purple_debug_info("gg", "gg11: got IMTOKEN\n"); |
| 375 g_free(info->imtoken); |
380 g_free(info->imtoken); |
| 376 info->imtoken = g_strdup(ev->event.imtoken.imtoken); |
381 info->imtoken = g_strdup(ev->event.imtoken.imtoken); |
| 377 break; |
382 break; |
| 383 case GG_EVENT_CHAT_INFO_UPDATE: |
388 case GG_EVENT_CHAT_INFO_UPDATE: |
| 384 case GG_EVENT_CHAT_CREATED: |
389 case GG_EVENT_CHAT_CREATED: |
| 385 case GG_EVENT_CHAT_INVITE_ACK: |
390 case GG_EVENT_CHAT_INVITE_ACK: |
| 386 ggp_chat_got_event(gc, ev); |
391 ggp_chat_got_event(gc, ev); |
| 387 break; |
392 break; |
| |
393 #endif |
| 388 default: |
394 default: |
| 389 purple_debug_warning("gg", |
395 purple_debug_warning("gg", |
| 390 "unsupported event type=%d\n", ev->type); |
396 "unsupported event type=%d\n", ev->type); |
| 391 break; |
397 break; |
| 392 } |
398 } |
| 430 purple_debug_info("gg", "GG_STATE_READING_REPLY\n"); |
436 purple_debug_info("gg", "GG_STATE_READING_REPLY\n"); |
| 431 break; |
437 break; |
| 432 case GG_STATE_TLS_NEGOTIATION: |
438 case GG_STATE_TLS_NEGOTIATION: |
| 433 purple_debug_info("gg", "GG_STATE_TLS_NEGOTIATION\n"); |
439 purple_debug_info("gg", "GG_STATE_TLS_NEGOTIATION\n"); |
| 434 break; |
440 break; |
| |
441 #if GGP_ENABLE_GG11 |
| 435 case GG_STATE_RESOLVING_HUB: |
442 case GG_STATE_RESOLVING_HUB: |
| 436 purple_debug_info("gg", "GG_STATE_RESOLVING_HUB\n"); |
443 purple_debug_info("gg", "GG_STATE_RESOLVING_HUB\n"); |
| 437 break; |
444 break; |
| 438 case GG_STATE_READING_HUB: |
445 case GG_STATE_READING_HUB: |
| 439 purple_debug_info("gg", "GG_STATE_READING_HUB\n"); |
446 purple_debug_info("gg", "GG_STATE_READING_HUB\n"); |
| 440 break; |
447 break; |
| |
448 #endif |
| 441 default: |
449 default: |
| 442 purple_debug_error("gg", "unknown state = %d\n", |
450 purple_debug_error("gg", "unknown state = %d\n", |
| 443 info->session->state); |
451 info->session->state); |
| 444 break; |
452 break; |
| 445 } |
453 } |
| 470 /* Nothing happened. */ |
478 /* Nothing happened. */ |
| 471 purple_debug_info("gg", "GG_EVENT_NONE\n"); |
479 purple_debug_info("gg", "GG_EVENT_NONE\n"); |
| 472 break; |
480 break; |
| 473 case GG_EVENT_CONN_SUCCESS: |
481 case GG_EVENT_CONN_SUCCESS: |
| 474 { |
482 { |
| |
483 #if GGP_ENABLE_GG11 |
| 475 purple_debug_info("gg", "GG_EVENT_CONN_SUCCESS:" |
484 purple_debug_info("gg", "GG_EVENT_CONN_SUCCESS:" |
| 476 " successfully connected to %s\n", |
485 " successfully connected to %s\n", |
| 477 info->session->connect_host); |
486 info->session->connect_host); |
| 478 ggp_servconn_add_server(info->session-> |
487 ggp_servconn_add_server(info->session-> |
| 479 connect_host); |
488 connect_host); |
| |
489 #endif |
| 480 purple_input_remove(info->inpa); |
490 purple_input_remove(info->inpa); |
| 481 info->inpa = purple_input_add(info->session->fd, |
491 info->inpa = purple_input_add(info->session->fd, |
| 482 PURPLE_INPUT_READ, |
492 PURPLE_INPUT_READ, |
| 483 ggp_callback_recv, gc); |
493 ggp_callback_recv, gc); |
| 484 |
494 |
| 630 static void ggp_login(PurpleAccount *account) |
640 static void ggp_login(PurpleAccount *account) |
| 631 { |
641 { |
| 632 PurpleConnection *gc = purple_account_get_connection(account); |
642 PurpleConnection *gc = purple_account_get_connection(account); |
| 633 struct gg_login_params *glp; |
643 struct gg_login_params *glp; |
| 634 GGPInfo *info; |
644 GGPInfo *info; |
| |
645 #if GGP_ENABLE_GG11 |
| 635 const char *address; |
646 const char *address; |
| |
647 #endif |
| 636 const gchar *encryption_type, *protocol_version; |
648 const gchar *encryption_type, *protocol_version; |
| 637 |
649 |
| 638 if (!ggp_deprecated_setup_proxy(gc)) |
650 if (!ggp_deprecated_setup_proxy(gc)) |
| 639 return; |
651 return; |
| 640 |
652 |
| 641 purple_connection_set_flags(gc, PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_URLDESC); |
653 purple_connection_set_flags(gc, PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_URLDESC); |
| 642 |
654 |
| 643 glp = g_new0(struct gg_login_params, 1); |
655 glp = g_new0(struct gg_login_params, 1); |
| |
656 #if GGP_ENABLE_GG11 |
| 644 glp->struct_size = sizeof(struct gg_login_params); |
657 glp->struct_size = sizeof(struct gg_login_params); |
| |
658 #endif |
| 645 info = g_new0(GGPInfo, 1); |
659 info = g_new0(GGPInfo, 1); |
| 646 |
660 |
| 647 purple_connection_set_protocol_data(gc, info); |
661 purple_connection_set_protocol_data(gc, info); |
| 648 |
662 |
| 649 ggp_tcpsocket_setup(gc, glp); |
663 ggp_tcpsocket_setup(gc, glp); |
| 706 |
720 |
| 707 protocol_version = purple_account_get_string(account, |
721 protocol_version = purple_account_get_string(account, |
| 708 "protocol_version", "default"); |
722 "protocol_version", "default"); |
| 709 purple_debug_info("gg", "Requested protocol version: %s\n", |
723 purple_debug_info("gg", "Requested protocol version: %s\n", |
| 710 protocol_version); |
724 protocol_version); |
| |
725 #if GGP_ENABLE_GG11 |
| 711 if (g_strcmp0(protocol_version, "gg10") == 0) |
726 if (g_strcmp0(protocol_version, "gg10") == 0) |
| 712 glp->protocol_version = GG_PROTOCOL_VERSION_100; |
727 glp->protocol_version = GG_PROTOCOL_VERSION_100; |
| 713 else if (g_strcmp0(protocol_version, "gg11") == 0) |
728 else if (g_strcmp0(protocol_version, "gg11") == 0) |
| 714 glp->protocol_version = GG_PROTOCOL_VERSION_110; |
729 glp->protocol_version = GG_PROTOCOL_VERSION_110; |
| |
730 #else |
| |
731 glp->protocol_version = 0x2e; |
| |
732 #endif |
| 715 |
733 |
| 716 ggp_status_set_initial(gc, glp); |
734 ggp_status_set_initial(gc, glp); |
| 717 |
735 |
| |
736 #if GGP_ENABLE_GG11 |
| 718 address = purple_account_get_string(account, "gg_server", ""); |
737 address = purple_account_get_string(account, "gg_server", ""); |
| 719 if (address && *address) |
738 if (address && *address) |
| 720 glp->connect_host = g_strdup(address); |
739 glp->connect_host = g_strdup(address); |
| |
740 #endif |
| 721 |
741 |
| 722 info->session = gg_login(glp); |
742 info->session = gg_login(glp); |
| |
743 #if GGP_ENABLE_GG11 |
| 723 g_free(glp->connect_host); |
744 g_free(glp->connect_host); |
| |
745 #endif |
| 724 purple_str_wipe(glp->password); |
746 purple_str_wipe(glp->password); |
| 725 g_free(glp); |
747 g_free(glp); |
| 726 |
748 |
| 727 purple_connection_update_progress(gc, _("Connecting"), 0, 2); |
749 purple_connection_update_progress(gc, _("Connecting"), 0, 2); |
| 728 if (info->session == NULL) { |
750 if (info->session == NULL) { |
| 938 ggp_list_emblem, /* list_emblem */ |
960 ggp_list_emblem, /* list_emblem */ |
| 939 ggp_status_buddy_text, /* status_text */ |
961 ggp_status_buddy_text, /* status_text */ |
| 940 ggp_tooltip_text, /* tooltip_text */ |
962 ggp_tooltip_text, /* tooltip_text */ |
| 941 ggp_status_types, /* status_types */ |
963 ggp_status_types, /* status_types */ |
| 942 NULL, /* blist_node_menu */ |
964 NULL, /* blist_node_menu */ |
| |
965 #if GGP_ENABLE_GG11 |
| 943 ggp_chat_info, /* chat_info */ |
966 ggp_chat_info, /* chat_info */ |
| 944 ggp_chat_info_defaults, /* chat_info_defaults */ |
967 ggp_chat_info_defaults, /* chat_info_defaults */ |
| |
968 #else |
| |
969 NULL, NULL, |
| |
970 #endif |
| 945 ggp_login, /* login */ |
971 ggp_login, /* login */ |
| 946 ggp_close, /* close */ |
972 ggp_close, /* close */ |
| 947 ggp_message_send_im, /* send_im */ |
973 ggp_message_send_im, /* send_im */ |
| 948 NULL, /* set_info */ |
974 NULL, /* set_info */ |
| 949 ggp_send_typing, /* send_typing */ |
975 ggp_send_typing, /* send_typing */ |
| 958 NULL, /* add_permit */ |
984 NULL, /* add_permit */ |
| 959 ggp_add_deny, /* add_deny */ |
985 ggp_add_deny, /* add_deny */ |
| 960 NULL, /* rem_permit */ |
986 NULL, /* rem_permit */ |
| 961 ggp_rem_deny, /* rem_deny */ |
987 ggp_rem_deny, /* rem_deny */ |
| 962 NULL, /* set_permit_deny */ |
988 NULL, /* set_permit_deny */ |
| |
989 #if GGP_ENABLE_GG11 |
| 963 ggp_chat_join, /* join_chat */ |
990 ggp_chat_join, /* join_chat */ |
| 964 NULL, /* TODO */ /* reject_chat */ |
991 NULL, /* TODO */ /* reject_chat */ |
| 965 ggp_chat_get_name, /* get_chat_name */ |
992 ggp_chat_get_name, /* get_chat_name */ |
| 966 ggp_chat_invite, /* chat_invite */ |
993 ggp_chat_invite, /* chat_invite */ |
| 967 ggp_chat_leave, /* chat_leave */ |
994 ggp_chat_leave, /* chat_leave */ |
| 968 NULL, /* chat_whisper */ |
995 NULL, /* chat_whisper */ |
| 969 ggp_chat_send, /* chat_send */ |
996 ggp_chat_send, /* chat_send */ |
| |
997 #else |
| |
998 NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
999 #endif |
| 970 ggp_keepalive, /* keepalive */ |
1000 ggp_keepalive, /* keepalive */ |
| 971 ggp_account_register, /* register_user */ |
1001 ggp_account_register, /* register_user */ |
| 972 NULL, /* get_cb_info */ |
1002 NULL, /* get_cb_info */ |
| 973 ggp_roster_alias_buddy, /* alias_buddy */ |
1003 ggp_roster_alias_buddy, /* alias_buddy */ |
| 974 ggp_roster_group_buddy, /* group_buddy */ |
1004 ggp_roster_group_buddy, /* group_buddy */ |
| 979 ggp_avatar_own_set, /* set_buddy_icon */ |
1009 ggp_avatar_own_set, /* set_buddy_icon */ |
| 980 NULL, /* remove_group */ |
1010 NULL, /* remove_group */ |
| 981 NULL, /* get_cb_real_name */ |
1011 NULL, /* get_cb_real_name */ |
| 982 NULL, /* set_chat_topic */ |
1012 NULL, /* set_chat_topic */ |
| 983 NULL, /* find_blist_chat */ |
1013 NULL, /* find_blist_chat */ |
| |
1014 #if GGP_ENABLE_GG11 |
| 984 ggp_chat_roomlist_get_list, /* roomlist_get_list */ |
1015 ggp_chat_roomlist_get_list, /* roomlist_get_list */ |
| |
1016 #else |
| |
1017 NULL, |
| |
1018 #endif |
| 985 NULL, /* roomlist_cancel */ |
1019 NULL, /* roomlist_cancel */ |
| 986 NULL, /* roomlist_expand_category */ |
1020 NULL, /* roomlist_expand_category */ |
| 987 ggp_edisc_xfer_can_receive_file,/* can_receive_file */ |
1021 ggp_edisc_xfer_can_receive_file,/* can_receive_file */ |
| 988 ggp_edisc_xfer_send_file, /* send_file */ |
1022 ggp_edisc_xfer_send_file, /* send_file */ |
| 989 ggp_edisc_xfer_send_new, /* new_xfer */ |
1023 ggp_edisc_xfer_send_new, /* new_xfer */ |