# HG changeset patch # User Sadrul Habib Chowdhury # Date 1191422520 0 # Node ID bd52427681ae37994dd5806e060ddf4da5ae2594 # Parent 09300c787a88eafeb5dae74454be18517a1c315a# Parent da25e749450a7f0b2d8b738f5ba723afe047e117 merge of '43311ea3963dadd958af56847cc36df60507673f' and '530c4f758bc1775758210bea1aa6273313d95b6d' diff -r 09300c787a88 -r bd52427681ae INSTALL --- a/INSTALL Wed Oct 03 14:39:43 2007 +0000 +++ b/INSTALL Wed Oct 03 14:42:00 2007 +0000 @@ -40,7 +40,8 @@ the package. 4. Type `make install' to install the programs and any data files and - documentation. + documentation. You must have write access to the prefix you are + installing to. See below for more details on the prefix. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the diff -r 09300c787a88 -r bd52427681ae libpurple/certificate.c --- a/libpurple/certificate.c Wed Oct 03 14:39:43 2007 +0000 +++ b/libpurple/certificate.c Wed Oct 03 14:42:00 2007 +0000 @@ -88,6 +88,19 @@ g_return_if_fail(vrq); + if (st == PURPLE_CERTIFICATE_VALID) { + purple_debug_info("certificate", + "Successfully verified certificate for %s\n", + vrq->subject_name); + } else { + purple_debug_info("certificate", + "Failed to verify certificate for %s\n", + vrq->subject_name); + } + + + + /* Pass the results on to the request's callback */ (vrq->cb)(st, vrq->cb_data); @@ -1372,7 +1385,8 @@ purple_debug_info("certificate/x509/tls_cached", "Checking for a CA with DN=%s\n", ca_id); - if ( !purple_certificate_pool_contains(ca, ca_id) ) { + ca_crt = purple_certificate_pool_retrieve(ca, ca_id); + if ( NULL == ca_crt ) { purple_debug_info("certificate/x509/tls_cached", "Certificate Authority with DN='%s' not " "found. I'll prompt the user, I guess.\n", @@ -1385,16 +1399,7 @@ return; } - ca_crt = purple_certificate_pool_retrieve(ca, ca_id); g_free(ca_id); - if (!ca_crt) { - purple_debug_error("certificate/x509/tls_cached", - "Certificate authority disappeared out " - "underneath me!\n"); - purple_certificate_verify_complete(vrq, - PURPLE_CERTIFICATE_INVALID); - return; - } /* Check the signature */ if ( !purple_certificate_signed_by(end_crt, ca_crt) ) { diff -r 09300c787a88 -r bd52427681ae libpurple/protocols/bonjour/Makefile.am --- a/libpurple/protocols/bonjour/Makefile.am Wed Oct 03 14:39:43 2007 +0000 +++ b/libpurple/protocols/bonjour/Makefile.am Wed Oct 03 14:42:00 2007 +0000 @@ -1,5 +1,6 @@ EXTRA_DIST = \ mdns_win32.c \ + dns_sd_proxy.c \ dns_sd_proxy.h \ Makefile.mingw diff -r 09300c787a88 -r bd52427681ae libpurple/protocols/bonjour/Makefile.mingw --- a/libpurple/protocols/bonjour/Makefile.mingw Wed Oct 03 14:39:43 2007 +0000 +++ b/libpurple/protocols/bonjour/Makefile.mingw Wed Oct 03 14:42:00 2007 +0000 @@ -45,6 +45,7 @@ ## C_SRC = bonjour.c \ buddy.c \ + dns_sd_proxy.c \ mdns_common.c \ mdns_win32.c \ parser.c \ @@ -59,11 +60,15 @@ -lglib-2.0 \ -lws2_32 \ -lintl \ - -ldnssd \ -lnetapi32 \ -lxml2 \ -lpurple +ifeq ($(LINK_DNS_SD_DIRECTLY), 1) + CFLAGS += -DLINK_DNS_SD_DIRECTLY + LIBS += -ldnssd +endif + include $(PIDGIN_COMMON_RULES) ## diff -r 09300c787a88 -r bd52427681ae libpurple/protocols/bonjour/bonjour.c --- a/libpurple/protocols/bonjour/bonjour.c Wed Oct 03 14:39:43 2007 +0000 +++ b/libpurple/protocols/bonjour/bonjour.c Wed Oct 03 14:42:00 2007 +0000 @@ -26,6 +26,7 @@ #define UNICODE #include #include +#include "dns_sd_proxy.h" #endif #include "internal.h" @@ -99,6 +100,17 @@ PurpleStatus *status; PurplePresence *presence; +#ifdef _WIN32 + if (!dns_sd_available()) { + gc->wants_to_die = TRUE; + purple_connection_error(gc, + _("The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: " + "http://developer.pidgin.im/wiki/Using%20Pidgin#CanIusePidginforBonjourLink-LocalMessaging" + " for more information.")); + return; + } +#endif + gc->flags |= PURPLE_CONNECTION_HTML; gc->proto_data = bd = g_new0(BonjourData, 1); @@ -155,13 +167,13 @@ BonjourData *bd = connection->proto_data; /* Stop looking for buddies in the LAN */ - if (bd->dns_sd_data != NULL) + if (bd != NULL && bd->dns_sd_data != NULL) { bonjour_dns_sd_stop(bd->dns_sd_data); bonjour_dns_sd_free(bd->dns_sd_data); } - if (bd->jabber_data != NULL) + if (bd != NULL && bd->jabber_data != NULL) { /* Stop waiting for conversations */ bonjour_jabber_stop(bd->jabber_data); diff -r 09300c787a88 -r bd52427681ae libpurple/protocols/bonjour/dns_sd_proxy.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/bonjour/dns_sd_proxy.c Wed Oct 03 14:42:00 2007 +0000 @@ -0,0 +1,181 @@ +/** + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA. + */ + +#include "win32dep.h" +#include "dns_sd_proxy.h" + +#ifndef LINK_DNS_SD_DIRECTLY +static DNSServiceErrorType (DNSSD_API* _DNSServiceAddRecord)(DNSServiceRef sdRef, DNSRecordRef *RecordRef, DNSServiceFlags flags, + uint16_t rrtype, uint16_t rdlen, const void *rdata, uint32_t ttl); +static DNSServiceErrorType (DNSSD_API* _DNSServiceBrowse)(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, + const char *regtype, const char *domain, DNSServiceBrowseReply callBack, void *context); +static int (DNSSD_API* _DNSServiceConstructFullName)(char *fullName, const char *service, const char *regtype, const char *domain); +static DNSServiceErrorType (DNSSD_API* _DNSServiceProcessResult)(DNSServiceRef sdRef); +static DNSServiceErrorType (DNSSD_API* _DNSServiceQueryRecord)(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, + const char *fullname, uint16_t rrtype, uint16_t rrclass, DNSServiceQueryRecordReply callBack, void *context); +static void (DNSSD_API* _DNSServiceRefDeallocate)(DNSServiceRef sdRef); +static int (DNSSD_API* _DNSServiceRefSockFD)(DNSServiceRef sdRef); +static DNSServiceErrorType (DNSSD_API* _DNSServiceRegister)(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, + const char *name, const char *regtype, const char *domain, const char *host, uint16_t port, uint16_t txtLen, + const void *txtRecord, DNSServiceRegisterReply callBack, void *context); +static DNSServiceErrorType (DNSSD_API* _DNSServiceResolve)(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *name, + const char *regtype, const char *domain, DNSServiceResolveReply callBack, void *context); +static DNSServiceErrorType (DNSSD_API* _DNSServiceRemoveRecord)(DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags); +static DNSServiceErrorType (DNSSD_API* _DNSServiceUpdateRecord)(DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags, + uint16_t rdlen, const void *rdata, uint32_t ttl); +static void (DNSSD_API* _TXTRecordCreate)(TXTRecordRef *txtRecord, uint16_t bufferLen, void *buffer); +static void (DNSSD_API* _TXTRecordDeallocate)(TXTRecordRef *txtRecord); +static const void * (DNSSD_API* _TXTRecordGetBytesPtr)(const TXTRecordRef *txtRecord); +static int16_t (DNSSD_API* _TXTRecordGetLength)(const TXTRecordRef *txtRecord); +static const void * (DNSSD_API* _TXTRecordGetValuePtr)(uint16_t txtLen, const void *txtRecord, const char *key, uint8_t *valueLen); +static DNSServiceErrorType (DNSSD_API* _TXTRecordSetValue)(TXTRecordRef *txtRecord, const char *key, uint8_t valueSize, const void *value); +#endif + +gboolean dns_sd_available(void) { +#ifndef LINK_DNS_SD_DIRECTLY + static gboolean initialized = FALSE; + static gboolean loaded = FALSE; + + if (!initialized) { + initialized = TRUE; + if ((_DNSServiceAddRecord = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceAddRecord")) + && (_DNSServiceBrowse = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceBrowse")) + && (_DNSServiceConstructFullName = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceConstructFullName")) + && (_DNSServiceProcessResult = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceProcessResult")) + && (_DNSServiceQueryRecord = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceQueryRecord")) + && (_DNSServiceRefDeallocate = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceRefDeallocate")) + && (_DNSServiceRefSockFD = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceRefSockFD")) + && (_DNSServiceRegister = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceRegister")) + && (_DNSServiceResolve = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceResolve")) + && (_DNSServiceRemoveRecord = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceRemoveRecord")) + && (_DNSServiceUpdateRecord = (void *) wpurple_find_and_loadproc("dnssd.dll", "DNSServiceUpdateRecord")) + && (_TXTRecordCreate = (void *) wpurple_find_and_loadproc("dnssd.dll", "TXTRecordCreate")) + && (_TXTRecordDeallocate = (void *) wpurple_find_and_loadproc("dnssd.dll", "TXTRecordDeallocate")) + && (_TXTRecordGetBytesPtr = (void *) wpurple_find_and_loadproc("dnssd.dll", "TXTRecordGetBytesPtr")) + && (_TXTRecordGetLength = (void *) wpurple_find_and_loadproc("dnssd.dll", "TXTRecordGetLength")) + && (_TXTRecordGetValuePtr = (void *) wpurple_find_and_loadproc("dnssd.dll", "TXTRecordGetValuePtr")) + && (_TXTRecordSetValue = (void *) wpurple_find_and_loadproc("dnssd.dll", "TXTRecordSetValue"))) { + loaded = TRUE; + } + } + return loaded; +#else + return TRUE; +#endif +} + +#ifndef LINK_DNS_SD_DIRECTLY + +DNSServiceErrorType _wpurple_DNSServiceAddRecord(DNSServiceRef sdRef, DNSRecordRef *RecordRef, DNSServiceFlags flags, + uint16_t rrtype, uint16_t rdlen, const void *rdata, uint32_t ttl) { + g_return_val_if_fail(_DNSServiceAddRecord != NULL, kDNSServiceErr_Unknown); + return (_DNSServiceAddRecord)(sdRef, RecordRef, flags, rrtype, rdlen, rdata, ttl); +} + +DNSServiceErrorType _wpurple_DNSServiceBrowse(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, + const char *regtype, const char *domain, DNSServiceBrowseReply callBack, void *context) { + g_return_val_if_fail(_DNSServiceBrowse != NULL, kDNSServiceErr_Unknown); + return (_DNSServiceBrowse)(sdRef, flags, interfaceIndex, regtype, domain, callBack, context); +} + +int _wpurple_DNSServiceConstructFullName(char *fullName, const char *service, const char *regtype, const char *domain) { + g_return_val_if_fail(_DNSServiceConstructFullName != NULL, 0); + return (_DNSServiceConstructFullName)(fullName, service, regtype, domain); +} + +DNSServiceErrorType _wpurple_DNSServiceProcessResult(DNSServiceRef sdRef) { + g_return_val_if_fail(_DNSServiceProcessResult != NULL, kDNSServiceErr_Unknown); + return (_DNSServiceProcessResult)(sdRef); +} + + +DNSServiceErrorType _wpurple_DNSServiceQueryRecord(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, + const char *fullname, uint16_t rrtype, uint16_t rrclass, DNSServiceQueryRecordReply callBack, void *context) { + g_return_val_if_fail(_DNSServiceQueryRecord != NULL, kDNSServiceErr_Unknown); + return (_DNSServiceQueryRecord)(sdRef, flags, interfaceIndex, fullname, rrtype, rrclass, callBack, context); +} + +void _wpurple_DNSServiceRefDeallocate(DNSServiceRef sdRef) { + g_return_if_fail(_DNSServiceRefDeallocate != NULL); + (_DNSServiceRefDeallocate)(sdRef); +} + +int _wpurple_DNSServiceRefSockFD(DNSServiceRef sdRef) { + g_return_val_if_fail(_DNSServiceRefSockFD != NULL, -1); + return (_DNSServiceRefSockFD)(sdRef); +} + +DNSServiceErrorType _wpurple_DNSServiceRegister(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, + const char *name, const char *regtype, const char *domain, const char *host, uint16_t port, uint16_t txtLen, + const void *txtRecord, DNSServiceRegisterReply callBack, void *context) { + g_return_val_if_fail(_DNSServiceRegister != NULL, kDNSServiceErr_Unknown); + return (_DNSServiceRegister)(sdRef, flags, interfaceIndex, name, regtype, domain, host, port, txtLen, txtRecord, callBack, context); +} + +DNSServiceErrorType _wpurple_DNSServiceResolve(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *name, + const char *regtype, const char *domain, DNSServiceResolveReply callBack, void *context) { + g_return_val_if_fail(_DNSServiceResolve != NULL, kDNSServiceErr_Unknown); + return (_DNSServiceResolve)(sdRef, flags, interfaceIndex, name, regtype, domain, callBack, context); +} + +DNSServiceErrorType _wpurple_DNSServiceRemoveRecord(DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags) { + g_return_val_if_fail(_DNSServiceRemoveRecord != NULL, kDNSServiceErr_Unknown); + return (_DNSServiceRemoveRecord)(sdRef, RecordRef, flags); +} + +DNSServiceErrorType _wpurple_DNSServiceUpdateRecord(DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags, + uint16_t rdlen, const void *rdata, uint32_t ttl) { + g_return_val_if_fail(_DNSServiceUpdateRecord != NULL, kDNSServiceErr_Unknown); + return (_DNSServiceUpdateRecord)(sdRef, RecordRef, flags, rdlen, rdata, ttl); +} + +void _wpurple_TXTRecordCreate(TXTRecordRef *txtRecord, uint16_t bufferLen, void *buffer) { + g_return_if_fail(_TXTRecordCreate != NULL); + (_TXTRecordCreate)(txtRecord, bufferLen, buffer); +} + +void _wpurple_TXTRecordDeallocate(TXTRecordRef *txtRecord) { + g_return_if_fail(_TXTRecordDeallocate != NULL); + (_TXTRecordDeallocate)(txtRecord); +} + +const void * _wpurple_TXTRecordGetBytesPtr(const TXTRecordRef *txtRecord) { + g_return_val_if_fail(_TXTRecordGetBytesPtr != NULL, NULL); + return (_TXTRecordGetBytesPtr)(txtRecord); +} + +uint16_t _wpurple_TXTRecordGetLength(const TXTRecordRef *txtRecord) { + g_return_val_if_fail(_TXTRecordGetLength != NULL, 0); + return (_TXTRecordGetLength)(txtRecord); +} + +const void * _wpurple_TXTRecordGetValuePtr(uint16_t txtLen, const void *txtRecord, const char *key, uint8_t *valueLen) { + g_return_val_if_fail(_TXTRecordGetValuePtr != NULL, NULL); + return (_TXTRecordGetValuePtr)(txtLen, txtRecord, key, valueLen); +} + +DNSServiceErrorType _wpurple_TXTRecordSetValue(TXTRecordRef *txtRecord, const char *key, uint8_t valueSize, const void *value) { + g_return_val_if_fail(_TXTRecordSetValue != NULL, kDNSServiceErr_Unknown); + return (_TXTRecordSetValue)(txtRecord, key, valueSize, value); +} + +#endif /*LINK_DNS_SD_DIRECTLY*/ + diff -r 09300c787a88 -r bd52427681ae libpurple/protocols/bonjour/dns_sd_proxy.h --- a/libpurple/protocols/bonjour/dns_sd_proxy.h Wed Oct 03 14:39:43 2007 +0000 +++ b/libpurple/protocols/bonjour/dns_sd_proxy.h Wed Oct 03 14:42:00 2007 +0000 @@ -10,4 +10,85 @@ #include +gboolean dns_sd_available(void); + +#ifndef LINK_DNS_SD_DIRECTLY + +DNSServiceErrorType _wpurple_DNSServiceAddRecord(DNSServiceRef sdRef, DNSRecordRef *RecordRef, DNSServiceFlags flags, + uint16_t rrtype, uint16_t rdlen, const void *rdata, uint32_t ttl); +#define DNSServiceAddRecord(sdRef, RecordRef, flags, rrtype, rdlen, rdata, ttl) \ + _wpurple_DNSServiceAddRecord(sdRef, RecordRef, flags, rrtype, rdlen, rdata, ttl) + +DNSServiceErrorType _wpurple_DNSServiceBrowse(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, + const char *regtype, const char *domain, DNSServiceBrowseReply callBack, void *context); +#define DNSServiceBrowse(sdRef, flags, interfaceIndex, regtype, domain, callBack, context) \ + _wpurple_DNSServiceBrowse(sdRef, flags, interfaceIndex, regtype, domain, callBack, context) + +int _wpurple_DNSServiceConstructFullName(char *fullName, const char *service, const char *regtype, const char *domain); +#define DNSServiceConstructFullName(fullName, service, regtype, domain) \ + _wpurple_DNSServiceConstructFullName(fullName, service, regtype, domain) + +DNSServiceErrorType _wpurple_DNSServiceProcessResult(DNSServiceRef sdRef); +#define DNSServiceProcessResult(sdRef) \ + _wpurple_DNSServiceProcessResult(sdRef); + +DNSServiceErrorType _wpurple_DNSServiceQueryRecord(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, + const char *fullname, uint16_t rrtype, uint16_t rrclass, DNSServiceQueryRecordReply callBack, void *context); +#define DNSServiceQueryRecord(sdRef, flags, interfaceIndex, fullname, rrtype, rrclass, callBack, context) \ + _wpurple_DNSServiceQueryRecord(sdRef, flags, interfaceIndex, fullname, rrtype, rrclass, callBack, context) + +void _wpurple_DNSServiceRefDeallocate(DNSServiceRef sdRef); +#define DNSServiceRefDeallocate(sdRef) \ + _wpurple_DNSServiceRefDeallocate(sdRef) + +int _wpurple_DNSServiceRefSockFD(DNSServiceRef sdRef); +#define DNSServiceRefSockFD(sdRef) \ + _wpurple_DNSServiceRefSockFD(sdRef) + +DNSServiceErrorType _wpurple_DNSServiceRegister(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, + const char *name, const char *regtype, const char *domain, const char *host, uint16_t port, uint16_t txtLen, + const void *txtRecord, DNSServiceRegisterReply callBack, void *context); +#define DNSServiceRegister(sdRef, flags, interfaceIndex, name, regtype, domain, host, port, txtLen, txtRecord, callBack, context) \ + _wpurple_DNSServiceRegister(sdRef, flags, interfaceIndex, name, regtype, domain, host, port, txtLen, txtRecord, callBack, context) + +DNSServiceErrorType _wpurple_DNSServiceResolve(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *name, + const char *regtype, const char *domain, DNSServiceResolveReply callBack, void *context); +#define DNSServiceResolve(sdRef, flags, interfaceIndex, name, regtype, domain, callBack, context) \ + _wpurple_DNSServiceResolve(sdRef, flags, interfaceIndex, name, regtype, domain, callBack, context) + +DNSServiceErrorType _wpurple_DNSServiceRemoveRecord(DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags); +#define DNSServiceRemoveRecord(sdRef, RecordRef, flags) \ + _wpurple_DNSServiceRemoveRecord(sdRef, RecordRef, flags) + +DNSServiceErrorType _wpurple_DNSServiceUpdateRecord(DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags, + uint16_t rdlen, const void *rdata, uint32_t ttl); +#define DNSServiceUpdateRecord(sdRef, RecordRef, flags, rdlen, rdata, ttl) \ + _wpurple_DNSServiceUpdateRecord(sdRef, RecordRef, flags, rdlen, rdata, ttl) + +void _wpurple_TXTRecordCreate(TXTRecordRef *txtRecord, uint16_t bufferLen, void *buffer); +#define TXTRecordCreate(txtRecord, bufferLen, buffer) \ + _wpurple_TXTRecordCreate(txtRecord, bufferLen, buffer) + +void _wpurple_TXTRecordDeallocate(TXTRecordRef *txtRecord); +#define TXTRecordDeallocate(txtRecord) \ + _wpurple_TXTRecordDeallocate(txtRecord) + +const void * _wpurple_TXTRecordGetBytesPtr(const TXTRecordRef *txtRecord); +#define TXTRecordGetBytesPtr(txtRecord) \ + _wpurple_TXTRecordGetBytesPtr(txtRecord) + +uint16_t _wpurple_TXTRecordGetLength(const TXTRecordRef *txtRecord); +#define TXTRecordGetLength(txtRecord) \ + _wpurple_TXTRecordGetLength(txtRecord) + +const void * _wpurple_TXTRecordGetValuePtr(uint16_t txtLen, const void *txtRecord, const char *key, uint8_t *valueLen); +#define TXTRecordGetValuePtr(txtLen, txtRecord, key, valueLen) \ + _wpurple_TXTRecordGetValuePtr(txtLen, txtRecord, key, valueLen) + +DNSServiceErrorType _wpurple_TXTRecordSetValue(TXTRecordRef *txtRecord, const char *key, uint8_t valueSize, const void *value); +#define TXTRecordSetValue(txtRecord, key, valueSize, value) \ + _wpurple_TXTRecordSetValue(txtRecord, key, valueSize, value) + +#endif /*LINK_DNS_SD_DIRECTLY*/ + #endif diff -r 09300c787a88 -r bd52427681ae libpurple/protocols/bonjour/mdns_win32.c --- a/libpurple/protocols/bonjour/mdns_win32.c Wed Oct 03 14:39:43 2007 +0000 +++ b/libpurple/protocols/bonjour/mdns_win32.c Wed Oct 03 14:42:00 2007 +0000 @@ -1,4 +1,9 @@ -/* +/** + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or diff -r 09300c787a88 -r bd52427681ae libpurple/protocols/gg/buddylist.c --- a/libpurple/protocols/gg/buddylist.c Wed Oct 03 14:39:43 2007 +0000 +++ b/libpurple/protocols/gg/buddylist.c Wed Oct 03 14:42:00 2007 +0000 @@ -27,6 +27,13 @@ #include "gg-utils.h" #include "buddylist.h" +#define F_FIRSTNAME 0 +#define F_LASTNAME 1 +/* #define F_ 2 */ +#define F_NICKNAME 3 +#define F_PHONE 4 +#define F_GROUP 5 +#define F_UIN 6 /* void ggp_buddylist_send(PurpleConnection *gc) {{{ */ void ggp_buddylist_send(PurpleConnection *gc) @@ -90,7 +97,7 @@ gchar **users_tbl; int i; - /* Don't limit a number of records in a buddylist. */ + /* Don't limit the number of records in a buddylist. */ users_tbl = g_strsplit(buddylist, "\r\n", -1); for (i = 0; users_tbl[i] != NULL; i++) { @@ -108,8 +115,8 @@ continue; } - show = charset_convert(data_tbl[3], "CP1250", "UTF-8"); - name = data_tbl[6]; + show = charset_convert(data_tbl[F_NICKNAME], "CP1250", "UTF-8"); + name = data_tbl[F_UIN]; if ('\0' == *name) { purple_debug_warning("gg", "Something is wrong on line %d of the buddylist. Skipping.\n", @@ -121,7 +128,7 @@ show = g_strdup(name); } - purple_debug_info("gg", "got buddy: name=%s show=%s\n", name, show); + purple_debug_info("gg", "got buddy: name=%s; show=%s\n", name, show); if (purple_find_buddy(purple_connection_get_account(gc), name)) { g_free(show); @@ -131,19 +138,19 @@ g = g_strdup("Gadu-Gadu"); - if ('\0' != data_tbl[5]) { + if ('\0' != data_tbl[F_GROUP]) { /* XXX: Probably buddy should be added to all the groups. */ /* Hard limit to at most 50 groups */ - gchar **group_tbl = g_strsplit(data_tbl[5], ",", 50); + gchar **group_tbl = g_strsplit(data_tbl[F_GROUP], ",", 50); if (ggp_array_size(group_tbl) > 0) { g_free(g); - g = g_strdup(group_tbl[0]); + g = charset_convert(group_tbl[0], "CP1250", "UTF-8"); } g_strfreev(group_tbl); } buddy = purple_buddy_new(purple_connection_get_account(gc), name, - strlen(show) ? show : NULL); + strlen(show) ? show : NULL); if (!(group = purple_find_group(g))) { group = purple_group_new(g); @@ -159,7 +166,6 @@ g_strfreev(users_tbl); ggp_buddylist_send(gc); - } /* }}} */ @@ -192,8 +198,7 @@ continue; purple_prpl_got_user_status( - purple_connection_get_account(gc), - buddy->name, "offline", NULL); + account, buddy->name, "offline", NULL); purple_debug_info("gg", "ggp_buddylist_offline: gone: %s\n", diff -r 09300c787a88 -r bd52427681ae libpurple/protocols/msn/soap.c --- a/libpurple/protocols/msn/soap.c Wed Oct 03 14:39:43 2007 +0000 +++ b/libpurple/protocols/msn/soap.c Wed Oct 03 14:42:00 2007 +0000 @@ -26,7 +26,7 @@ #include "msn.h" #include "soap.h" - +#define MSN_SOAP_DEBUG /*local function prototype*/ void msn_soap_set_process_step(MsnSoapConn *soapconn, MsnSoapStep step); diff -r 09300c787a88 -r bd52427681ae pidgin/pidginstock.c --- a/pidgin/pidginstock.c Wed Oct 03 14:39:43 2007 +0000 +++ b/pidgin/pidginstock.c Wed Oct 03 14:42:00 2007 +0000 @@ -114,11 +114,11 @@ { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, - { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, - { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, + { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, + { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, diff -r 09300c787a88 -r bd52427681ae pidgin/pixmaps/status/11/Makefile.am --- a/pidgin/pixmaps/status/11/Makefile.am Wed Oct 03 14:39:43 2007 +0000 +++ b/pidgin/pixmaps/status/11/Makefile.am Wed Oct 03 14:42:00 2007 +0000 @@ -6,6 +6,8 @@ chat.png \ extended-away.png \ invisible.png \ + log-in.png \ + log-out.png \ offline.png \ person.png diff -r 09300c787a88 -r bd52427681ae pidgin/pixmaps/status/11/log-in.png Binary file pidgin/pixmaps/status/11/log-in.png has changed diff -r 09300c787a88 -r bd52427681ae pidgin/pixmaps/status/11/log-out.png Binary file pidgin/pixmaps/status/11/log-out.png has changed diff -r 09300c787a88 -r bd52427681ae pidgin/pixmaps/toolbar/11/message-new.png Binary file pidgin/pixmaps/toolbar/11/message-new.png has changed diff -r 09300c787a88 -r bd52427681ae pidgin/pixmaps/toolbar/Makefile.am --- a/pidgin/pixmaps/toolbar/Makefile.am Wed Oct 03 14:39:43 2007 +0000 +++ b/pidgin/pixmaps/toolbar/Makefile.am Wed Oct 03 14:42:00 2007 +0000 @@ -1,6 +1,11 @@ SUBDIRS = 16 22 +TINY_ICONS = 11/message-new.png EXTRA_DIST = \ Makefile.mingw \ 16/Makefile.mingw \ - 22/Makefile.mingw + 22/Makefile.mingw \ + $(TINY_ICONS) + +pidgintinytoolbarpixdir = $(datadir)/pixmaps/pidgin/toolbar/11 +pidgintinytoolbarpix_DATA = $(TINY_ICONS) diff -r 09300c787a88 -r bd52427681ae pidgin/win32/nsis/pixmaps/pidgin-intro.bmp Binary file pidgin/win32/nsis/pixmaps/pidgin-intro.bmp has changed diff -r 09300c787a88 -r bd52427681ae share/ca-certs/Makefile.am --- a/share/ca-certs/Makefile.am Wed Oct 03 14:39:43 2007 +0000 +++ b/share/ca-certs/Makefile.am Wed Oct 03 14:42:00 2007 +0000 @@ -2,6 +2,7 @@ cacerts_DATA = \ Equifax_Secure_CA.pem \ GTE_CyberTrust_Global_Root.pem \ + Microsoft_Secure_Server_Authority.pem \ Verisign_RSA_Secure_Server_CA.pem \ Verisign_Class3_Primary_CA.pem diff -r 09300c787a88 -r bd52427681ae share/ca-certs/Microsoft_Secure_Server_Authority.pem --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/ca-certs/Microsoft_Secure_Server_Authority.pem Wed Oct 03 14:42:00 2007 +0000 @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIE1TCCA72gAwIBAgIKYSsApAADAAAAFDANBgkqhkiG9w0BAQUFADAnMSUwIwYD +VQQDExxNaWNyb3NvZnQgSW50ZXJuZXQgQXV0aG9yaXR5MB4XDTA2MDQyMTE5MTEw +NFoXDTA5MDQxOTIzNTkwMFowgYsxEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJ +kiaJk/IsZAEZFgltaWNyb3NvZnQxFDASBgoJkiaJk/IsZAEZFgRjb3JwMRcwFQYK +CZImiZPyLGQBGRYHcmVkbW9uZDEqMCgGA1UEAxMhTWljcm9zb2Z0IFNlY3VyZSBT +ZXJ2ZXIgQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +syn2tJzCJKsQy98cYrzBT0qMSqTMibRel34u64jqd1GKP9cRMHagyNLZIb1rv8NZ +XPdf2uI8hGc4lxRh4iprbFPOZSiHQIyq9zoqLS7Bh/KnqnRX4CCntCQbWVa/s5c5 +FbGD5XG5AvA8sjn56WPotYLGeWrSZ/k2bcH9YgvQ2Yrt8t1VxPQciSuX82KSn2Kx +xxJKgQtAgZpyekR5QdIUUvQsEAPaCfWRsF/OMQoyc4UeAxAELavr2vlq869ye3Fu +f3fUhVEk8kxtiVPYWYBTAhWts62pEwaKGPteMsGnvbX+BRgIwc55vfs6KWXxnBUL +9Q8BfQQLbT8nQe7hO4XXMQIDAQABo4IBnDCCAZgwEgYDVR0TAQH/BAgwBgEB/wIB +ATAdBgNVHQ4EFgQUp08F+9GOQVM3lcpL4UMfWutNzVAwCwYDVR0PBAQDAgGGMBIG +CSsGAQQBgjcVAQQFAgMDAAMwIwYJKwYBBAGCNxUCBBYEFMnAnEM4ke3T6fpSclUI +g7XN8o57MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMB8GA1UdIwQYMBaAFDNf +3Q+3nFzO7ofdcHCLX33PIry5MGYGA1UdHwRfMF0wW6BZoFeGNGh0dHA6Ly9jcmwu +bWljcm9zb2Z0LmNvbS9wa2kvbXNjb3JwL2NybC9tc3d3dygzKS5jcmyGH2h0dHA6 +Ly9jb3JwcGtpL2NybC9tc3d3dygzKS5jcmwweQYIKwYBBQUHAQEEbTBrMDwGCCsG +AQUFBzAChjBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL21zY29ycC9tc3d3 +dygzKS5jcnQwKwYIKwYBBQUHMAKGH2h0dHA6Ly9jb3JwcGtpL2FpYS9tc3d3dygz +KS5jcnQwDQYJKoZIhvcNAQEFBQADggEBAIJDQpkqhodC3ZmKPB4dTveoFCpuc4C0 +qdXPLggvRiTnQJP/SRdnfQwkaulDS3771zWo3fO1/tTiCmVvtU4LNbISpQmrz41q +AP2QIUl/d4Fjiaz0qchNxmTRlVLGsTrwkMMkOh9MUQEcNyk9RuGepf/1+66qeEnx +eCgK09yIcbgdE9ffk5ueTX7TNfgoNZO9ORnRS1p7nra3b0Wi1kdGqDmbpw7We+M8 +6B8VpPa0QaofgRdl2dzOijd7hGN+cgRNMvdGpRxzkaWUA52rBOrEVyJLu2IUksPV +0Q/0ZZMNZXJh8MmWW/o8ebQZJQshN5p4M7HiUN/cZ2onnrdZSpIwyAU= +-----END CERTIFICATE-----