comparison libpurple/protocols/bonjour/jabber.c @ 17555:b13850d13391

Consolidate BonjourJabberConversation creation and deletion.
author Daniel Atallah <daniel.atallah@gmail.com>
date Fri, 08 Jun 2007 06:28:31 +0000
parents a1d05bc43d95
children 612dc5149964
comparison
equal deleted inserted replaced
17554:a1d05bc43d95 17555:b13850d13391
106 106
107 return "12"; 107 return "12";
108 } 108 }
109 #endif 109 #endif
110 110
111 static BonjourJabberConversation *
112 bonjour_jabber_conv_new(const char *name) {
113
114 BonjourJabberConversation *bconv = g_new0(BonjourJabberConversation, 1);
115 bconv->socket = -1;
116 bconv->buddy_name = g_strdup(name);
117 bconv->watcher_id = -1;
118
119 return bconv;
120 }
121
111 static const char * 122 static const char *
112 _font_size_ichat_to_purple(int size) 123 _font_size_ichat_to_purple(int size)
113 { 124 {
114 if (size > 24) { 125 if (size > 24) {
115 return "7"; 126 return "7";
355 */ 366 */
356 if (closed_conversation || purple_str_has_prefix(message, STREAM_END)) { 367 if (closed_conversation || purple_str_has_prefix(message, STREAM_END)) {
357 char *closed_conv_message; 368 char *closed_conv_message;
358 369
359 /* Close the socket, clear the watcher and free memory */ 370 /* Close the socket, clear the watcher and free memory */
360 if (bb->conversation != NULL) { 371 if (bb->conversation != NULL)
361 close(bb->conversation->socket); 372 bonjour_jabber_close_conversation(pb);
362 purple_input_remove(bb->conversation->watcher_id);
363 g_free(bb->conversation->buddy_name);
364 g_free(bb->conversation);
365 bb->conversation = NULL;
366 }
367 373
368 /* Inform the user that the conversation has been closed */ 374 /* Inform the user that the conversation has been closed */
369 conversation = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, pb->name, account); 375 conversation = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, pb->name, account);
370 closed_conv_message = g_strdup_printf(_("%s has closed the conversation."), pb->name); 376 closed_conv_message = g_strdup_printf(_("%s has closed the conversation."), pb->name);
371 purple_conversation_write(conversation, NULL, closed_conv_message, PURPLE_MESSAGE_SYSTEM, time(NULL)); 377 purple_conversation_write(conversation, NULL, closed_conv_message, PURPLE_MESSAGE_SYSTEM, time(NULL));
420 bb = pb->proto_data; 426 bb = pb->proto_data;
421 427
422 /* Check if the conversation has been previously started */ 428 /* Check if the conversation has been previously started */
423 if (bb->conversation == NULL) 429 if (bb->conversation == NULL)
424 { 430 {
425 bb->conversation = g_new(BonjourJabberConversation, 1); 431 bb->conversation = bonjour_jabber_conv_new(pb->name);
426 bb->conversation->socket = client_socket; 432 bb->conversation->socket = client_socket;
427 bb->conversation->stream_started = FALSE;
428 bb->conversation->buddy_name = g_strdup(pb->name);
429 433
430 if (bb->conversation->stream_started == FALSE) { 434 if (bb->conversation->stream_started == FALSE) {
431 char *stream_start = g_strdup_printf(DOCTYPE, purple_account_get_username(pb->account), 435 char *stream_start = g_strdup_printf(DOCTYPE, purple_account_get_username(pb->account),
432 purple_buddy_get_name(pb)); 436 purple_buddy_get_name(pb));
433 /* Start the stream */ 437 /* Start the stream */
539 { 543 {
540 int socket = _connect_to_buddy(pb); 544 int socket = _connect_to_buddy(pb);
541 if (socket < 0) 545 if (socket < 0)
542 return -10001; 546 return -10001;
543 547
544 bb->conversation = g_new(BonjourJabberConversation, 1); 548 bb->conversation = bonjour_jabber_conv_new(pb->name);
545 bb->conversation->socket = socket; 549 bb->conversation->socket = socket;
546 bb->conversation->stream_started = FALSE;
547 bb->conversation->buddy_name = g_strdup(pb->name);
548 bb->conversation->watcher_id = purple_input_add(bb->conversation->socket, 550 bb->conversation->watcher_id = purple_input_add(bb->conversation->socket,
549 PURPLE_INPUT_READ, _client_socket_handler, pb); 551 PURPLE_INPUT_READ, _client_socket_handler, pb);
550 } 552 }
551 553
552 message_node = xmlnode_new("message"); 554 message_node = xmlnode_new("message");
591 purple_debug_warning("bonjour", "send error: %s\n", strerror(errno)); 593 purple_debug_warning("bonjour", "send error: %s\n", strerror(errno));
592 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, data->account); 594 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, data->account);
593 purple_conversation_write(conv, NULL, 595 purple_conversation_write(conv, NULL,
594 _("Unable to send the message, the conversation couldn't be started."), 596 _("Unable to send the message, the conversation couldn't be started."),
595 PURPLE_MESSAGE_SYSTEM, time(NULL)); 597 PURPLE_MESSAGE_SYSTEM, time(NULL));
596 close(bb->conversation->socket); 598
597 purple_input_remove(bb->conversation->watcher_id); 599 bonjour_jabber_close_conversation(pb);
598 600
599 /* Free all the data related to the conversation */
600 g_free(bb->conversation->buddy_name);
601 g_free(bb->conversation);
602 bb->conversation = NULL;
603 g_free(message); 601 g_free(message);
604 g_free(stream_start); 602 g_free(stream_start);
605 return 0; 603 return 0;
606 } 604 }
607 605