| 249 { |
249 { |
| 250 PurpleXmlNode *xml = NULL; |
250 PurpleXmlNode *xml = NULL; |
| 251 PurpleXmlNode *xmlnode_next_event; |
251 PurpleXmlNode *xmlnode_next_event; |
| 252 |
252 |
| 253 xml = purple_xmlnode_from_str(data, -1); |
253 xml = purple_xmlnode_from_str(data, -1); |
| 254 if (xml == NULL) |
254 if (xml == NULL) { |
| 255 { |
|
| 256 purple_debug_error("gg", "ggp_xml_event_handler: " |
255 purple_debug_error("gg", "ggp_xml_event_handler: " |
| 257 "invalid xml: [%s]\n", data); |
256 "invalid xml: [%s]\n", data); |
| 258 goto out; |
257 goto out; |
| 259 } |
258 } |
| 260 |
259 |
| 261 xmlnode_next_event = purple_xmlnode_get_child(xml, "event"); |
260 xmlnode_next_event = purple_xmlnode_get_child(xml, "event"); |
| 262 while (xmlnode_next_event != NULL) |
261 while (xmlnode_next_event != NULL) { |
| 263 { |
|
| 264 PurpleXmlNode *xmlnode_current_event = xmlnode_next_event; |
262 PurpleXmlNode *xmlnode_current_event = xmlnode_next_event; |
| 265 |
263 |
| 266 PurpleXmlNode *xmlnode_type; |
264 PurpleXmlNode *xmlnode_type; |
| 267 char *event_type_raw; |
265 char *event_type_raw; |
| 268 int event_type = 0; |
266 int event_type = 0; |
| 280 if (event_type_raw != NULL) |
278 if (event_type_raw != NULL) |
| 281 event_type = atoi(event_type_raw); |
279 event_type = atoi(event_type_raw); |
| 282 g_free(event_type_raw); |
280 g_free(event_type_raw); |
| 283 |
281 |
| 284 xmlnode_sender = purple_xmlnode_get_child(xmlnode_current_event, "sender"); |
282 xmlnode_sender = purple_xmlnode_get_child(xmlnode_current_event, "sender"); |
| 285 if (xmlnode_sender != NULL) |
283 if (xmlnode_sender != NULL) { |
| 286 { |
|
| 287 event_sender_raw = purple_xmlnode_get_data(xmlnode_sender); |
284 event_sender_raw = purple_xmlnode_get_data(xmlnode_sender); |
| 288 if (event_sender_raw != NULL) |
285 if (event_sender_raw != NULL) |
| 289 event_sender = ggp_str_to_uin(event_sender_raw); |
286 event_sender = ggp_str_to_uin(event_sender_raw); |
| 290 g_free(event_sender_raw); |
287 g_free(event_sender_raw); |
| 291 } |
288 } |
| 470 purple_debug_info("gg", "GG_STATE_READING_HUB\n"); |
467 purple_debug_info("gg", "GG_STATE_READING_HUB\n"); |
| 471 break; |
468 break; |
| 472 #endif |
469 #endif |
| 473 default: |
470 default: |
| 474 purple_debug_error("gg", "unknown state = %d\n", |
471 purple_debug_error("gg", "unknown state = %d\n", |
| 475 info->session->state); |
472 info->session->state); |
| 476 break; |
473 break; |
| 477 } |
474 } |
| 478 |
475 |
| 479 if (!(ev = gg_watch_fd(info->session))) { |
476 if (!(ev = gg_watch_fd(info->session))) { |
| 480 purple_debug_error("gg", "login_handler: gg_watch_fd failed!\n"); |
477 purple_debug_error("gg", "login_handler: gg_watch_fd failed!\n"); |
| 511 ggp_servconn_add_server(info->session-> |
508 ggp_servconn_add_server(info->session-> |
| 512 connect_host); |
509 connect_host); |
| 513 #endif |
510 #endif |
| 514 purple_input_remove(info->inpa); |
511 purple_input_remove(info->inpa); |
| 515 info->inpa = purple_input_add(info->session->fd, |
512 info->inpa = purple_input_add(info->session->fd, |
| 516 PURPLE_INPUT_READ, |
513 PURPLE_INPUT_READ, |
| 517 ggp_callback_recv, gc); |
514 ggp_callback_recv, gc); |
| 518 |
515 |
| 519 purple_connection_update_progress(gc, _("Connected"), 1, 2); |
516 purple_connection_update_progress(gc, _("Connected"), 1, 2); |
| 520 purple_connection_set_state(gc, PURPLE_CONNECTION_CONNECTED); |
517 purple_connection_set_state(gc, PURPLE_CONNECTION_CONNECTED); |
| 521 |
518 |
| 522 ggp_buddylist_send(gc); |
519 ggp_buddylist_send(gc); |
| 523 ggp_roster_request_update(gc); |
520 ggp_roster_request_update(gc); |
| 524 } |
521 } |
| 525 break; |
522 break; |
| 526 case GG_EVENT_CONN_FAILED: |
523 case GG_EVENT_CONN_FAILED: |
| 527 if (info->inpa > 0) |
524 if (info->inpa > 0) { |
| 528 { |
|
| 529 purple_input_remove(info->inpa); |
525 purple_input_remove(info->inpa); |
| 530 info->inpa = 0; |
526 info->inpa = 0; |
| 531 } |
527 } |
| 532 purple_debug_info("gg", "Connection failure: %d\n", |
528 purple_debug_info("gg", "Connection failure: %d\n", |
| 533 ev->event.failure); |
529 ev->event.failure); |
| 586 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
582 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
| 587 _("Connection failed")); |
583 _("Connection failed")); |
| 588 } |
584 } |
| 589 break; |
585 break; |
| 590 case GG_EVENT_MSG: |
586 case GG_EVENT_MSG: |
| 591 if (ev->event.msg.sender == 0) |
587 if (ev->event.msg.sender == 0) { |
| 592 { |
|
| 593 if (ev->event.msg.message == NULL) |
588 if (ev->event.msg.message == NULL) |
| 594 break; |
589 break; |
| 595 |
590 |
| 596 /* system messages are mostly ads */ |
591 /* system messages are mostly ads */ |
| 597 purple_debug_info("gg", "System message:\n%s\n", |
592 purple_debug_info("gg", "System message:\n%s\n", |
| 598 ev->event.msg.message); |
593 ev->event.msg.message); |
| 599 } |
594 } else { |
| 600 else |
|
| 601 purple_debug_warning("gg", "GG_EVENT_MSG: message from user %u " |
595 purple_debug_warning("gg", "GG_EVENT_MSG: message from user %u " |
| 602 "unexpected while connecting:\n%s\n", |
596 "unexpected while connecting:\n%s\n", |
| 603 ev->event.msg.sender, |
597 ev->event.msg.sender, |
| 604 ev->event.msg.message); |
598 ev->event.msg.message); |
| |
599 } |
| 605 break; |
600 break; |
| 606 default: |
601 default: |
| 607 purple_debug_error("gg", "strange event: %d\n", ev->type); |
602 purple_debug_error("gg", "strange event: %d\n", ev->type); |
| 608 break; |
603 break; |
| 609 } |
604 } |
| 804 info = purple_connection_get_protocol_data(gc); |
799 info = purple_connection_get_protocol_data(gc); |
| 805 |
800 |
| 806 purple_notify_close_with_handle(gc); |
801 purple_notify_close_with_handle(gc); |
| 807 |
802 |
| 808 if (info) { |
803 if (info) { |
| 809 if (info->session != NULL) |
804 if (info->session != NULL) { |
| 810 { |
|
| 811 ggp_status_set_disconnected(account); |
805 ggp_status_set_disconnected(account); |
| 812 gg_logoff(info->session); |
806 gg_logoff(info->session); |
| 813 gg_free_session(info->session); |
807 gg_free_session(info->session); |
| 814 } |
808 } |
| 815 |
809 |
| 938 m = g_list_append(m, act); |
932 m = g_list_append(m, act); |
| 939 |
933 |
| 940 m = g_list_append(m, NULL); |
934 m = g_list_append(m, NULL); |
| 941 |
935 |
| 942 act = purple_protocol_action_new(_("Save buddylist to file..."), |
936 act = purple_protocol_action_new(_("Save buddylist to file..."), |
| 943 ggp_action_buddylist_save); |
937 ggp_action_buddylist_save); |
| 944 m = g_list_append(m, act); |
938 m = g_list_append(m, act); |
| 945 |
939 |
| 946 act = purple_protocol_action_new(_("Load buddylist from file..."), |
940 act = purple_protocol_action_new(_("Load buddylist from file..."), |
| 947 ggp_action_buddylist_load); |
941 ggp_action_buddylist_load); |
| 948 m = g_list_append(m, act); |
942 m = g_list_append(m, act); |
| 949 |
943 |
| 950 return m; |
944 return m; |
| 951 } |
945 } |
| 952 |
946 |