changeset 29081:299ef6fd1a23

propagate from branch 'im.pidgin.pidgin' (head dbaa86f7e1344923764e572cebfb30ce7c53ee80) to branch 'im.pidgin.pidgin.next.minor' (head 035e390145aacfff19b413ac1870e7f1b81739e2)
author John Bailey <rekkanoryo@rekkanoryo.org>
date Sat, 22 Aug 2009 18:54:15 +0000
parents 84804fd076bc (current diff) 4b61989ab198 (diff)
children 39716f7d2c93
files ChangeLog configure.ac
diffstat 91 files changed, 565 insertions(+), 312 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Aug 22 18:05:10 2009 +0000
+++ b/ChangeLog	Sat Aug 22 18:54:15 2009 +0000
@@ -12,6 +12,7 @@
 	* Escape status messages that have HTML entities in the Get Info dialog.
 	* Fix connecting to XMPP domains with no SRV records from Pidgin on
 	  Windows.
+	* Fix typing notifications with Pidgin 2.5.9 or earlier.
 
 	Finch:
 	* Properly detect libpanel on OpenBSD.  (Brad Smith)
--- a/configure.ac	Sat Aug 22 18:05:10 2009 +0000
+++ b/configure.ac	Sat Aug 22 18:54:15 2009 +0000
@@ -810,6 +810,7 @@
 		fi
 	fi
 fi
+AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farsight" != "xno")
 
 AC_ARG_ENABLE(idn,
 	[AC_HELP_STRING([--disable-idn], [compile without IDN support])],
--- a/finch/plugins/grouping.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/finch/plugins/grouping.c	Sat Aug 22 18:54:15 2009 +0000
@@ -15,7 +15,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 
 #define PURPLE_PLUGIN
--- a/libpurple/certificate.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/certificate.c	Sat Aug 22 18:54:15 2009 +0000
@@ -43,6 +43,91 @@
 /** List of registered Pools */
 static GList *cert_pools = NULL;
 
+/*
+ * TODO: Merge this with PurpleCertificateVerificationStatus for 3.0.0 */
+typedef enum {
+	PURPLE_CERTIFICATE_UNKNOWN_ERROR = -1,
+
+	/* Not an error */
+	PURPLE_CERTIFICATE_NO_PROBLEMS = 0,
+
+	/* Non-fatal */
+	PURPLE_CERTIFICATE_NON_FATALS_MASK = 0x0000FFFF,
+
+	/* The certificate is self-signed. */
+	PURPLE_CERTIFICATE_SELF_SIGNED = 0x01,
+
+	/* The CA is not in libpurple's pool of certificates. */
+	PURPLE_CERTIFICATE_CA_UNKNOWN = 0x02,
+
+	/* The current time is before the certificate's specified
+	 * activation time.
+	 */
+	PURPLE_CERTIFICATE_NOT_ACTIVATED = 0x04,
+
+	/* The current time is after the certificate's specified expiration time */
+	PURPLE_CERTIFICATE_EXPIRED = 0x08,
+
+	/* The certificate's subject name doesn't match the expected */
+	PURPLE_CERTIFICATE_NAME_MISMATCH = 0x10,
+
+	/* No CA pool was found. This shouldn't happen... */
+	PURPLE_CERTIFICATE_NO_CA_POOL = 0x20,
+
+	/* Fatal */
+	PURPLE_CERTIFICATE_FATALS_MASK = 0xFFFF0000,
+
+	/* The signature chain could not be validated. Due to limitations in the
+	 * the current API, this also indicates one of the CA certificates in the
+	 * chain is expired (or not yet activated). FIXME 3.0.0 */
+	PURPLE_CERTIFICATE_INVALID_CHAIN = 0x10000,
+
+	/* The signature has been revoked. */
+	PURPLE_CERTIFICATE_REVOKED = 0x20000,
+
+	PURPLE_CERTIFICATE_LAST = 0x40000,
+} PurpleCertificateInvalidityFlags;
+
+static const gchar *
+invalidity_reason_to_string(PurpleCertificateInvalidityFlags flag)
+{
+	switch (flag) {
+		case PURPLE_CERTIFICATE_SELF_SIGNED:
+			return _("The certificate is self-signed and cannot be "
+			         "automatically checked.");
+			break;
+		case PURPLE_CERTIFICATE_CA_UNKNOWN:
+			return _("The root certificate this one claims to be issued by is "
+			         "unknown to Pidgin.");
+			break;
+		case PURPLE_CERTIFICATE_NOT_ACTIVATED:
+			return _("The certificate is not valid yet.");
+			break;
+		case PURPLE_CERTIFICATE_EXPIRED:
+			return _("The certificate has expired and should not be "
+			         "considered valid.");
+			break;
+		case PURPLE_CERTIFICATE_NAME_MISMATCH:
+			/* Translators: "domain" refers to a DNS domain (e.g. talk.google.com) */
+			return _("The certificate presented is not issued to this domain.");
+			break;
+		case PURPLE_CERTIFICATE_NO_CA_POOL:
+			return _("You have no database of root certificates, so "
+			         "this certificate cannot be validated.");
+			break;
+		case PURPLE_CERTIFICATE_INVALID_CHAIN:
+			return _("The certificate chain presented is invalid.");
+			break;
+		case PURPLE_CERTIFICATE_REVOKED:
+			return _("The certificate has been revoked.");
+			break;
+		case PURPLE_CERTIFICATE_UNKNOWN_ERROR:
+		default:
+			return _("An unknown certificate error occurred.");
+			break;
+	}
+}
+
 void
 purple_certificate_verify (PurpleCertificateVerifier *verifier,
 			   const gchar *subject_name, GList *cert_chain,
@@ -1265,10 +1350,104 @@
 }
 
 static void
-x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq);
+x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq,
+                             PurpleCertificateInvalidityFlags flags);
 
 static void
-x509_tls_cached_cert_in_cache(PurpleCertificateVerificationRequest *vrq)
+x509_tls_cached_complete(PurpleCertificateVerificationRequest *vrq,
+                         PurpleCertificateInvalidityFlags flags)
+{
+	PurpleCertificatePool *tls_peers;
+	PurpleCertificate *peer_crt = vrq->cert_chain->data;
+
+	if (flags & PURPLE_CERTIFICATE_FATALS_MASK) {
+		/* TODO: Also print any other warnings? */
+		const gchar *error;
+		gchar *tmp, *secondary;
+
+		if (flags & PURPLE_CERTIFICATE_INVALID_CHAIN)
+			error = invalidity_reason_to_string(PURPLE_CERTIFICATE_INVALID_CHAIN);
+		else if (flags & PURPLE_CERTIFICATE_REVOKED)
+			error = invalidity_reason_to_string(PURPLE_CERTIFICATE_REVOKED);
+		else
+			error = invalidity_reason_to_string(PURPLE_CERTIFICATE_UNKNOWN_ERROR);
+
+		tmp = g_strdup_printf(_("The certificate for %s could not be validated."),
+					vrq->subject_name);
+		secondary = g_strconcat(tmp, " ", error, NULL);
+		g_free(tmp);
+
+		purple_notify_error(NULL, /* TODO: Probably wrong. */
+					_("SSL Certificate Error"),
+					_("Unable to validate certificate"),
+					secondary);
+		g_free(secondary);
+
+		purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_INVALID);
+		return;
+	} else if (flags & PURPLE_CERTIFICATE_NON_FATALS_MASK) {
+		/* Non-fatal error. Prompt the user. */
+		gchar *tmp;
+		GString *errors;
+		guint32 i = 1;
+
+		tmp = g_strdup_printf(_("The certificate for %s could not be validated."),
+					vrq->subject_name);
+		errors = g_string_new(tmp);
+		g_free(tmp);
+
+		errors = g_string_append_c(errors, '\n');
+
+		/* Special case a name mismatch because we want to display the two names... */
+		if (flags & PURPLE_CERTIFICATE_NAME_MISMATCH) {
+			gchar *sn = purple_certificate_get_subject_name(peer_crt);
+
+			g_string_append_printf(errors, _("The certificate claims to be "
+						"from \"%s\" instead. This could mean that you are "
+						"not connecting to the service you believe you are."),
+						sn);
+			g_free(sn);
+
+			flags &= ~PURPLE_CERTIFICATE_NAME_MISMATCH;
+		}
+
+		while (i != PURPLE_CERTIFICATE_LAST) {
+			if (flags & i) {
+				errors = g_string_append_c(errors, '\n');
+				g_string_append(errors, invalidity_reason_to_string(i));
+			}
+
+			i <<= 1;
+		}
+
+		x509_tls_cached_user_auth(vrq, errors->str);
+		g_string_free(errors, TRUE);
+		return;
+	}
+
+	/* If we reach this point, the certificate is good. */
+
+	/* Look up the local cache and store it there for future use */
+	tls_peers = purple_certificate_find_pool(x509_tls_cached.scheme_name,
+						 "tls_peers");
+	if (tls_peers) {
+		if (!purple_certificate_pool_contains(tls_peers, vrq->subject_name) &&
+		        !purple_certificate_pool_store(tls_peers,vrq->subject_name,
+		                                       peer_crt)) {
+			purple_debug_error("certificate/x509/tls_cached",
+			                   "FAILED to cache peer certificate\n");
+		}
+	} else {
+		purple_debug_error("certificate/x509/tls_cached",
+		                   "Unable to locate tls_peers certificate cache.\n");
+	}
+
+	purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_VALID);
+}
+
+static void
+x509_tls_cached_cert_in_cache(PurpleCertificateVerificationRequest *vrq,
+                              PurpleCertificateInvalidityFlags flags)
 {
 	/* TODO: Looking this up by name over and over is expensive.
 	   Fix, please! */
@@ -1291,7 +1470,7 @@
 				   "Lookup failed on cached certificate!\n"
 				   "Falling back to full verification.\n");
 		/* vrq now becomes the problem of unknown_peer */
-		x509_tls_cached_unknown_peer(vrq);
+		x509_tls_cached_unknown_peer(vrq, flags);
 		return;
 	}
 
@@ -1302,14 +1481,12 @@
 	if (!memcmp(peer_fpr->data, cached_fpr->data, peer_fpr->len)) {
 		purple_debug_info("certificate/x509/tls_cached",
 				  "Peer cert matched cached\n");
-		/* vrq is now finished */
-		purple_certificate_verify_complete(vrq,
-						   PURPLE_CERTIFICATE_VALID);
+		x509_tls_cached_complete(vrq, flags);
 	} else {
 		purple_debug_error("certificate/x509/tls_cached",
 				  "Peer cert did NOT match cached\n");
 		/* vrq now becomes the problem of the user */
-		x509_tls_cached_unknown_peer(vrq);
+		x509_tls_cached_unknown_peer(vrq, flags);
 	}
 
 	purple_certificate_destroy(cached_crt);
@@ -1324,9 +1501,8 @@
  */
 static void
 x509_tls_cached_check_subject_name(PurpleCertificateVerificationRequest *vrq,
-                                   gboolean had_ca_pool)
+                                   PurpleCertificateInvalidityFlags flags)
 {
-	PurpleCertificatePool *tls_peers;
 	PurpleCertificate *peer_crt;
 	GList *chain = vrq->cert_chain;
 
@@ -1337,77 +1513,14 @@
 						     vrq->subject_name) ) {
 		gchar *sn = purple_certificate_get_subject_name(peer_crt);
 
+		flags |= PURPLE_CERTIFICATE_NAME_MISMATCH;
 		purple_debug_error("certificate/x509/tls_cached",
 				  "Name mismatch: Certificate given for %s "
 				  "has a name of %s\n",
 				  vrq->subject_name, sn);
-
-		if (had_ca_pool) {
-			/* Prompt the user to authenticate the certificate */
-			/* TODO: Provide the user with more guidance about why he is
-			   being prompted */
-			/* vrq will be completed by user_auth */
-			gchar *msg;
-			msg = g_strdup_printf(_("The certificate presented by \"%s\" "
-						"claims to be from \"%s\" instead.  "
-						"This could mean that you are not "
-						"connecting to the service you "
-						"believe you are."),
-					      vrq->subject_name, sn);
-
-			x509_tls_cached_user_auth(vrq, msg);
-			g_free(msg);
-		} else {
-			/* Had no CA pool, so couldn't verify the chain *and*
-			 * the subject name isn't valid.
-			 * I think this is bad enough to warrant a fatal error. It's
-			 * not likely anyway...
-			 */
-			purple_notify_error(NULL, /* TODO: Probably wrong. */
-						_("SSL Certificate Error"),
-						_("Invalid certificate chain"),
-						_("You have no database of root certificates, so "
-						"this certificate cannot be validated."));
-		}
-
-		g_free(sn);
-		return;
-	} /* if (name mismatch) */
-
-	if (!had_ca_pool) {
-		/* The subject name is correct, but we weren't able to verify the
-		 * chain because there was no pool of root CAs found. Prompt the user
-		 * to validate it.
-		 */
-
-		/* vrq will be completed by user_auth */
-		x509_tls_cached_user_auth(vrq,_("You have no database of root "
-						"certificates, so this "
-						"certificate cannot be "
-						"validated."));
-		return;
 	}
 
-	/* If we reach this point, the certificate is good. */
-	/* Look up the local cache and store it there for future use */
-	tls_peers = purple_certificate_find_pool(x509_tls_cached.scheme_name,
-						 "tls_peers");
-
-	if (tls_peers) {
-		if (!purple_certificate_pool_store(tls_peers,vrq->subject_name,
-						   peer_crt) ) {
-			purple_debug_error("certificate/x509/tls_cached",
-					   "FAILED to cache peer certificate\n");
-		}
-	} else {
-		purple_debug_error("certificate/x509/tls_cached",
-				   "Unable to locate tls_peers certificate "
-				   "cache.\n");
-	}
-
-	/* Whew! Done! */
-	purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_VALID);
-
+	x509_tls_cached_complete(vrq, flags);
 }
 
 /* For when we've never communicated with this party before */
@@ -1415,7 +1528,8 @@
    least  reprioritize them.
  */
 static void
-x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq)
+x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq,
+                             PurpleCertificateInvalidityFlags flags)
 {
 	PurpleCertificatePool *ca;
 	PurpleCertificate *peer_crt;
@@ -1430,22 +1544,13 @@
 	/* TODO: Figure out a way to check for a bad signature, as opposed to
 	   "not self-signed" */
 	if ( purple_certificate_signed_by(peer_crt, peer_crt) ) {
-		gchar *msg;
+		flags |= PURPLE_CERTIFICATE_SELF_SIGNED;
 
 		purple_debug_info("certificate/x509/tls_cached",
 				  "Certificate for %s is self-signed.\n",
 				  vrq->subject_name);
 
-		/* Prompt the user to authenticate the certificate */
-		/* vrq will be completed by user_auth */
-		msg = g_strdup_printf(_("The certificate presented by \"%s\" "
-					"is self-signed. It cannot be "
-					"automatically checked."),
-				      vrq->subject_name);
-
-		x509_tls_cached_user_auth(vrq,msg);
-
-		g_free(msg);
+		x509_tls_cached_check_subject_name(vrq, flags);
 		return;
 	} /* if (self signed) */
 
@@ -1491,32 +1596,11 @@
 		 * If we get here, either the cert matched the stuff right above
 		 * or it didn't, in which case we give up and complain to the user.
 		 */
-		if (chain_validated) {
-			x509_tls_cached_check_subject_name(vrq, TRUE);
-		} else {
+		if (!chain_validated)
 			/* TODO: Tell the user where the chain broke? */
-			/* TODO: This error will hopelessly confuse any
-			   non-elite user. */
-			gchar *secondary;
-
-			secondary = g_strdup_printf(_("The certificate chain presented"
-						      " for %s is not valid."),
-						    vrq->subject_name);
+			flags |= PURPLE_CERTIFICATE_INVALID_CHAIN;
 
-			/* TODO: Make this error either block the ensuing SSL
-			   connection error until the user dismisses this one, or
-			   stifle it. */
-			purple_notify_error(NULL, /* TODO: Probably wrong. */
-					    _("SSL Certificate Error"),
-					    _("Invalid certificate chain"),
-					    secondary );
-			g_free(secondary);
-
-			/* Okay, we're done here */
-			purple_certificate_verify_complete(vrq,
-							   PURPLE_CERTIFICATE_INVALID);
-		}
-
+		x509_tls_cached_check_subject_name(vrq, flags);
 		return;
 	} /* if (signature chain not good) */
 
@@ -1527,7 +1611,9 @@
 				   "No X.509 Certificate Authority pool "
 				   "could be found!\n");
 
-		x509_tls_cached_check_subject_name(vrq, FALSE);
+		flags |= PURPLE_CERTIFICATE_NO_CA_POOL;
+
+		x509_tls_cached_check_subject_name(vrq, flags);
 		return;
 	}
 
@@ -1540,15 +1626,15 @@
 			  ca_id);
 	ca_crt = purple_certificate_pool_retrieve(ca, ca_id);
 	if ( NULL == ca_crt ) {
+		flags |= PURPLE_CERTIFICATE_CA_UNKNOWN;
+
 		purple_debug_warning("certificate/x509/tls_cached",
 				  "Certificate Authority with DN='%s' not "
 				  "found. I'll prompt the user, I guess.\n",
 				  ca_id);
 		g_free(ca_id);
-		/* vrq will be completed by user_auth */
-		x509_tls_cached_user_auth(vrq,_("The root certificate this "
-						"one claims to be issued by "
-						"is unknown to Pidgin."));
+
+		x509_tls_cached_check_subject_name(vrq, flags);
 		return;
 	}
 
@@ -1579,36 +1665,15 @@
 		/* TODO: Also mention the CA involved. While I could do this
 		   now, a full DN is a little much with which to assault the
 		   user's poor, leaky eyes. */
-		/* TODO: This error message makes my eyes cross, and I wrote it */
-		gchar * secondary =
-			g_strdup_printf(_("The certificate chain presented by "
-					  "%s does not have a valid digital "
-					  "signature from the Certificate "
-					  "Authority from which it claims to "
-					  "have a signature."),
-					vrq->subject_name);
-
-		purple_notify_error(NULL, /* TODO: Probably wrong */
-				    _("SSL Certificate Error"),
-				    _("Invalid certificate authority"
-				      " signature"),
-				    secondary);
-		g_free(secondary);
-
-		/* Signal "bad cert" */
-		purple_certificate_verify_complete(vrq,
-						   PURPLE_CERTIFICATE_INVALID);
-
-		purple_certificate_destroy(ca_crt);
-		g_byte_array_free(ca_fpr, TRUE);
-		g_byte_array_free(last_fpr, TRUE);
-		return;
-	} /* if (CA signature not good) */
+		flags |= PURPLE_CERTIFICATE_INVALID_CHAIN;
+	}
 
 	g_byte_array_free(ca_fpr, TRUE);
 	g_byte_array_free(last_fpr, TRUE);
 
-	x509_tls_cached_check_subject_name(vrq, TRUE);
+	purple_certificate_destroy(ca_crt);
+
+	x509_tls_cached_check_subject_name(vrq, flags);
 }
 
 static void
@@ -1617,6 +1682,7 @@
 	const gchar *tls_peers_name = "tls_peers"; /* Name of local cache */
 	PurpleCertificatePool *tls_peers;
 	time_t now, activation, expiration;
+	PurpleCertificateInvalidityFlags flags = PURPLE_CERTIFICATE_NO_PROBLEMS;
 	gboolean ret;
 
 	g_return_if_fail(vrq);
@@ -1632,39 +1698,21 @@
 	now = time(NULL);
 	ret = purple_certificate_get_times(vrq->cert_chain->data, &activation,
 	                                   &expiration);
-	if (!ret || now > expiration || now < activation) {
-		gchar *secondary;
-
-		if (!ret) {
-			purple_debug_error("certificate/x509/tls_cached",
-					"Failed to get validity times for certificate %s\n",
-					vrq->subject_name);
-			secondary = g_strdup_printf(_("Failed to validate expiration time "
-					"for %s"), vrq->subject_name);
-		} else if (now > expiration) {
-			purple_debug_error("certificate/x509/tls_cached",
-					"Certificate %s expired at %s\n",
-					vrq->subject_name, ctime(&expiration));
-			secondary = g_strdup_printf(_("The certificate for %s is expired."),
-					vrq->subject_name);
-		} else {
-			purple_debug_error("certificate/x509/tls_cached",
-					"Certificate %s is not yet valid, will be at %s\n",
-					vrq->subject_name, ctime(&activation));
-			secondary = g_strdup_printf(_("The certificate for %s should not "
-					"yet be in use."), vrq->subject_name);
-		}
-
-		purple_notify_error(NULL, /* TODO: Probably wrong. */
-				_("SSL Certificate Error"),
-				_("Invalid certificate chain"),
-				secondary );
-		g_free(secondary);
-
-		/* Okay, we're done here */
-		purple_certificate_verify_complete(vrq,
-				PURPLE_CERTIFICATE_INVALID);
-		return;
+	if (!ret) {
+		flags |= PURPLE_CERTIFICATE_EXPIRED | PURPLE_CERTIFICATE_NOT_ACTIVATED;
+		purple_debug_error("certificate/x509/tls_cached",
+				"Failed to get validity times for certificate %s\n",
+				vrq->subject_name);
+	} else if (now > expiration) {
+		flags |= PURPLE_CERTIFICATE_EXPIRED;
+		purple_debug_error("certificate/x509/tls_cached",
+				"Certificate %s expired at %s\n",
+				vrq->subject_name, ctime(&expiration));
+	} else if (now < activation) {
+		flags |= PURPLE_CERTIFICATE_NOT_ACTIVATED;
+		purple_debug_error("certificate/x509/tls_cached",
+				"Certificate %s is not yet valid, will be at %s\n",
+				vrq->subject_name, ctime(&activation));
 	}
 
 	tls_peers = purple_certificate_find_pool(x509_tls_cached.scheme_name,tls_peers_name);
@@ -1674,9 +1722,8 @@
 				   "Couldn't find local peers cache %s\n",
 				   tls_peers_name);
 
-
 		/* vrq now becomes the problem of unknown_peer */
-		x509_tls_cached_unknown_peer(vrq);
+		x509_tls_cached_unknown_peer(vrq, flags);
 		return;
 	}
 
@@ -1687,12 +1734,12 @@
 		purple_debug_info("certificate/x509/tls_cached",
 				  "...Found cached cert\n");
 		/* vrq is now the responsibility of cert_in_cache */
-		x509_tls_cached_cert_in_cache(vrq);
+		x509_tls_cached_cert_in_cache(vrq, flags);
 	} else {
 		purple_debug_warning("certificate/x509/tls_cached",
 				  "...Not in cache\n");
 		/* vrq now becomes the problem of unknown_peer */
-		x509_tls_cached_unknown_peer(vrq);
+		x509_tls_cached_unknown_peer(vrq, flags);
 	}
 }
 
--- a/libpurple/media-gst.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/media-gst.h	Sat Aug 22 18:54:15 2009 +0000
@@ -21,7 +21,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #ifndef _PURPLE_MEDIA_GST_H_
--- a/libpurple/media.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/media.c	Sat Aug 22 18:54:15 2009 +0000
@@ -21,7 +21,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #include <string.h>
@@ -2730,10 +2730,13 @@
 					num_params, params, &err);
 		}
 
-		if (err) {
-			purple_debug_error("media", "Error creating stream: %s\n",
-					   err->message);
-			g_error_free(err);
+		if (fsstream == NULL) {
+			purple_debug_error("media",
+					"Error creating stream: %s\n",
+					err && err->message ?
+					err->message : "NULL");
+			if (err)
+				g_error_free(err);
 			g_object_unref(participant);
 			g_hash_table_remove(media->priv->participants, who);
 			purple_media_remove_session(media, session);
--- a/libpurple/media.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/media.h	Sat Aug 22 18:54:15 2009 +0000
@@ -21,7 +21,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #ifndef _PURPLE_MEDIA_H_
--- a/libpurple/mediamanager.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/mediamanager.c	Sat Aug 22 18:54:15 2009 +0000
@@ -21,7 +21,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #include "internal.h"
--- a/libpurple/mediamanager.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/mediamanager.h	Sat Aug 22 18:54:15 2009 +0000
@@ -21,7 +21,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #ifndef _PURPLE_MEDIA_MANAGER_H_
--- a/libpurple/protocols/bonjour/bonjour_ft.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/bonjour/bonjour_ft.c	Sat Aug 22 18:54:15 2009 +0000
@@ -17,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 #include "internal.h"
 #include "util.h"
--- a/libpurple/protocols/bonjour/bonjour_ft.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/bonjour/bonjour_ft.h	Sat Aug 22 18:54:15 2009 +0000
@@ -17,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 #ifndef _BONJOUR_FT_H_
 #define _BONJOUR_FT_H_
--- a/libpurple/protocols/jabber/adhoccommands.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/adhoccommands.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/adhoccommands.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/adhoccommands.h	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/auth.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/auth.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/auth.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/auth.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/bosh.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/bosh.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2008, Tobias Markmann <tmarkmann@googlemail.com>
+ * 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
--- a/libpurple/protocols/jabber/bosh.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/bosh.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2008, Tobias Markmann <tmarkmann@googlemail.com>
+ * 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
--- a/libpurple/protocols/jabber/buddy.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/buddy.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/buddy.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/caps.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/caps.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/caps.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/caps.h	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/chat.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/chat.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/chat.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/chat.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/data.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/data.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,4 +1,8 @@
 /*
+ * 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
--- a/libpurple/protocols/jabber/data.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/data.h	Sat Aug 22 18:54:15 2009 +0000
@@ -1,4 +1,8 @@
 /*
+ * 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
--- a/libpurple/protocols/jabber/disco.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/disco.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Service Discovery
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/disco.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/disco.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/google.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/google.c	Sat Aug 22 18:54:15 2009 +0000
@@ -91,20 +91,6 @@
 }
 
 static void
-google_session_send_terminate(GoogleSession *session)
-{
-	xmlnode *sess;
-	JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET);
-
-	xmlnode_set_attrib(iq->node, "to", session->remote_jid);
-	sess = google_session_create_xmlnode(session, "terminate");
-	xmlnode_insert_child(iq->node, sess);
-
-	jabber_iq_send(iq);
-	google_session_destroy(session);
-}
-
-static void
 google_session_send_candidates(PurpleMedia *media, gchar *session_id,
 		gchar *participant, GoogleSession *session)
 {
@@ -398,6 +384,16 @@
 
 	purple_media_set_prpl_data(session->media, session);
 
+	g_signal_connect_swapped(G_OBJECT(session->media),
+			"candidates-prepared",
+			G_CALLBACK(google_session_ready), session);
+	g_signal_connect_swapped(G_OBJECT(session->media), "codecs-changed",
+			G_CALLBACK(google_session_ready), session);
+	g_signal_connect(G_OBJECT(session->media), "state-changed",
+			G_CALLBACK(google_session_state_changed_cb), session);
+	g_signal_connect(G_OBJECT(session->media), "stream-info",
+			G_CALLBACK(google_session_stream_info_cb), session);
+
 	params = jabber_google_session_get_params(js, &num_params);
 
 	if (purple_media_add_stream(session->media, "google-voice",
@@ -408,23 +404,11 @@
 			session->remote_jid, PURPLE_MEDIA_VIDEO,
 			TRUE, "nice", num_params, params) == FALSE)) {
 		purple_media_error(session->media, "Error adding stream.");
-		purple_media_stream_info(session->media,
-				PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE);
-		google_session_destroy(session);
+		purple_media_end(session->media, NULL, NULL);
 		g_free(params);
 		return FALSE;
 	}
 
-	g_signal_connect_swapped(G_OBJECT(session->media),
-			"candidates-prepared",
-			G_CALLBACK(google_session_ready), session);
-	g_signal_connect_swapped(G_OBJECT(session->media), "codecs-changed",
-			G_CALLBACK(google_session_ready), session);
-	g_signal_connect(G_OBJECT(session->media), "state-changed",
-			G_CALLBACK(google_session_state_changed_cb), session);
-	g_signal_connect(G_OBJECT(session->media), "stream-info",
-			G_CALLBACK(google_session_stream_info_cb), session);
-
 	g_free(params);
 
 	return (session->media != NULL) ? TRUE : FALSE;
@@ -466,6 +450,16 @@
 
 	purple_media_set_prpl_data(session->media, session);
 
+	g_signal_connect_swapped(G_OBJECT(session->media),
+			"candidates-prepared",
+			G_CALLBACK(google_session_ready), session);
+	g_signal_connect_swapped(G_OBJECT(session->media), "codecs-changed",
+			G_CALLBACK(google_session_ready), session);
+	g_signal_connect(G_OBJECT(session->media), "state-changed",
+			G_CALLBACK(google_session_state_changed_cb), session);
+	g_signal_connect(G_OBJECT(session->media), "stream-info",
+			G_CALLBACK(google_session_stream_info_cb), session);
+
 	params = jabber_google_session_get_params(js, &num_params);
 
 	if (purple_media_add_stream(session->media, "google-voice",
@@ -477,8 +471,7 @@
 			FALSE, "nice", num_params, params) == FALSE)) {
 		purple_media_error(session->media, "Error adding stream.");
 		purple_media_stream_info(session->media,
-				PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE);
-		google_session_send_terminate(session);
+				PURPLE_MEDIA_INFO_REJECT, NULL, NULL, TRUE);
 		g_free(params);
 		return FALSE;
 	}
@@ -535,18 +528,6 @@
 	purple_media_codec_list_free(codecs);
 	purple_media_codec_list_free(video_codecs);
 
-	g_signal_connect_swapped(G_OBJECT(session->media), "accepted",
-			G_CALLBACK(google_session_ready), session);
-	g_signal_connect_swapped(G_OBJECT(session->media),
-			"candidates-prepared",
-			G_CALLBACK(google_session_ready), session);
-	g_signal_connect_swapped(G_OBJECT(session->media), "codecs-changed",
-			G_CALLBACK(google_session_ready), session);
-	g_signal_connect(G_OBJECT(session->media), "state-changed",
-			G_CALLBACK(google_session_state_changed_cb), session);
-	g_signal_connect(G_OBJECT(session->media), "stream-info",
-			G_CALLBACK(google_session_stream_info_cb), session);
-
 	result = jabber_iq_new(js, JABBER_IQ_RESULT);
 	jabber_iq_set_id(result, iq_id);
 	xmlnode_set_attrib(result->node, "to", session->remote_jid);
@@ -778,8 +759,7 @@
 	session->js = js;
 	session->remote_jid = g_strdup(session->id.initiator);
 
-	if (!google_session_handle_initiate(js, session, session_node, iq_id))
-		google_session_destroy(session);
+	google_session_handle_initiate(js, session, session_node, iq_id);
 }
 #endif /* USE_VV */
 
--- a/libpurple/protocols/jabber/ibb.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/ibb.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,4 +1,8 @@
 /*
+ * 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
--- a/libpurple/protocols/jabber/ibb.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/ibb.h	Sat Aug 22 18:54:15 2009 +0000
@@ -1,4 +1,8 @@
 /*
+ * 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
--- a/libpurple/protocols/jabber/iq.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/iq.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/iq.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/iq.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/jabber.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/jabber.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/jingle/content.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/content.c	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/content.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/content.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/iceudp.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/iceudp.c	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/iceudp.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/iceudp.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/jingle.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/jingle.c	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple - Jabber Protocol Plugin
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/jingle.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/jingle.h	Sat Aug 22 18:54:15 2009 +0000
@@ -1,6 +1,10 @@
 /*
  * @file jingle.h
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/rawudp.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/rawudp.c	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/rawudp.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/rawudp.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/rtp.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/rtp.c	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
@@ -607,8 +611,11 @@
 		is_creator = !jingle_session_is_initiator(session);
 	g_free(creator);
 
-	purple_media_add_stream(media, name, remote_jid,
-			type, is_creator, transmitter, num_params, params);
+	if(!purple_media_add_stream(media, name, remote_jid,
+			type, is_creator, transmitter, num_params, params)) {
+		purple_media_end(media, NULL, NULL);
+		return FALSE;
+	}
 
 	g_free(name);
 	g_free(media_type);
--- a/libpurple/protocols/jabber/jingle/rtp.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/rtp.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/session.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/session.c	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/session.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/session.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/transport.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/transport.c	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jingle/transport.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/transport.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,6 +3,10 @@
  *
  * purple
  *
+ * 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
--- a/libpurple/protocols/jabber/jutil.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jutil.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
@@ -504,8 +506,23 @@
 	JabberStream *js = gc ? gc->proto_data : NULL;
 	static char buf[3072]; /* maximum legal length of a jabber jid */
 	JabberID *jid;
+	char *tmp;
+	size_t len = strlen(in);
 
-	jid = jabber_id_new(in);
+	/*
+	 * If the JID ends with a '/', jabber_id_new is going to throw it away as
+	 * invalid.  However, this is what the UI generates for a JID with no
+	 * resource. Deal with that by dropping away the '/'...
+	 */
+	if (in[len - 1] == '/')
+		tmp = g_strndup(in, len - 1);
+	else
+		tmp = (gchar *)in;
+
+	jid = jabber_id_new(tmp);
+
+	if (tmp != in)
+		g_free(tmp);
 
 	if(!jid)
 		return NULL;
--- a/libpurple/protocols/jabber/jutil.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/jutil.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/message.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/message.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
@@ -87,8 +89,12 @@
 	}
 
 	if(!jm->xhtml && !jm->body) {
-		if (jbr)
-			jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED;
+		if (jbr) {
+			if (jm->chat_state != JM_STATE_NONE)
+				jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED;
+			else
+				jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED;
+		}
 
 		if(JM_STATE_COMPOSING == jm->chat_state) {
 			serv_got_typing(jm->js->gc, from, 0, PURPLE_TYPING);
--- a/libpurple/protocols/jabber/message.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/message.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/oob.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/oob.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/oob.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/oob.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/parser.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/parser.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber XML parser stuff
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/parser.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/parser.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/pep.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/pep.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/pep.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/pep.h	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/ping.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/ping.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
@@ -16,7 +18,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/ping.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/ping.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
@@ -17,7 +19,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 #ifndef PURPLE_JABBER_PING_H_
 #define PURPLE_JABBER_PING_H_
--- a/libpurple/protocols/jabber/presence.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/presence.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
@@ -469,10 +471,17 @@
 		jbr->commands_fetched = TRUE;
 	}
 
+#if 0
+	/*
+	 * Versions of libpurple before 2.6.0 didn't advertise this capability, so
+	 * we can't yet use Entity Capabilities to determine whether or not the
+	 * other client supports Entity Capabilities.
+	 */
 	if (jabber_resource_has_capability(jbr, "http://jabber.org/protocol/chatstates"))
 		jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED;
 	else
 		jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED;
+#endif
 
 out:
 	g_free(userdata->from);
--- a/libpurple/protocols/jabber/presence.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/presence.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/roster.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/roster.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/roster.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/roster.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/si.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/si.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/si.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/si.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/useravatar.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/useravatar.c	Sat Aug 22 18:54:15 2009 +0000
@@ -17,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/useravatar.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/useravatar.h	Sat Aug 22 18:54:15 2009 +0000
@@ -17,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/usermood.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/usermood.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/usermood.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/usermood.h	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/usernick.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/usernick.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/usernick.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/usernick.h	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/usertune.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/usertune.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/usertune.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/usertune.h	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
+ * 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
@@ -15,7 +17,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA	 02111-1307	 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  *
  */
 
--- a/libpurple/protocols/jabber/xdata.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/xdata.c	Sat Aug 22 18:54:15 2009 +0000
@@ -1,7 +1,9 @@
 /*
  * purple - Jabber Protocol Plugin
  *
- * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/jabber/xdata.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/jabber/xdata.h	Sat Aug 22 18:54:15 2009 +0000
@@ -3,7 +3,9 @@
  *
  * purple
  *
- * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com>
+ * 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
--- a/libpurple/protocols/msn/contact.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/msn/contact.c	Sat Aug 22 18:54:15 2009 +0000
@@ -21,7 +21,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 
 #include "msn.h"
--- a/libpurple/protocols/msn/contact.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/msn/contact.h	Sat Aug 22 18:54:15 2009 +0000
@@ -20,7 +20,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 #ifndef _MSN_CONTACT_H_
 #define _MSN_CONTACT_H_
--- a/libpurple/protocols/msn/oim.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/msn/oim.c	Sat Aug 22 18:54:15 2009 +0000
@@ -21,7 +21,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 #include "msn.h"
 #include "soap.h"
--- a/libpurple/protocols/msn/oim.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/msn/oim.h	Sat Aug 22 18:54:15 2009 +0000
@@ -20,7 +20,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 #ifndef _MSN_OIM_H_
 #define _MSN_OIM_H_
--- a/libpurple/protocols/msn/soap.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/msn/soap.c	Sat Aug 22 18:54:15 2009 +0000
@@ -20,7 +20,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 
 #include "internal.h"
--- a/libpurple/protocols/msn/soap.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/msn/soap.h	Sat Aug 22 18:54:15 2009 +0000
@@ -20,7 +20,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 
 #ifndef _MSN_SOAP_H
--- a/libpurple/protocols/qq/qq_crypt.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/qq/qq_crypt.c	Sat Aug 22 18:54:15 2009 +0000
@@ -19,7 +19,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  *
  *
  * QQ encryption algorithm
--- a/libpurple/protocols/qq/qq_crypt.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/qq/qq_crypt.h	Sat Aug 22 18:54:15 2009 +0000
@@ -19,7 +19,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 
 #ifndef _QQ_CRYPT_H_
--- a/libpurple/protocols/yahoo/util.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/protocols/yahoo/util.c	Sat Aug 22 18:54:15 2009 +0000
@@ -611,7 +611,6 @@
 				if (match == NULL) {
 					/* Unknown tag.  The user probably typed a less-than sign */
 					g_string_append_c(cdata, x[i]);
-					no_more_gt_brackets = TRUE;
 					g_free(tag);
 					g_free(tag_name);
 					break;
--- a/libpurple/tests/test_yahoo_util.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/libpurple/tests/test_yahoo_util.c	Sat Aug 22 18:54:15 2009 +0000
@@ -100,6 +100,8 @@
 			yahoo_codes_to_html("<font face='Georgia' size='32'>test"));
 	assert_string_equal_free("<font color='#FF0080'><font size='4' absz='15'>test</font></font>",
 			yahoo_codes_to_html("\x1B[35m<font size='15'>test"));
+	assert_string_equal_free(":&lt;",
+			yahoo_codes_to_html("<FADE #ff0000,#00ff00,#0000ff>:<</FADE>"));
 #endif /* !USE_CSS_FORMATTING */
 }
 END_TEST
--- a/pidgin/gtkmedia.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/pidgin/gtkmedia.c	Sat Aug 22 18:54:15 2009 +0000
@@ -20,7 +20,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #include <string.h>
--- a/pidgin/gtkmedia.h	Sat Aug 22 18:05:10 2009 +0000
+++ b/pidgin/gtkmedia.h	Sat Aug 22 18:54:15 2009 +0000
@@ -21,7 +21,7 @@
  *
  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
  */
 
 #ifndef __GTKMEDIA_H_
--- a/pidgin/gtknotify.c	Sat Aug 22 18:05:10 2009 +0000
+++ b/pidgin/gtknotify.c	Sat Aug 22 18:54:15 2009 +0000
@@ -184,10 +184,12 @@
 	GList **list = data;
 	*list = g_list_prepend(*list, gtk_tree_path_copy(path));
 }
+
 static void
 pounce_response_dismiss()
 {
 	GtkTreeSelection *selection;
+	GtkTreeIter iter;
 	GList *list = NULL;
 
 	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pounce_dialog->treeview));
@@ -203,6 +205,9 @@
 		gtk_tree_path_free(list->data);
 		list = g_list_delete_link(list, list);
 	}
+
+	if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(pounce_dialog->treemodel), &iter))
+		pounce_response_close(pounce_dialog);
 }
 
 static void
@@ -296,6 +301,28 @@
 }
 
 static void
+pounce_row_activated_cb(GtkTreeView *tv, GtkTreePath *path,
+	GtkTreeViewColumn *col, gpointer data)
+{
+	PidginNotifyPounceData *pounce_data;
+	PurpleAccount *account;
+	GtkTreeIter iter;
+
+	if(!gtk_tree_model_get_iter(GTK_TREE_MODEL(pounce_dialog->treemodel), &iter, path))
+		return;
+
+	gtk_tree_model_get(GTK_TREE_MODEL(pounce_dialog->treemodel), &iter,
+		PIDGIN_POUNCE_DATA, &pounce_data, -1);
+
+	account = pounce_data->account;
+
+	purple_conversation_new(PURPLE_CONV_TYPE_IM, account,
+		purple_account_get_username(account));
+
+	pounce_response_dismiss();
+}
+
+static void
 reset_mail_dialog(GtkDialog *unused)
 {
 	if (mail_dialog->in_use)
@@ -1539,6 +1566,8 @@
 		gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
 		g_signal_connect(G_OBJECT(sel), "changed",
 			G_CALLBACK(pounce_row_selected_cb), NULL);
+		g_signal_connect(G_OBJECT(spec_dialog->treeview), "row-activated",
+			G_CALLBACK(pounce_row_activated_cb), NULL);
 	}
 
 	gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
--- a/pidgin/plugins/Makefile.am	Sat Aug 22 18:05:10 2009 +0000
+++ b/pidgin/plugins/Makefile.am	Sat Aug 22 18:54:15 2009 +0000
@@ -67,9 +67,12 @@
 	themeedit.la         \
 	timestamp.la        \
 	timestamp_format.la \
-	vvconfig.la         \
 	xmppconsole.la
 
+if USE_VV
+plugin_LTLIBRARIES +=	vvconfig.la
+endif
+
 noinst_LTLIBRARIES = \
 	contact_priority.la \
 	gtk_signals_test.la
@@ -109,7 +112,7 @@
 themeedit_la_LIBADD         = $(GTK_LIBS)
 timestamp_la_LIBADD         = $(GTK_LIBS)
 timestamp_format_la_LIBADD  = $(GTK_LIBS)
-vvconfig_la_LIBADD          = $(GTK_LIBS)
+vvconfig_la_LIBADD          = $(GTK_LIBS) $(GSTREAMER_LIBS)
 xmppconsole_la_LIBADD       = $(GTK_LIBS)
 
 endif # PLUGINS
--- a/pidgin/plugins/Makefile.mingw	Sat Aug 22 18:05:10 2009 +0000
+++ b/pidgin/plugins/Makefile.mingw	Sat Aug 22 18:54:15 2009 +0000
@@ -91,7 +91,6 @@
 		spellchk.dll \
 		timestamp_format.dll \
 		timestamp.dll \
-		vvconfig.dll \
 		xmppconsole.dll
 
 ##