comparison libpurple/protocols/bonjour/mdns_win32.c @ 30583:9c8b28dc6656

The hostname used for a bonjour account should always be the current machine name. This fixes our behavior so the previous statement is always the case. Unfortunately, this means that if the hostname was previously not the current machine name, the bonjour jid ends up looking like "username\40otherhost@hostname". Fixes #12674
author Daniel Atallah <daniel.atallah@gmail.com>
date Mon, 04 Oct 2010 00:48:25 +0000
parents 014a58e994da
children a5b556ac1de5
comparison
equal deleted inserted replaced
30582:014a58e994da 30583:9c8b28dc6656
24 24
25 #include "buddy.h" 25 #include "buddy.h"
26 #include "mdns_interface.h" 26 #include "mdns_interface.h"
27 #include "dns_sd_proxy.h" 27 #include "dns_sd_proxy.h"
28 #include "mdns_common.h" 28 #include "mdns_common.h"
29 #include "bonjour.h"
29 30
30 static GSList *pending_buddies = NULL; 31 static GSList *pending_buddies = NULL;
31 32
32 typedef struct _dnssd_service_ref_handler { 33 typedef struct _dnssd_service_ref_handler {
33 DNSServiceRef sdRef; 34 DNSServiceRef sdRef;
324 325
325 if (errorCode != kDNSServiceErr_NoError) 326 if (errorCode != kDNSServiceErr_NoError)
326 purple_debug_error("bonjour", "service browser - callback error (%d)\n", errorCode); 327 purple_debug_error("bonjour", "service browser - callback error (%d)\n", errorCode);
327 else if (flags & kDNSServiceFlagsAdd) { 328 else if (flags & kDNSServiceFlagsAdd) {
328 /* A presence service instance has been discovered... check it isn't us! */ 329 /* A presence service instance has been discovered... check it isn't us! */
329 if (purple_utf8_strcasecmp(serviceName, account->username) != 0) { 330 if (purple_utf8_strcasecmp(serviceName, bonjour_get_jid(account)) != 0) {
330 DNSServiceErrorType resErrorCode; 331 DNSServiceErrorType resErrorCode;
331 /* OK, lets go ahead and resolve it to add to the buddy list */ 332 /* OK, lets go ahead and resolve it to add to the buddy list */
332 ResolveCallbackArgs *args = g_new0(ResolveCallbackArgs, 1); 333 ResolveCallbackArgs *args = g_new0(ResolveCallbackArgs, 1);
333 DNSServiceRef resolver_sr; 334 DNSServiceRef resolver_sr;
334 335
452 * mdns_interface functions * 453 * mdns_interface functions *
453 ****************************/ 454 ****************************/
454 455
455 gboolean _mdns_init_session(BonjourDnsSd *data) { 456 gboolean _mdns_init_session(BonjourDnsSd *data) {
456 data->mdns_impl_data = g_new0(Win32SessionImplData, 1); 457 data->mdns_impl_data = g_new0(Win32SessionImplData, 1);
458
459 bonjour_dns_sd_set_jid(data->account, purple_get_host_name());
460
457 return TRUE; 461 return TRUE;
458 } 462 }
459 463
460 gboolean _mdns_publish(BonjourDnsSd *data, PublishType type, GSList *records) { 464 gboolean _mdns_publish(BonjourDnsSd *data, PublishType type, GSList *records) {
461 TXTRecordRef dns_data; 465 TXTRecordRef dns_data;
484 488
485 switch (type) { 489 switch (type) {
486 case PUBLISH_START: 490 case PUBLISH_START:
487 purple_debug_info("bonjour", "Registering presence on port %d\n", data->port_p2pj); 491 purple_debug_info("bonjour", "Registering presence on port %d\n", data->port_p2pj);
488 errorCode = DNSServiceRegister(&presence_sr, kDNSServiceInterfaceIndexAny, 492 errorCode = DNSServiceRegister(&presence_sr, kDNSServiceInterfaceIndexAny,
489 0, purple_account_get_username(data->account), LINK_LOCAL_RECORD_NAME, 493 0, bonjour_get_jid(data->account), LINK_LOCAL_RECORD_NAME,
490 NULL, NULL, htons(data->port_p2pj), TXTRecordGetLength(&dns_data), TXTRecordGetBytesPtr(&dns_data), 494 NULL, NULL, htons(data->port_p2pj), TXTRecordGetLength(&dns_data), TXTRecordGetBytesPtr(&dns_data),
491 _mdns_service_register_callback, NULL); 495 _mdns_service_register_callback, NULL);
492 break; 496 break;
493 497
494 case PUBLISH_UPDATE: 498 case PUBLISH_UPDATE: