Mercurial > pidgin
comparison libpurple/protocols/bonjour/jabber.c @ 21418:38cc722159ff
propagate from branch 'im.pidgin.pidgin' (head d8103be97302efb404e2f6922925f661c807ad23)
to branch 'im.pidgin.cpw.resiak.disconnectreason' (head 0ac25a1f38ae28654c967caa143f1c0d12ef2e1c)
author | Will Thompson <will.thompson@collabora.co.uk> |
---|---|
date | Sat, 10 Nov 2007 12:10:04 +0000 |
parents | ba41f2a60253 35b4f1dc4c8d |
children | db7fa42845f6 |
comparison
equal
deleted
inserted
replaced
21417:21bea7c72a80 | 21418:38cc722159ff |
---|---|
242 | 242 |
243 if (ret < 0 && errno == EAGAIN) | 243 if (ret < 0 && errno == EAGAIN) |
244 return; | 244 return; |
245 else if (ret <= 0) { | 245 else if (ret <= 0) { |
246 PurpleConversation *conv; | 246 PurpleConversation *conv; |
247 const char *error = strerror(errno); | 247 const char *error = g_strerror(errno); |
248 | 248 |
249 purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", | 249 purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", |
250 purple_buddy_get_name(pb), error ? error : "(null)"); | 250 purple_buddy_get_name(pb), error ? error : "(null)"); |
251 | 251 |
252 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account); | 252 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account); |
285 | 285 |
286 if (ret == -1 && errno == EAGAIN) | 286 if (ret == -1 && errno == EAGAIN) |
287 ret = 0; | 287 ret = 0; |
288 else if (ret <= 0) { | 288 else if (ret <= 0) { |
289 PurpleConversation *conv; | 289 PurpleConversation *conv; |
290 const char *error = strerror(errno); | 290 const char *error = g_strerror(errno); |
291 | 291 |
292 purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", | 292 purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", |
293 purple_buddy_get_name(pb), error ? error : "(null)"); | 293 purple_buddy_get_name(pb), error ? error : "(null)"); |
294 | 294 |
295 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account); | 295 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, pb->account); |
335 if ((len = recv(socket, message, sizeof(message) - 1, 0)) == -1) { | 335 if ((len = recv(socket, message, sizeof(message) - 1, 0)) == -1) { |
336 /* There have been an error reading from the socket */ | 336 /* There have been an error reading from the socket */ |
337 if (errno != EAGAIN) { | 337 if (errno != EAGAIN) { |
338 BonjourBuddy *bb = pb->proto_data; | 338 BonjourBuddy *bb = pb->proto_data; |
339 | 339 |
340 purple_debug_warning("bonjour", "receive error: %s\n", strerror(errno)); | 340 purple_debug_warning("bonjour", "receive error: %s\n", g_strerror(errno)); |
341 | 341 |
342 bonjour_jabber_close_conversation(bb->conversation); | 342 bonjour_jabber_close_conversation(bb->conversation); |
343 bb->conversation = NULL; | 343 bb->conversation = NULL; |
344 | 344 |
345 /* I guess we really don't need to notify the user. | 345 /* I guess we really don't need to notify the user. |
365 bonjour_parser_process(pb, message, message_length); | 365 bonjour_parser_process(pb, message, message_length); |
366 } | 366 } |
367 | 367 |
368 void bonjour_jabber_stream_ended(PurpleBuddy *pb) { | 368 void bonjour_jabber_stream_ended(PurpleBuddy *pb) { |
369 BonjourBuddy *bb = pb->proto_data; | 369 BonjourBuddy *bb = pb->proto_data; |
370 PurpleConversation *conv; | |
371 | 370 |
372 purple_debug_info("bonjour", "Recieved conversation close notification from %s.\n", pb->name); | 371 purple_debug_info("bonjour", "Recieved conversation close notification from %s.\n", pb->name); |
373 | 372 |
374 g_return_if_fail(bb != NULL); | 373 g_return_if_fail(bb != NULL); |
375 | 374 |
376 /* Inform the user that the conversation has been closed */ | 375 /* Inform the user that the conversation has been closed */ |
377 if (bb->conversation != NULL) { | 376 if (bb->conversation != NULL) { |
377 #if 0 | |
378 PurpleConversation *conv; | |
378 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, pb->name, pb->account); | 379 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, pb->name, pb->account); |
379 if (conv != NULL) { | 380 if (conv != NULL) { |
380 char *tmp = g_strdup_printf(_("%s has closed the conversation."), pb->name); | 381 char *tmp = g_strdup_printf(_("%s has closed the conversation."), pb->name); |
381 purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); | 382 purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
382 g_free(tmp); | 383 g_free(tmp); |
383 } | 384 } |
385 #endif | |
384 /* Close the socket, clear the watcher and free memory */ | 386 /* Close the socket, clear the watcher and free memory */ |
385 bonjour_jabber_close_conversation(bb->conversation); | 387 bonjour_jabber_close_conversation(bb->conversation); |
386 bb->conversation = NULL; | 388 bb->conversation = NULL; |
387 } | 389 } |
388 | 390 |
423 ret = send(source, ss->msg, len, 0); | 425 ret = send(source, ss->msg, len, 0); |
424 | 426 |
425 if (ret == -1 && errno == EAGAIN) | 427 if (ret == -1 && errno == EAGAIN) |
426 return; | 428 return; |
427 else if (ret <= 0) { | 429 else if (ret <= 0) { |
428 const char *err = strerror(errno); | 430 const char *err = g_strerror(errno); |
429 PurpleConversation *conv; | 431 PurpleConversation *conv; |
430 | 432 |
431 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", | 433 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", |
432 purple_buddy_get_name(pb), bb->ip ? bb->ip : "(null)", bb->port_p2pj, err ? err : "(null)"); | 434 purple_buddy_get_name(pb), bb->ip ? bb->ip : "(null)", bb->port_p2pj, err ? err : "(null)"); |
433 | 435 |
478 ret = send(client_socket, stream_start, len, 0); | 480 ret = send(client_socket, stream_start, len, 0); |
479 | 481 |
480 if (ret == -1 && errno == EAGAIN) | 482 if (ret == -1 && errno == EAGAIN) |
481 ret = 0; | 483 ret = 0; |
482 else if (ret <= 0) { | 484 else if (ret <= 0) { |
483 const char *err = strerror(errno); | 485 const char *err = g_strerror(errno); |
484 | 486 |
485 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", | 487 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", |
486 purple_buddy_get_name(pb), bb->ip ? bb->ip : "(null)", bb->port_p2pj, err ? err : "(null)"); | 488 purple_buddy_get_name(pb), bb->ip ? bb->ip : "(null)", bb->port_p2pj, err ? err : "(null)"); |
487 | 489 |
488 close(client_socket); | 490 close(client_socket); |
519 { | 521 { |
520 PurpleBuddy *pb = NULL; | 522 PurpleBuddy *pb = NULL; |
521 struct sockaddr_in their_addr; /* connector's address information */ | 523 struct sockaddr_in their_addr; /* connector's address information */ |
522 socklen_t sin_size = sizeof(struct sockaddr); | 524 socklen_t sin_size = sizeof(struct sockaddr); |
523 int client_socket; | 525 int client_socket; |
526 int flags; | |
524 BonjourBuddy *bb; | 527 BonjourBuddy *bb; |
525 char *address_text = NULL; | 528 char *address_text = NULL; |
526 PurpleBuddyList *bl = purple_get_blist(); | 529 PurpleBuddyList *bl = purple_get_blist(); |
527 struct _check_buddy_by_address_t *cbba; | 530 struct _check_buddy_by_address_t *cbba; |
528 | 531 |
531 return; | 534 return; |
532 | 535 |
533 if ((client_socket = accept(server_socket, (struct sockaddr *)&their_addr, &sin_size)) == -1) | 536 if ((client_socket = accept(server_socket, (struct sockaddr *)&their_addr, &sin_size)) == -1) |
534 return; | 537 return; |
535 | 538 |
536 fcntl(client_socket, F_SETFL, O_NONBLOCK); | 539 flags = fcntl(client_socket, F_GETFL); |
540 fcntl(client_socket, F_SETFL, flags | O_NONBLOCK); | |
537 | 541 |
538 /* Look for the buddy that has opened the conversation and fill information */ | 542 /* Look for the buddy that has opened the conversation and fill information */ |
539 address_text = inet_ntoa(their_addr.sin_addr); | 543 address_text = inet_ntoa(their_addr.sin_addr); |
540 purple_debug_info("bonjour", "Received incoming connection from %s.\n", address_text); | 544 purple_debug_info("bonjour", "Received incoming connection from %s.\n", address_text); |
541 cbba = g_new0(struct _check_buddy_by_address_t, 1); | 545 cbba = g_new0(struct _check_buddy_by_address_t, 1); |
577 gboolean bind_successful; | 581 gboolean bind_successful; |
578 | 582 |
579 /* Open a listening socket for incoming conversations */ | 583 /* Open a listening socket for incoming conversations */ |
580 if ((data->socket = socket(PF_INET, SOCK_STREAM, 0)) < 0) | 584 if ((data->socket = socket(PF_INET, SOCK_STREAM, 0)) < 0) |
581 { | 585 { |
582 purple_debug_error("bonjour", "Cannot open socket: %s\n", strerror(errno)); | 586 purple_debug_error("bonjour", "Cannot open socket: %s\n", g_strerror(errno)); |
583 purple_connection_error_reason (data->account->gc, | 587 purple_connection_error_reason (data->account->gc, |
584 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | 588 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
585 _("Cannot open socket")); | 589 _("Cannot open socket")); |
586 return -1; | 590 return -1; |
587 } | 591 } |
588 | 592 |
589 /* Make the socket reusable */ | 593 /* Make the socket reusable */ |
590 if (setsockopt(data->socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) != 0) | 594 if (setsockopt(data->socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) != 0) |
591 { | 595 { |
592 purple_debug_error("bonjour", "Error setting socket options: %s\n", strerror(errno)); | 596 purple_debug_error("bonjour", "Error setting socket options: %s\n", g_strerror(errno)); |
593 purple_connection_error_reason (data->account->gc, | 597 purple_connection_error_reason (data->account->gc, |
594 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | 598 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
595 _("Error setting socket options")); | 599 _("Error setting socket options")); |
596 return -1; | 600 return -1; |
597 } | 601 } |
613 } | 617 } |
614 | 618 |
615 /* On no! We tried 10 ports and could not bind to ANY of them */ | 619 /* On no! We tried 10 ports and could not bind to ANY of them */ |
616 if (!bind_successful) | 620 if (!bind_successful) |
617 { | 621 { |
618 purple_debug_error("bonjour", "Cannot bind socket: %s\n", strerror(errno)); | 622 purple_debug_error("bonjour", "Cannot bind socket: %s\n", g_strerror(errno)); |
619 purple_connection_error_reason (data->account->gc, | 623 purple_connection_error_reason (data->account->gc, |
620 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | 624 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
621 _("Could not bind socket to port")); | 625 _("Could not bind socket to port")); |
622 return -1; | 626 return -1; |
623 } | 627 } |
624 | 628 |
625 /* Attempt to listen on the bound socket */ | 629 /* Attempt to listen on the bound socket */ |
626 if (listen(data->socket, 10) != 0) | 630 if (listen(data->socket, 10) != 0) |
627 { | 631 { |
628 purple_debug_error("bonjour", "Cannot listen on socket: %s\n", strerror(errno)); | 632 purple_debug_error("bonjour", "Cannot listen on socket: %s\n", g_strerror(errno)); |
629 purple_connection_error_reason (data->account->gc, | 633 purple_connection_error_reason (data->account->gc, |
630 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | 634 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
631 _("Could not listen on socket")); | 635 _("Could not listen on socket")); |
632 return -1; | 636 return -1; |
633 } | 637 } |
672 bb->conversation = NULL; | 676 bb->conversation = NULL; |
673 return; | 677 return; |
674 } | 678 } |
675 | 679 |
676 if (!bonjour_jabber_stream_init(pb, source)) { | 680 if (!bonjour_jabber_stream_init(pb, source)) { |
677 const char *err = strerror(errno); | 681 const char *err = g_strerror(errno); |
678 PurpleConversation *conv; | 682 PurpleConversation *conv; |
679 | 683 |
680 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", | 684 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", |
681 purple_buddy_get_name(pb), bb->ip ? bb->ip : "(null)", bb->port_p2pj, err ? err : "(null)"); | 685 purple_buddy_get_name(pb), bb->ip ? bb->ip : "(null)", bb->port_p2pj, err ? err : "(null)"); |
682 | 686 |