changeset 29721:c4f836780e1c

propagate from branch 'im.pidgin.pidgin' (head 5e3164a6a1df028fc66f7e072be0d78d9d995389) to branch 'im.pidgin.pidgin.next.minor' (head 6ee3a8d962ff2bb002967cc29bd5aa0b45bc2028)
author John Bailey <rekkanoryo@rekkanoryo.org>
date Sat, 28 Nov 2009 02:22:49 +0000
parents 588a7aef5f7c (diff) 45a94940c122 (current diff)
children 1e19c439fa7a
files libpurple/media.c libpurple/media/media.c libpurple/protocols/jabber/google.c libpurple/protocols/jabber/jabber.c libpurple/protocols/jabber/jingle/session.c libpurple/protocols/jabber/presence.c libpurple/protocols/jabber/si.c pidgin/gtkcelllayout.c pidgin/gtkcelllayout.h pidgin/gtkcellrendererprogress.c pidgin/gtkcellrendererprogress.h pidgin/gtkcellview.c pidgin/gtkcellview.h pidgin/gtkcellviewmenuitem.c pidgin/gtkcellviewmenuitem.h pidgin/gtkexpander.c pidgin/gtkexpander.h pidgin/gtkwhiteboard.c pidgin/pidgincombobox.c pidgin/pidgincombobox.h pidgin/pixmaps/tray/16/tray-away.png pidgin/pixmaps/tray/16/tray-busy.png pidgin/pixmaps/tray/16/tray-connecting.png pidgin/pixmaps/tray/16/tray-extended-away.png pidgin/pixmaps/tray/16/tray-invisible.png pidgin/pixmaps/tray/16/tray-message.png pidgin/pixmaps/tray/16/tray-new-im.png pidgin/pixmaps/tray/16/tray-offline.png pidgin/pixmaps/tray/16/tray-online.png pidgin/pixmaps/tray/22/tray-away.png pidgin/pixmaps/tray/22/tray-busy.png pidgin/pixmaps/tray/22/tray-connecting.png pidgin/pixmaps/tray/22/tray-extended-away.png pidgin/pixmaps/tray/22/tray-invisible.png pidgin/pixmaps/tray/22/tray-message.png pidgin/pixmaps/tray/22/tray-new-im.png pidgin/pixmaps/tray/22/tray-offline.png pidgin/pixmaps/tray/22/tray-online.png pidgin/pixmaps/tray/32/tray-away.png pidgin/pixmaps/tray/32/tray-busy.png pidgin/pixmaps/tray/32/tray-connecting.png pidgin/pixmaps/tray/32/tray-extended-away.png pidgin/pixmaps/tray/32/tray-invisible.png pidgin/pixmaps/tray/32/tray-message.png pidgin/pixmaps/tray/32/tray-new-im.png pidgin/pixmaps/tray/32/tray-offline.png pidgin/pixmaps/tray/32/tray-online.png pidgin/pixmaps/tray/48/tray-away.png pidgin/pixmaps/tray/48/tray-busy.png pidgin/pixmaps/tray/48/tray-connecting.png pidgin/pixmaps/tray/48/tray-extended-away.png pidgin/pixmaps/tray/48/tray-invisible.png pidgin/pixmaps/tray/48/tray-message.png pidgin/pixmaps/tray/48/tray-new-im.png pidgin/pixmaps/tray/48/tray-offline.png pidgin/pixmaps/tray/48/tray-online.png
diffstat 83 files changed, 802 insertions(+), 760 deletions(-) [+]
line wrap: on
line diff
--- a/doc/finch.1.in	Mon Nov 23 23:53:19 2009 +0000
+++ b/doc/finch.1.in	Sat Nov 28 02:22:49 2009 +0000
@@ -114,7 +114,7 @@
 .B Ctrl \+ o \fR or \fB F10
 Bring up the menu (if there is one) for a window.
 .TP
-.B F11
+.B F11 \fR or \fB Ctrl \+ x
 Popup the context menu (if there is one) for the selected widget.
 .TP
 .B Alt \+ /
--- a/libpurple/certificate.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/certificate.c	Sat Nov 28 02:22:49 2009 +0000
@@ -26,8 +26,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-
 #include "internal.h"
 #include "certificate.h"
 #include "dbus-maybe.h"
--- a/libpurple/cmds.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/cmds.c	Sat Nov 28 02:22:49 2009 +0000
@@ -21,8 +21,6 @@
  *
  */
 
-#include <string.h>
-
 #include "internal.h"
 
 #include "account.h"
--- a/libpurple/dbus-server.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/dbus-server.c	Sat Nov 28 02:22:49 2009 +0000
@@ -25,6 +25,8 @@
 #define DBUS_API_SUBJECT_TO_CHANGE
 #endif
 
+#include "internal.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -42,7 +44,6 @@
 #include "dbus-bindings.h"
 #include "debug.h"
 #include "core.h"
-#include "internal.h"
 #include "savedstatuses.h"
 #include "smiley.h"
 #include "util.h"
--- a/libpurple/debug.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/debug.c	Sat Nov 28 02:22:49 2009 +0000
@@ -23,8 +23,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 #include "prefs.h"
 #include "util.h"
 
--- a/libpurple/desktopitem.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/desktopitem.c	Sat Nov 28 02:22:49 2009 +0000
@@ -53,12 +53,12 @@
  * Boston, MA 02111-1301, USA.
  */
 
+#include "internal.h"
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
 #include <time.h>
 #include "desktopitem.h"
-#include "internal.h"
 
 struct _PurpleDesktopItem {
 	int refcount;
--- a/libpurple/eventloop.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/eventloop.c	Sat Nov 28 02:22:49 2009 +0000
@@ -23,8 +23,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
+#include "internal.h"
 #include "eventloop.h"
-#include "internal.h"
 
 static PurpleEventLoopUiOps *eventloop_ui_ops = NULL;
 
--- a/libpurple/ft.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/ft.h	Sat Nov 28 02:22:49 2009 +0000
@@ -160,7 +160,10 @@
 
 	PurpleXferStatusType status;    /**< File Transfer's status.             */
 
-	/* I/O operations. */
+	/** I/O operations, which should be set by the prpl using
+	 *  purple_xfer_set_init_fnc() and friends.  Setting #init is
+	 *  mandatory; all others are optional.
+	 */
 	struct
 	{
 		void (*init)(PurpleXfer *xfer);
--- a/libpurple/imgstore.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/imgstore.c	Sat Nov 28 02:22:49 2009 +0000
@@ -25,7 +25,6 @@
  *
 */
 
-#include <glib.h>
 #include "internal.h"
 
 #include "dbus-maybe.h"
--- a/libpurple/media/media.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/media/media.c	Sat Nov 28 02:22:49 2009 +0000
@@ -23,7 +23,6 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
-
 #include "internal.h"
 
 #include "account.h"
--- a/libpurple/mime.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/mime.c	Sat Nov 28 02:22:49 2009 +0000
@@ -21,11 +21,6 @@
  * USA.
  */
 
-#include <stdio.h>
-#include <string.h>
-
-#include <glib.h>
-
 #include "internal.h"
 
 /* this should become "util.h" if we ever get this into purple proper */
--- a/libpurple/nat-pmp.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/nat-pmp.c	Sat Nov 28 02:22:49 2009 +0000
@@ -29,8 +29,8 @@
  * OF SUCH DAMAGE.
  */
 
+#include "internal.h"
 #include "nat-pmp.h"
-#include "internal.h"
 #include "debug.h"
 #include "signals.h"
 #include "network.h"
--- a/libpurple/ntlm.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/ntlm.c	Sat Nov 28 02:22:49 2009 +0000
@@ -24,8 +24,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-#include <stdlib.h>
 #include "internal.h"
 
 #include "util.h"
--- a/libpurple/plugins/log_reader.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/plugins/log_reader.c	Sat Nov 28 02:22:49 2009 +0000
@@ -1,7 +1,7 @@
+#include "internal.h"
+
 #include <stdio.h>
 
-#include "internal.h"
-
 #include "debug.h"
 #include "log.h"
 #include "plugin.h"
--- a/libpurple/plugins/signals-test.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/plugins/signals-test.c	Sat Nov 28 02:22:49 2009 +0000
@@ -20,9 +20,10 @@
  */
 #define SIGNAL_TEST_PLUGIN_ID "core-signals-test"
 
+#include "internal.h"
+
 #include <stdio.h>
 
-#include "internal.h"
 #include "cipher.h"
 #include "connection.h"
 #include "conversation.h"
--- a/libpurple/protocols/jabber/Makefile.am	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/Makefile.am	Sat Nov 28 02:22:49 2009 +0000
@@ -5,12 +5,17 @@
 
 pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
-JABBERSOURCES = auth.c \
+JABBERSOURCES = \
+			  adhoccommands.c \
+			  adhoccommands.h \
+			  auth.c \
 			  auth.h \
 			  buddy.c \
 			  buddy.h \
 			  bosh.c \
 			  bosh.h \
+			  caps.c \
+			  caps.h \
 			  chat.c \
 			  chat.h \
 			  data.c \
@@ -43,10 +48,13 @@
 			  jutil.h \
 			  message.c \
 			  message.h \
+			  namespaces.h \
 			  oob.c \
 			  oob.h \
 			  parser.c \
 			  parser.h \
+			  pep.c \
+			  pep.h \
 			  ping.c \
 			  ping.h \
 			  presence.c \
@@ -55,14 +63,6 @@
 			  roster.h \
 			  si.c \
 			  si.h \
-			  xdata.c \
-			  xdata.h \
-			  caps.c \
-			  caps.h \
-			  adhoccommands.c \
-			  adhoccommands.h \
-			  pep.c \
-			  pep.h \
 			  useravatar.c \
 			  useravatar.h \
 			  usermood.c \
@@ -70,7 +70,9 @@
 			  usernick.c \
 			  usernick.h \
 			  usertune.c \
-			  usertune.h
+			  usertune.h \
+			  xdata.c \
+			  xdata.h
 
 AM_CFLAGS = $(st)
 
--- a/libpurple/protocols/jabber/adhoccommands.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/adhoccommands.c	Sat Nov 28 02:22:49 2009 +0000
@@ -97,7 +97,7 @@
 	if (type == JABBER_IQ_ERROR)
 		return;
 
-	query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items");
+	query = xmlnode_get_child_with_namespace(packet, "query", NS_DISCO_ITEMS);
 	if (!query)
 		return;
 	node = xmlnode_get_attrib(query, "node");
@@ -275,7 +275,8 @@
                                 JabberIqType type, const char *id,
                                 xmlnode *packet, gpointer data)
 {
-	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items");
+	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
+			NS_DISCO_ITEMS);
 
 	jabber_adhoc_got_server_list(js, from, query);
 
@@ -291,8 +292,9 @@
 }
 
 void jabber_adhoc_server_get_list(JabberStream *js) {
-	JabberIq *iq = jabber_iq_new_query(js,JABBER_IQ_GET,"http://jabber.org/protocol/disco#items");
-	xmlnode *query = xmlnode_get_child_with_namespace(iq->node,"query","http://jabber.org/protocol/disco#items");
+	JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_ITEMS);
+	xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query",
+			NS_DISCO_ITEMS);
 
 	xmlnode_set_attrib(iq->node,"to",js->user->domain);
 	xmlnode_set_attrib(query,"node","http://jabber.org/protocol/commands");
--- a/libpurple/protocols/jabber/buddy.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Sat Nov 28 02:22:49 2009 +0000
@@ -1466,7 +1466,7 @@
 	if(!jbr->client.name)
 		return FALSE;
 
-	if(!strcmp(ns, "jabber:iq:last")) {
+	if(!strcmp(ns, NS_LAST_ACTIVITY)) {
 		if(!strcmp(jbr->client.name, "Trillian")) {
 			/* verified by nwalp 2007/05/09 */
 			if(!strcmp(jbr->client.version, "3.1.0.121") ||
@@ -1512,8 +1512,8 @@
 	 * respond (with an error or otherwise) to jabber:iq:last
 	 * requests.  There are a number of Trillian users in my
 	 * office. */
-	if(!_client_is_blacklisted(jbr, "jabber:iq:last")) {
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:last");
+	if(!_client_is_blacklisted(jbr, NS_LAST_ACTIVITY)) {
+		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
 		xmlnode_set_attrib(iq->node, "to", to);
 		jabber_iq_set_callback(iq, jabber_last_parse, jbi);
 		jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
@@ -1522,12 +1522,12 @@
 
 	if (jbr->tz_off == PURPLE_NO_TZ_OFF &&
 			(!jbr->caps.info ||
-			 	jabber_resource_has_capability(jbr, "urn:xmpp:time"))) {
+			 	jabber_resource_has_capability(jbr, NS_ENTITY_TIME))) {
 		xmlnode *child;
 		iq = jabber_iq_new(js, JABBER_IQ_GET);
 		xmlnode_set_attrib(iq->node, "to", to);
 		child = xmlnode_new_child(iq->node, "time");
-		xmlnode_set_namespace(child, "urn:xmpp:time");
+		xmlnode_set_namespace(child, NS_ENTITY_TIME);
 		jabber_iq_set_callback(iq, jabber_time_parse, jbi);
 		jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
 		jabber_iq_send(iq);
@@ -1590,7 +1590,7 @@
 
 	if (!jb->resources && is_bare_jid) {
 		/* user is offline, send a jabber:iq:last to find out last time online */
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:last");
+		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
 		xmlnode_set_attrib(iq->node, "to", jid);
 		jabber_iq_set_callback(iq, jabber_last_offline_parse, jbi);
 		jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
--- a/libpurple/protocols/jabber/caps.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/caps.c	Sat Nov 28 02:22:49 2009 +0000
@@ -440,7 +440,7 @@
                         const char *id, xmlnode *packet, gpointer data)
 {
 	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
-		"http://jabber.org/protocol/disco#info");
+		NS_DISCO_INFO);
 	jabber_caps_cbplususerdata *userdata = data;
 	JabberCapsClientInfo *info = NULL, *value;
 	JabberCapsTuple key;
@@ -531,7 +531,7 @@
                      const char *id, xmlnode *packet, gpointer data)
 {
 	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
-		"http://jabber.org/protocol/disco#info");
+		NS_DISCO_INFO);
 	xmlnode *child;
 	ext_iq_data *userdata = data;
 	GList *features = NULL;
@@ -638,10 +638,9 @@
 		xmlnode *query;
 		char *nodever;
 
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-					"http://jabber.org/protocol/disco#info");
+		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 		query = xmlnode_get_child_with_namespace(iq->node, "query",
-					"http://jabber.org/protocol/disco#info");
+					NS_DISCO_INFO);
 		nodever = g_strdup_printf("%s#%s", node, ver);
 		xmlnode_set_attrib(query, "node", nodever);
 		g_free(nodever);
@@ -679,10 +678,9 @@
 				cbdata->name = exts[i];
 				cbdata->data = cbplususerdata_ref(userdata);
 
-				iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-				            "http://jabber.org/protocol/disco#info");
+				iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 				query = xmlnode_get_child_with_namespace(iq->node, "query",
-				            "http://jabber.org/protocol/disco#info");
+				            NS_DISCO_INFO);
 				nodeext = g_strdup_printf("%s#%s", node, exts[i]);
 				xmlnode_set_attrib(query, "node", nodeext);
 				g_free(nodeext);
@@ -771,7 +769,7 @@
 	xmlnode *child;
 	JabberCapsClientInfo *info;
 
-	if (!query || strcmp(query->xmlns, "http://jabber.org/protocol/disco#info"))
+	if (!query || strcmp(query->xmlns, NS_DISCO_INFO))
 		return 0;
 
 	info = g_new0(JabberCapsClientInfo, 1);
--- a/libpurple/protocols/jabber/chat.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/chat.c	Sat Nov 28 02:22:49 2009 +0000
@@ -825,7 +825,7 @@
 
 	purple_roomlist_set_in_progress(js->roomlist, TRUE);
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_ITEMS);
 
 	xmlnode_set_attrib(iq->node, "to", server);
 
@@ -1201,7 +1201,7 @@
 	for(x = xmlnode_get_child(query, "feature"); x; x = xmlnode_get_next_twin(x)) {
 		const char *var = xmlnode_get_attrib(x, "var");
 
-		if(var && !strcmp(var, "http://jabber.org/protocol/xhtml-im")) {
+		if(var && !strcmp(var, NS_XHTML_IM)) {
 			chat->xhtml = TRUE;
 		}
 	}
@@ -1216,8 +1216,7 @@
 
 	room_jid = g_strdup_printf("%s@%s", chat->room, chat->server);
 
-	iq = jabber_iq_new_query(chat->js, JABBER_IQ_GET,
-			"http://jabber.org/protocol/disco#info");
+	iq = jabber_iq_new_query(chat->js, JABBER_IQ_GET, NS_DISCO_INFO);
 
 	xmlnode_set_attrib(iq->node, "to", room_jid);
 
--- a/libpurple/protocols/jabber/data.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/data.c	Sat Nov 28 02:22:49 2009 +0000
@@ -18,11 +18,12 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
+
 #include <stdlib.h>
 #include <glib.h>
 #include <string.h>
 
-#include "internal.h"
 #include "data.h"
 #include "debug.h"
 #include "xmlnode.h"
@@ -140,7 +141,7 @@
 	xmlnode *tag = xmlnode_new("data");
 	char *base64data = purple_base64_encode(data->data, data->size);
 
-	xmlnode_set_namespace(tag, XEP_0231_NAMESPACE);
+	xmlnode_set_namespace(tag, NS_BOB);
 	xmlnode_set_attrib(tag, "cid", data->cid);
 	xmlnode_set_attrib(tag, "type", data->type);
 
@@ -169,7 +170,7 @@
 {
 	xmlnode *tag = xmlnode_new("data");
 
-	xmlnode_set_namespace(tag, XEP_0231_NAMESPACE);
+	xmlnode_set_namespace(tag, NS_BOB);
 	xmlnode_set_attrib(tag, "cid", cid);
 
 	return tag;
@@ -254,7 +255,7 @@
 	remote_data_by_cid = g_hash_table_new_full(g_str_hash, g_str_equal,
 		g_free, jabber_data_delete);
 
-	jabber_iq_register_handler("data", XEP_0231_NAMESPACE, jabber_data_parse);
+	jabber_iq_register_handler("data", NS_BOB, jabber_data_parse);
 }
 
 void
--- a/libpurple/protocols/jabber/data.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/data.h	Sat Nov 28 02:22:49 2009 +0000
@@ -24,8 +24,6 @@
 #include "xmlnode.h"
 #include "jabber.h"
 
-#define XEP_0231_NAMESPACE "urn:xmpp:bob"
-
 #include <glib.h>
 
 typedef struct {
--- a/libpurple/protocols/jabber/disco.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/disco.c	Sat Nov 28 02:22:49 2009 +0000
@@ -60,7 +60,7 @@
 {
 	JabberBytestreamsStreamhost *sh = data;
 	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
-		"http://jabber.org/protocol/bytestreams");
+		NS_BYTESTREAMS);
 
 	if (from && !strcmp(from, sh->jid) && query != NULL) {
 		xmlnode *sh_node = xmlnode_get_child(query, "streamhost");
@@ -109,8 +109,7 @@
 		/* create custom caps node URI */
 		node_uri = g_strconcat(CAPS0115_NODE, "#", jabber_caps_get_own_hash(js), NULL);
 
-		iq = jabber_iq_new_query(js, JABBER_IQ_RESULT,
-				"http://jabber.org/protocol/disco#info");
+		iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, NS_DISCO_INFO);
 
 		jabber_iq_set_id(iq, id);
 
@@ -152,7 +151,7 @@
 			 * advertises as 'voice-v1'.
 			 */
 			xmlnode *feature = xmlnode_new_child(query, "feature");
-			xmlnode_set_attrib(feature, "var", "http://www.google.com/xmpp/protocol/voice/v1");
+			xmlnode_set_attrib(feature, "var", NS_GOOGLE_VOICE);
 		} else if (g_str_equal(node, CAPS0115_NODE "#" "video-v1")) {
 			/*
 			 * HUGE HACK! We advertise this ext (see jabber_presence_create_js
@@ -164,7 +163,7 @@
 			 * advertises as 'video-v1'.
 			 */
 			xmlnode *feature = xmlnode_new_child(query, "feature");
-			xmlnode_set_attrib(feature, "var", "http://www.google.com/xmpp/protocol/video/v1");
+			xmlnode_set_attrib(feature, "var", NS_GOOGLE_VIDEO);
 		} else if (g_str_equal(node, CAPS0115_NODE "#" "camera-v1")) {
 			/*
 			 * HUGE HACK! We advertise this ext (see jabber_presence_create_js
@@ -176,7 +175,7 @@
 			 * advertises as 'camera-v1'.
 			 */
 			xmlnode *feature = xmlnode_new_child(query, "feature");
-			xmlnode_set_attrib(feature, "var", "http://www.google.com/xmpp/protocol/camera/v1");
+			xmlnode_set_attrib(feature, "var", NS_GOOGLE_CAMERA);
 #endif
 		} else {
 			xmlnode *error, *inf;
@@ -189,7 +188,7 @@
 			xmlnode_set_attrib(error, "code", "404");
 			xmlnode_set_attrib(error, "type", "cancel");
 			inf = xmlnode_new_child(error, "item-not-found");
-			xmlnode_set_namespace(inf, "urn:ietf:params:xml:ns:xmpp-stanzas");
+			xmlnode_set_namespace(inf, NS_XMPP_STANZAS);
 		}
 		g_free(node_uri);
 		jabber_iq_send(iq);
@@ -204,7 +203,7 @@
 		error = xmlnode_new_child(iq->node, "error");
 		xmlnode_set_attrib(error, "type", "modify");
 		bad_request = xmlnode_new_child(error, "bad-request");
-		xmlnode_set_namespace(bad_request, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(bad_request, NS_XMPP_STANZAS);
 
 		jabber_iq_set_id(iq, id);
 		if (from)
@@ -221,8 +220,7 @@
 	struct _jabber_disco_info_cb_data *jdicd = data;
 	xmlnode *query;
 
-	query = xmlnode_get_child_with_namespace(packet, "query",
-				"http://jabber.org/protocol/disco#info");
+	query = xmlnode_get_child_with_namespace(packet, "query", NS_DISCO_INFO);
 
 	if (type == JABBER_IQ_RESULT && query) {
 		xmlnode *child;
@@ -257,7 +255,7 @@
 				} else if(!strcmp(category, "directory") && !strcmp(type, "user")) {
 					/* we found a JUD */
 					js->user_directories = g_list_prepend(js->user_directories, g_strdup(from));
-				} else if(!strcmp(category, "proxy") && !strcmp(type, "bytestreams")) {
+				} else if(!strcmp(category, "proxy") && !strcmp(type, NS_BYTESTREAMS)) {
 					/* This is a bytestream proxy */
 					JabberIq *iq;
 					JabberBytestreamsStreamhost *sh;
@@ -269,7 +267,7 @@
 					js->bs_proxies = g_list_prepend(js->bs_proxies, sh);
 
 					iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-								 "http://jabber.org/protocol/bytestreams");
+							NS_BYTESTREAMS);
 					xmlnode_set_attrib(iq->node, "to", sh->jid);
 					jabber_iq_set_callback(iq, jabber_disco_bytestream_server_cb, sh);
 					jabber_iq_send(iq);
@@ -284,20 +282,20 @@
 					capabilities |= JABBER_CAP_SI;
 				else if(!strcmp(var, "http://jabber.org/protocol/si/profile/file-transfer"))
 					capabilities |= JABBER_CAP_SI_FILE_XFER;
-				else if(!strcmp(var, "http://jabber.org/protocol/bytestreams"))
+				else if(!strcmp(var, NS_BYTESTREAMS))
 					capabilities |= JABBER_CAP_BYTESTREAMS;
 				else if(!strcmp(var, "jabber:iq:search"))
 					capabilities |= JABBER_CAP_IQ_SEARCH;
 				else if(!strcmp(var, "jabber:iq:register"))
 					capabilities |= JABBER_CAP_IQ_REGISTER;
-				else if(!strcmp(var, "urn:xmpp:ping"))
+				else if(!strcmp(var, NS_PING))
 					capabilities |= JABBER_CAP_PING;
-				else if(!strcmp(var, "http://jabber.org/protocol/disco#items"))
+				else if(!strcmp(var, NS_DISCO_ITEMS))
 					capabilities |= JABBER_CAP_ITEMS;
 				else if(!strcmp(var, "http://jabber.org/protocol/commands")) {
 					capabilities |= JABBER_CAP_ADHOC;
 				}
-				else if(!strcmp(var, "http://jabber.org/protocol/ibb")) {
+				else if(!strcmp(var, NS_IBB)) {
 					purple_debug_info("jabber", "remote supports IBB\n");
 					capabilities |= JABBER_CAP_IBB;
 				}
@@ -341,7 +339,7 @@
 {
 	if(type == JABBER_IQ_GET) {
 		JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_RESULT,
-				"http://jabber.org/protocol/disco#items");
+				NS_DISCO_ITEMS);
 
 		/* preserve node */
 		xmlnode *iq_query = xmlnode_get_child(iq->node, "query");
@@ -409,8 +407,7 @@
 			sh->jid = g_strdup(ft_proxy_list[i]);
 			js->bs_proxies = g_list_prepend(js->bs_proxies, sh);
 
-			iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-						 "http://jabber.org/protocol/bytestreams");
+			iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_BYTESTREAMS);
 			xmlnode_set_attrib(iq->node, "to", sh->jid);
 			jabber_iq_set_callback(iq, jabber_disco_bytestream_server_cb, sh);
 			jabber_iq_send(iq);
@@ -555,7 +552,7 @@
 		if (!var)
 			continue;
 
-		if (!strcmp("google:mail:notify", var)) {
+		if (!strcmp(NS_GOOGLE_MAIL_NOTIFY, var)) {
 			js->server_caps |= JABBER_CAP_GMAIL_NOTIFY;
 			jabber_gmail_init(js);
 		} else if (!strcmp("google:roster", var)) {
@@ -563,7 +560,7 @@
 			jabber_google_roster_init(js);
 		} else if (!strcmp("http://jabber.org/protocol/commands", var)) {
 			js->server_caps |= JABBER_CAP_ADHOC;
-		} else if (!strcmp("urn:xmpp:blocking", var)) {
+		} else if (!strcmp(NS_SIMPLE_BLOCKING, var)) {
 			js->server_caps |= JABBER_CAP_BLOCKING;
 		}
 	}
@@ -604,7 +601,7 @@
 		if((node = xmlnode_get_attrib(child, "node")))
 			continue;
 
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#info");
+		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 		xmlnode_set_attrib(iq->node, "to", jid);
 		jabber_iq_set_callback(iq, jabber_disco_info_cb, NULL);
 		jabber_iq_send(iq);
@@ -613,15 +610,14 @@
 
 void jabber_disco_items_server(JabberStream *js)
 {
-	JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_GET,
-			"http://jabber.org/protocol/disco#items");
+	JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_ITEMS);
 
 	xmlnode_set_attrib(iq->node, "to", js->user->domain);
 
 	jabber_iq_set_callback(iq, jabber_disco_server_items_result_cb, NULL);
 	jabber_iq_send(iq);
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#info");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 	xmlnode_set_attrib(iq->node, "to", js->user->domain);
 	jabber_iq_set_callback(iq, jabber_disco_server_info_result_cb, NULL);
 	jabber_iq_send(iq);
@@ -650,7 +646,7 @@
 	jdicd->data = data;
 	jdicd->callback = callback;
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#info");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_DISCO_INFO);
 	xmlnode_set_attrib(iq->node, "to", who);
 
 	jabber_iq_set_callback(iq, jabber_disco_info_cb, jdicd);
--- a/libpurple/protocols/jabber/google.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/google.c	Sat Nov 28 02:22:49 2009 +0000
@@ -37,9 +37,6 @@
 
 #ifdef USE_VV
 
-#define NS_GOOGLE_VIDEO "http://www.google.com/session/video"
-#define NS_GOOGLE_PHONE "http://www.google.com/session/phone"
-
 typedef struct {
 	char *id;
 	char *initiator;
@@ -84,7 +81,7 @@
 google_session_create_xmlnode(GoogleSession *session, const char *type)
 {
 	xmlnode *node = xmlnode_new("session");
-	xmlnode_set_namespace(node, "http://www.google.com/session");
+	xmlnode_set_namespace(node, NS_GOOGLE_SESSION);
 	xmlnode_set_attrib(node, "id", session->id.id);
 	xmlnode_set_attrib(node, "initiator", session->id.initiator);
 	xmlnode_set_attrib(node, "type", type);
@@ -213,9 +210,9 @@
 		xmlnode_insert_child(iq->node, sess);
 		desc = xmlnode_new_child(sess, "description");
 		if (session->video)
-			xmlnode_set_namespace(desc, NS_GOOGLE_VIDEO);
+			xmlnode_set_namespace(desc, NS_GOOGLE_SESSION_VIDEO);
 		else
-			xmlnode_set_namespace(desc, NS_GOOGLE_PHONE);
+			xmlnode_set_namespace(desc, NS_GOOGLE_SESSION_PHONE);
 
 		codecs = purple_media_get_codecs(media, "google-video");
 
@@ -248,7 +245,7 @@
 					purple_media_codec_get_clock_rate(codec));
 			payload = xmlnode_new_child(desc, "payload-type");
 			if (session->video)
-				xmlnode_set_namespace(payload, NS_GOOGLE_PHONE);
+				xmlnode_set_namespace(payload, NS_GOOGLE_SESSION_PHONE);
 			xmlnode_set_attrib(payload, "id", id);
 			/*
 			 * Hack to make Gmail accept speex as the codec.
@@ -439,9 +436,9 @@
 	desc_element = xmlnode_get_child(sess, "description");
 	xmlns = xmlnode_get_namespace(desc_element);
 
-	if (purple_strequal(xmlns, NS_GOOGLE_PHONE))
+	if (purple_strequal(xmlns, NS_GOOGLE_SESSION_PHONE))
 		session->video = FALSE;
-	else if (purple_strequal(xmlns, NS_GOOGLE_VIDEO))
+	else if (purple_strequal(xmlns, NS_GOOGLE_SESSION_VIDEO))
 		session->video = TRUE;
 	else {
 		purple_debug_error("jabber", "Received initiate with "
@@ -498,7 +495,7 @@
 		id = xmlnode_get_attrib(codec_element, "id");
 
 		if (!session->video ||
-				(xmlns && !strcmp(xmlns, NS_GOOGLE_PHONE))) {
+				(xmlns && !strcmp(xmlns, NS_GOOGLE_SESSION_PHONE))) {
 			clock_rate = xmlnode_get_attrib(
 					codec_element, "clockrate");
 			video = FALSE;
@@ -623,7 +620,7 @@
 	GList *codecs = NULL, *video_codecs = NULL;
 	JabberIq *result = NULL;
 	const gchar *xmlns = xmlnode_get_namespace(desc_element);
-	gboolean video = (xmlns && !strcmp(xmlns, NS_GOOGLE_VIDEO));
+	gboolean video = (xmlns && !strcmp(xmlns, NS_GOOGLE_SESSION_VIDEO));
 
 	for (; codec_element; codec_element = codec_element->next) {
 		const gchar *xmlns, *encoding_name, *id,
@@ -637,7 +634,7 @@
 		encoding_name =	xmlnode_get_attrib(codec_element, "name");
 		id = xmlnode_get_attrib(codec_element, "id");
 
-		if (!video || purple_strequal(xmlns, NS_GOOGLE_PHONE))
+		if (!video || purple_strequal(xmlns, NS_GOOGLE_SESSION_PHONE))
 			clock_rate = xmlnode_get_attrib(
 					codec_element, "clockrate");
 		else {
@@ -913,7 +910,7 @@
 	purple_debug_misc("jabber",
 		   "Got new mail notification. Sending request for more info\n");
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "google:mail:notify");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_GOOGLE_MAIL_NOTIFY);
 	jabber_iq_set_callback(iq, jabber_gmail_parse, NULL);
 	query = xmlnode_get_child(iq->node, "query");
 
@@ -947,7 +944,7 @@
 	xmlnode_set_attrib(mailnotifications, "value", "true");
 	jabber_iq_send(iq);
 
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "google:mail:notify");
+	iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_GOOGLE_MAIL_NOTIFY);
 	jabber_iq_set_callback(iq, jabber_gmail_parse, NULL);
 	jabber_iq_send(iq);
 }
@@ -1401,7 +1398,7 @@
                              xmlnode *packet, gpointer data)
 {
 	xmlnode *query = xmlnode_get_child_with_namespace(packet, "query",
-			GOOGLE_JINGLE_INFO_NAMESPACE);
+			NS_GOOGLE_JINGLE_INFO);
 
 	if (query)
 		jabber_google_jingle_info_common(js, from, type, query);
@@ -1421,7 +1418,7 @@
 jabber_google_send_jingle_info(JabberStream *js)
 {
 	JabberIq *jingle_info =
-		jabber_iq_new_query(js, JABBER_IQ_GET, GOOGLE_JINGLE_INFO_NAMESPACE);
+		jabber_iq_new_query(js, JABBER_IQ_GET, NS_GOOGLE_JINGLE_INFO);
 
 	jabber_iq_set_callback(jingle_info, jabber_google_jingle_info_cb,
 		NULL);
--- a/libpurple/protocols/jabber/google.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/google.h	Sat Nov 28 02:22:49 2009 +0000
@@ -25,11 +25,6 @@
  * such that they don't intermingle with code for the XMPP RFCs and XEPs :) */
 
 #include "jabber.h"
-#include "media.h"
-
-#define GOOGLE_VOICE_CAP "http://www.google.com/xmpp/protocol/voice/v1"
-#define GOOGLE_VIDEO_CAP "http://www.google.com/xmpp/protocol/video/v1"
-#define GOOGLE_JINGLE_INFO_NAMESPACE "google:jingleinfo"
 
 #define GOOGLE_GROUPCHAT_SERVER "groupchat.google.com"
 
--- a/libpurple/protocols/jabber/ibb.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/ibb.c	Sat Nov 28 02:22:49 2009 +0000
@@ -228,7 +228,7 @@
 		gchar block_size[10];
 
 		xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess));
-		xmlnode_set_namespace(open, XEP_0047_NAMESPACE);
+		xmlnode_set_namespace(open, NS_IBB);
 		xmlnode_set_attrib(open, "sid", jabber_ibb_session_get_sid(sess));
 		g_snprintf(block_size, sizeof(block_size), "%" G_GSIZE_FORMAT,
 			jabber_ibb_session_get_block_size(sess));
@@ -256,7 +256,7 @@
 		xmlnode *close = xmlnode_new("close");
 
 		xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess));
-		xmlnode_set_namespace(close, XEP_0047_NAMESPACE);
+		xmlnode_set_namespace(close, NS_IBB);
 		xmlnode_set_attrib(close, "sid", jabber_ibb_session_get_sid(sess));
 		xmlnode_insert_child(set->node, close);
 		jabber_iq_send(set);
@@ -333,7 +333,7 @@
 		g_snprintf(seq, sizeof(seq), "%u", jabber_ibb_session_get_send_seq(sess));
 
 		xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess));
-		xmlnode_set_namespace(data_element, XEP_0047_NAMESPACE);
+		xmlnode_set_namespace(data_element, NS_IBB);
 		xmlnode_set_attrib(data_element, "sid", jabber_ibb_session_get_sid(sess));
 		xmlnode_set_attrib(data_element, "seq", seq);
 		xmlnode_insert_data(data_element, base64, -1);
@@ -361,8 +361,7 @@
 	xmlnode *error = xmlnode_new("error");
 	xmlnode *item_not_found = xmlnode_new("item-not-found");
 
-	xmlnode_set_namespace(item_not_found,
-		"urn:ietf:params:xml:ns:xmpp-stanzas");
+	xmlnode_set_namespace(item_not_found, NS_XMPP_STANZAS);
 	xmlnode_set_attrib(error, "code", "440");
 	xmlnode_set_attrib(error, "type", "cancel");
 	jabber_iq_set_id(result, id);
@@ -507,11 +506,11 @@
 {
 	jabber_ibb_sessions = g_hash_table_new(g_str_hash, g_str_equal);
 
-	jabber_add_feature(XEP_0047_NAMESPACE, NULL);
+	jabber_add_feature(NS_IBB, NULL);
 
-	jabber_iq_register_handler("close", XEP_0047_NAMESPACE, jabber_ibb_parse);
-	jabber_iq_register_handler("data", XEP_0047_NAMESPACE, jabber_ibb_parse);
-	jabber_iq_register_handler("open", XEP_0047_NAMESPACE, jabber_ibb_parse);
+	jabber_iq_register_handler("close", NS_IBB, jabber_ibb_parse);
+	jabber_iq_register_handler("data", NS_IBB, jabber_ibb_parse);
+	jabber_iq_register_handler("open", NS_IBB, jabber_ibb_parse);
 }
 
 void
--- a/libpurple/protocols/jabber/ibb.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/ibb.h	Sat Nov 28 02:22:49 2009 +0000
@@ -24,8 +24,6 @@
 #include "jabber.h"
 #include "iq.h"
 
-#define XEP_0047_NAMESPACE "http://jabber.org/protocol/ibb"
-
 typedef struct _JabberIBBSession JabberIBBSession;
 
 typedef void
--- a/libpurple/protocols/jabber/iq.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/iq.c	Sat Nov 28 02:22:49 2009 +0000
@@ -155,7 +155,7 @@
 	char *idle_time;
 
 	if(type == JABBER_IQ_GET) {
-		iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, "jabber:iq:last");
+		iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, NS_LAST_ACTIVITY);
 		jabber_iq_set_id(iq, id);
 		if (from)
 			xmlnode_set_attrib(iq->node, "to", from);
@@ -190,7 +190,7 @@
 			xmlnode_set_attrib(iq->node, "to", from);
 
 		child = xmlnode_new_child(iq->node, child->name);
-		xmlnode_set_namespace(child, "urn:xmpp:time");
+		xmlnode_set_namespace(child, NS_ENTITY_TIME);
 
 		/* <tzo>-06:00</tzo> */
 		tm = localtime(&now_t);
@@ -332,7 +332,7 @@
 			error = xmlnode_new_child(iq->node, "error");
 			xmlnode_set_attrib(error, "type", "modify");
 			x = xmlnode_new_child(error, "bad-request");
-			xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas");
+			xmlnode_set_namespace(x, NS_XMPP_STANZAS);
 
 			jabber_iq_send(iq);
 		} else
@@ -397,7 +397,7 @@
 		xmlnode_set_attrib(error, "type", "cancel");
 		xmlnode_set_attrib(error, "code", "501");
 		x = xmlnode_new_child(error, "feature-not-implemented");
-		xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(x, NS_XMPP_STANZAS);
 
 		jabber_iq_send(iq);
 	}
@@ -458,21 +458,19 @@
 	signal_iq_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
 
 	jabber_iq_register_handler("jingle", JINGLE, jingle_parse);
-	jabber_iq_register_handler("mailbox", "google:mail:notify",
+	jabber_iq_register_handler("mailbox", NS_GOOGLE_MAIL_NOTIFY,
 			jabber_gmail_poke);
-	jabber_iq_register_handler("new-mail", "google:mail:notify",
+	jabber_iq_register_handler("new-mail", NS_GOOGLE_MAIL_NOTIFY,
 			jabber_gmail_poke);
-	jabber_iq_register_handler("ping", "urn:xmpp:ping", jabber_ping_parse);
-	jabber_iq_register_handler("query", GOOGLE_JINGLE_INFO_NAMESPACE,
+	jabber_iq_register_handler("ping", NS_PING, jabber_ping_parse);
+	jabber_iq_register_handler("query", NS_GOOGLE_JINGLE_INFO,
 			jabber_google_handle_jingle_info);
-	jabber_iq_register_handler("query", "http://jabber.org/protocol/bytestreams",
+	jabber_iq_register_handler("query", NS_BYTESTREAMS,
 			jabber_bytestreams_parse);
-	jabber_iq_register_handler("query", "http://jabber.org/protocol/disco#info",
-			jabber_disco_info_parse);
-	jabber_iq_register_handler("query", "http://jabber.org/protocol/disco#items",
-			jabber_disco_items_parse);
-	jabber_iq_register_handler("query", "jabber:iq:last", jabber_iq_last_parse);
-	jabber_iq_register_handler("query", "jabber:iq:oob", jabber_oob_parse);
+	jabber_iq_register_handler("query", NS_DISCO_INFO, jabber_disco_info_parse);
+	jabber_iq_register_handler("query", NS_DISCO_ITEMS, jabber_disco_items_parse);
+	jabber_iq_register_handler("query", NS_LAST_ACTIVITY, jabber_iq_last_parse);
+	jabber_iq_register_handler("query", NS_OOB_IQ_DATA, jabber_oob_parse);
 	jabber_iq_register_handler("query", "jabber:iq:register",
 			jabber_register_parse);
 	jabber_iq_register_handler("query", "jabber:iq:roster",
@@ -480,12 +478,12 @@
 	jabber_iq_register_handler("query", "jabber:iq:version",
 			jabber_iq_version_parse);
 #ifdef USE_VV
-	jabber_iq_register_handler("session", "http://www.google.com/session",
+	jabber_iq_register_handler("session", NS_GOOGLE_SESSION,
 		jabber_google_session_parse);
 #endif
-	jabber_iq_register_handler("block", "urn:xmpp:blocking", jabber_blocklist_parse_push);
-	jabber_iq_register_handler("unblock", "urn:xmpp:blocking", jabber_blocklist_parse_push);
-	jabber_iq_register_handler("time", "urn:xmpp:time", jabber_time_parse);
+	jabber_iq_register_handler("block", NS_SIMPLE_BLOCKING, jabber_blocklist_parse_push);
+	jabber_iq_register_handler("unblock", NS_SIMPLE_BLOCKING, jabber_blocklist_parse_push);
+	jabber_iq_register_handler("time", NS_ENTITY_TIME, jabber_time_parse);
 
 }
 
--- a/libpurple/protocols/jabber/jabber.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sat Nov 28 02:22:49 2009 +0000
@@ -81,8 +81,8 @@
 	char *open_stream;
 
 	open_stream = g_strdup_printf("<stream:stream to='%s' "
-				          "xmlns='jabber:client' "
-						  "xmlns:stream='http://etherx.jabber.org/streams' "
+				          "xmlns='" NS_XMPP_CLIENT "' "
+						  "xmlns:stream='" NS_XMPP_STREAMS "' "
 						  "version='1.0'>",
 						  js->user->domain);
 	/* setup the parser fresh for each stream */
@@ -116,7 +116,7 @@
 	jabber_iq_set_callback(iq, jabber_session_initialized_cb, NULL);
 
 	session = xmlnode_new_child(iq->node, "session");
-	xmlnode_set_namespace(session, "urn:ietf:params:xml:ns:xmpp-session");
+	xmlnode_set_namespace(session, NS_XMPP_SESSION);
 
 	jabber_iq_send(iq);
 }
@@ -128,7 +128,7 @@
 	xmlnode *bind;
 
 	if (type == JABBER_IQ_RESULT &&
-			(bind = xmlnode_get_child_with_namespace(packet, "bind", "urn:ietf:params:xml:ns:xmpp-bind"))) {
+			(bind = xmlnode_get_child_with_namespace(packet, "bind", NS_XMPP_BIND))) {
 		xmlnode *jid;
 		char *full_jid;
 		if((jid = xmlnode_get_child(bind, "jid")) && (full_jid = xmlnode_get_data(jid))) {
@@ -217,7 +217,7 @@
 		char *requested_resource;
 		JabberIq *iq = jabber_iq_new(js, JABBER_IQ_SET);
 		bind = xmlnode_new_child(iq->node, "bind");
-		xmlnode_set_namespace(bind, "urn:ietf:params:xml:ns:xmpp-bind");
+		xmlnode_set_namespace(bind, NS_XMPP_BIND);
 		requested_resource = jabber_prep_resource(js->user->resource);
 
 		if (requested_resource != NULL) {
@@ -272,11 +272,11 @@
 	} else if(!strcmp((*packet)->name, "stream:features")) {
 		jabber_stream_features_parse(js, *packet);
 	} else if (!strcmp((*packet)->name, "features") && xmlns &&
-		   !strcmp(xmlns, "http://etherx.jabber.org/streams")) {
+		   !strcmp(xmlns, NS_XMPP_STREAMS)) {
 		jabber_stream_features_parse(js, *packet);
 	} else if(!strcmp((*packet)->name, "stream:error") ||
 			 (!strcmp((*packet)->name, "error") && xmlns &&
-				!strcmp(xmlns, "http://etherx.jabber.org/streams")))
+				!strcmp(xmlns, NS_XMPP_STREAMS)))
 	{
 		jabber_stream_handle_error(js, *packet);
 	} else if(!strcmp((*packet)->name, "challenge")) {
@@ -385,7 +385,7 @@
 		if(js->state != JABBER_STREAM_CONNECTED &&
 				/* Either <auth> or <query><password>... */
 				(((tag_start = strstr(data, "<auth ")) &&
-					strstr(data, "xmlns='urn:ietf:params:xml:ns:xmpp-sasl'")) ||
+					strstr(data, "xmlns='" NS_XMPP_SASL "'")) ||
 				((tag_start = strstr(data, "<query ")) &&
 					strstr(data, "xmlns='jabber:iq:auth'>") &&
 					(tag_start = strstr(tag_start, "<password>"))))) {
@@ -476,12 +476,19 @@
 	if (NULL == packet)
 		return;
 
+	if (!PURPLE_CONNECTION_IS_VALID(pc))
+		return;
+
 	js = purple_connection_get_protocol_data(pc);
+
+	if (NULL == js)
+		return;
+
 	if (js->bosh)
 		if (g_str_equal((*packet)->name, "message") ||
 				g_str_equal((*packet)->name, "iq") ||
 				g_str_equal((*packet)->name, "presence"))
-			xmlnode_set_namespace(*packet, "jabber:client");
+			xmlnode_set_namespace(*packet, NS_XMPP_CLIENT);
 	txt = xmlnode_to_str(*packet, &len);
 	jabber_send_raw(js, txt, len);
 	g_free(txt);
@@ -1206,7 +1213,7 @@
 		jabber_x_data_request(js, x, jabber_register_x_data_cb, g_strdup(from));
 		return;
 
-	} else if((x = xmlnode_get_child_with_namespace(query, "x", "jabber:x:oob"))) {
+	} else if((x = xmlnode_get_child_with_namespace(query, "x", NS_OOB_X_DATA))) {
 		xmlnode *url;
 
 		if((url = xmlnode_get_child(x, "url"))) {
@@ -1635,7 +1642,7 @@
 		error = xmlnode_new_child(result->node, "error");
 		xmlnode_set_attrib(error, "type", "cancel");
 		x = xmlnode_new_child(error, "not-allowed");
-		xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(x, NS_XMPP_STANZAS);
 
 		jabber_iq_send(result);
 		return;
@@ -1661,7 +1668,7 @@
 		error = xmlnode_new_child(result->node, "error");
 		xmlnode_set_attrib(error, "type", "modify");
 		x = xmlnode_new_child(error, "bad-request");
-		xmlnode_set_namespace(x, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(x, NS_XMPP_STANZAS);
 
 		jabber_iq_send(result);
 		return;
@@ -1691,7 +1698,7 @@
 	PurpleAccount *account;
 
 	blocklist = xmlnode_get_child_with_namespace(packet,
-			"blocklist", "urn:xmpp:blocking");
+			"blocklist", NS_SIMPLE_BLOCKING);
 	account = purple_connection_get_account(js->gc);
 
 	if (type == JABBER_IQ_ERROR || blocklist == NULL)
@@ -1724,7 +1731,7 @@
 	iq = jabber_iq_new(js, JABBER_IQ_GET);
 
 	blocklist = xmlnode_new_child(iq->node, "blocklist");
-	xmlnode_set_namespace(blocklist, "urn:xmpp:blocking");
+	xmlnode_set_namespace(blocklist, NS_SIMPLE_BLOCKING);
 
 	jabber_iq_set_callback(iq, jabber_blocklist_parse, NULL);
 
@@ -1757,7 +1764,7 @@
 	iq = jabber_iq_new(js, JABBER_IQ_SET);
 
 	block = xmlnode_new_child(iq->node, "block");
-	xmlnode_set_namespace(block, "urn:xmpp:blocking");
+	xmlnode_set_namespace(block, NS_SIMPLE_BLOCKING);
 
 	item = xmlnode_new_child(block, "item");
 	xmlnode_set_attrib(item, "jid", who);
@@ -1787,7 +1794,7 @@
 	iq = jabber_iq_new(js, JABBER_IQ_SET);
 
 	unblock = xmlnode_new_child(iq->node, "unblock");
-	xmlnode_set_namespace(unblock, "urn:xmpp:blocking");
+	xmlnode_set_namespace(unblock, NS_SIMPLE_BLOCKING);
 
 	item = xmlnode_new_child(unblock, "item");
 	xmlnode_set_attrib(item, "jid", who);
@@ -2451,7 +2458,7 @@
 		} else if(xmlnode_get_child(error, "undefined-condition")) {
 			text = _("Unknown Error");
 		}
-	} else if(xmlns && !strcmp(xmlns, "urn:ietf:params:xml:ns:xmpp-sasl")) {
+	} else if(xmlns && !strcmp(xmlns, NS_XMPP_SASL)) {
 		/* Most common reason can be the default */
 		SET_REASON(PURPLE_CONNECTION_ERROR_NETWORK_ERROR);
 		if(xmlnode_get_child(packet, "aborted")) {
@@ -2479,7 +2486,7 @@
 		}
 	} else if(!strcmp(packet->name, "stream:error") ||
 			 (!strcmp(packet->name, "error") && xmlns &&
-				!strcmp(xmlns, "http://etherx.jabber.org/streams"))) {
+				!strcmp(xmlns, NS_XMPP_STREAMS))) {
 		/* Most common reason as default: */
 		SET_REASON(PURPLE_CONNECTION_ERROR_NETWORK_ERROR);
 		if(xmlnode_get_child(packet, "bad-format")) {
@@ -2835,7 +2842,7 @@
 		return FALSE;
 	}
 
-	if (jabber_resource_has_capability(jbr, XEP_0224_NAMESPACE)) {
+	if (jabber_resource_has_capability(jbr, NS_ATTENTION)) {
 		xmlnode *buzz, *msg = xmlnode_new("message");
 		gchar *to;
 
@@ -2847,7 +2854,7 @@
 		xmlnode_set_attrib(msg, "type", "headline");
 
 		buzz = xmlnode_new_child(msg, "attention");
-		xmlnode_set_namespace(buzz, XEP_0224_NAMESPACE);
+		xmlnode_set_namespace(buzz, NS_ATTENTION);
 
 		jabber_send(js, msg);
 		xmlnode_free(msg);
@@ -3008,8 +3015,7 @@
 		if (type & PURPLE_MEDIA_AUDIO &&
 				!jabber_resource_has_capability(jbr,
 				JINGLE_APP_RTP_SUPPORT_AUDIO) &&
-				jabber_resource_has_capability(jbr,
-				GOOGLE_VOICE_CAP))
+				jabber_resource_has_capability(jbr, NS_GOOGLE_VOICE))
 			return jabber_google_session_initiate(js, who, type);
 		else
 			return jingle_rtp_initiate_media(js, who, type);
@@ -3178,10 +3184,9 @@
 				caps |= PURPLE_MEDIA_CAPS_MODIFY_SESSION |
 						PURPLE_MEDIA_CAPS_CHANGE_DIRECTION;
 		}
-		if (jabber_resource_has_capability(jbr, GOOGLE_VOICE_CAP)) {
+		if (jabber_resource_has_capability(jbr, NS_GOOGLE_VOICE)) {
 			caps |= PURPLE_MEDIA_CAPS_AUDIO;
-			if (jabber_resource_has_capability(jbr,
-					GOOGLE_VIDEO_CAP))
+			if (jabber_resource_has_capability(jbr, NS_GOOGLE_VIDEO))
 				caps |= PURPLE_MEDIA_CAPS_AUDIO_VIDEO;
 		}
 		return caps;
@@ -3258,9 +3263,8 @@
 				if (jabber_resource_has_capability(jbr,
 						"http://jabber.org/protocol/si/profile/file-transfer")
 			    	&& (jabber_resource_has_capability(jbr,
-			    			"http://jabber.org/protocol/bytestreams")
-			        	|| jabber_resource_has_capability(jbr,
-				           		XEP_0047_NAMESPACE))) {
+			    			NS_BYTESTREAMS)
+			        	|| jabber_resource_has_capability(jbr, NS_IBB))) {
 					return TRUE;
 				}
 			}
@@ -3471,38 +3475,38 @@
 	jabber_add_identity("client", type, NULL, ui_name);
 
 	/* initialize jabber_features list */
-	jabber_add_feature("jabber:iq:last", 0);
-	jabber_add_feature("jabber:iq:oob", 0);
-	jabber_add_feature("urn:xmpp:time", 0);
+	jabber_add_feature(NS_LAST_ACTIVITY, 0);
+	jabber_add_feature(NS_OOB_IQ_DATA, 0);
+	jabber_add_feature(NS_ENTITY_TIME, 0);
 	jabber_add_feature("jabber:iq:version", 0);
 	jabber_add_feature("jabber:x:conference", 0);
-	jabber_add_feature("http://jabber.org/protocol/bytestreams", 0);
+	jabber_add_feature(NS_BYTESTREAMS, 0);
 	jabber_add_feature("http://jabber.org/protocol/caps", 0);
 	jabber_add_feature("http://jabber.org/protocol/chatstates", 0);
-	jabber_add_feature("http://jabber.org/protocol/disco#info", 0);
-	jabber_add_feature("http://jabber.org/protocol/disco#items", 0);
-	jabber_add_feature("http://jabber.org/protocol/ibb", 0);
+	jabber_add_feature(NS_DISCO_INFO, 0);
+	jabber_add_feature(NS_DISCO_ITEMS, 0);
+	jabber_add_feature(NS_IBB, 0);
 	jabber_add_feature("http://jabber.org/protocol/muc", 0);
 	jabber_add_feature("http://jabber.org/protocol/muc#user", 0);
 	jabber_add_feature("http://jabber.org/protocol/si", 0);
 	jabber_add_feature("http://jabber.org/protocol/si/profile/file-transfer", 0);
-	jabber_add_feature("http://jabber.org/protocol/xhtml-im", 0);
-	jabber_add_feature("urn:xmpp:ping", 0);
+	jabber_add_feature(NS_XHTML_IM, 0);
+	jabber_add_feature(NS_PING, 0);
 
 	/* Buzz/Attention */
-	jabber_add_feature(XEP_0224_NAMESPACE, jabber_buzz_isenabled);
+	jabber_add_feature(NS_ATTENTION, jabber_buzz_isenabled);
 
 	/* Bits Of Binary */
-	jabber_add_feature(XEP_0231_NAMESPACE, 0);
+	jabber_add_feature(NS_BOB, 0);
 
 	/* Jingle features! */
 	jabber_add_feature(JINGLE, 0);
 
 #ifdef USE_VV
-	jabber_add_feature("http://www.google.com/xmpp/protocol/session", jabber_audio_enabled);
-	jabber_add_feature("http://www.google.com/xmpp/protocol/voice/v1", jabber_audio_enabled);
-	jabber_add_feature("http://www.google.com/xmpp/protocol/video/v1", jabber_video_enabled);
-	jabber_add_feature("http://www.google.com/xmpp/protocol/camera/v1", jabber_video_enabled);
+	jabber_add_feature(NS_GOOGLE_PROTOCOL_SESSION, jabber_audio_enabled);
+	jabber_add_feature(NS_GOOGLE_VOICE, jabber_audio_enabled);
+	jabber_add_feature(NS_GOOGLE_VIDEO, jabber_video_enabled);
+	jabber_add_feature(NS_GOOGLE_CAMERA, jabber_video_enabled);
 	jabber_add_feature(JINGLE_APP_RTP, 0);
 	jabber_add_feature(JINGLE_APP_RTP_SUPPORT_AUDIO, jabber_audio_enabled);
 	jabber_add_feature(JINGLE_APP_RTP_SUPPORT_VIDEO, jabber_video_enabled);
--- a/libpurple/protocols/jabber/jabber.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.h	Sat Nov 28 02:22:49 2009 +0000
@@ -64,6 +64,8 @@
 #include "roomlist.h"
 #include "sslconn.h"
 
+#include "namespaces.h"
+
 #include "iq.h"
 #include "jutil.h"
 #include "xmlnode.h"
--- a/libpurple/protocols/jabber/jingle/session.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/jingle/session.c	Sat Nov 28 02:22:49 2009 +0000
@@ -360,11 +360,15 @@
 JingleSession *
 jingle_session_find_by_sid(JabberStream *js, const gchar *sid)
 {
+	JingleSession *session = NULL;
+
+	if (js->sessions)
+		session = g_hash_table_lookup(js->sessions, sid);
+
 	purple_debug_info("jingle", "find_by_id %s\n", sid);
-	purple_debug_info("jingle", "lookup: %p\n", (js->sessions) ?
-			  g_hash_table_lookup(js->sessions, sid) : NULL);  
-	return (JingleSession *) (js->sessions) ?
-			  g_hash_table_lookup(js->sessions, sid) : NULL;
+	purple_debug_info("jingle", "lookup: %p\n", session);
+
+	return session;
 }
 
 static gboolean find_by_jid_ghr(gpointer key,
--- a/libpurple/protocols/jabber/message.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/message.c	Sat Nov 28 02:22:49 2009 +0000
@@ -178,7 +178,7 @@
 	for(etc = jm->etc; etc; etc = etc->next) {
 		xmlnode *x = etc->data;
 		const char *xmlns = xmlnode_get_namespace(x);
-		if(xmlns && !strcmp(xmlns, "jabber:x:oob")) {
+		if(xmlns && !strcmp(xmlns, NS_OOB_X_DATA)) {
 			xmlnode *url, *desc;
 			char *urltxt, *desctxt;
 
@@ -460,7 +460,7 @@
 jabber_message_add_remote_smileys(const xmlnode *message)
 {
 	xmlnode *data_tag;
-	for (data_tag = xmlnode_get_child_with_namespace(message, "data", XEP_0231_NAMESPACE) ;
+	for (data_tag = xmlnode_get_child_with_namespace(message, "data", NS_BOB) ;
 		 data_tag ;
 		 data_tag = xmlnode_get_next_twin(data_tag)) {
 		const gchar *cid = xmlnode_get_attrib(data_tag, "cid");
@@ -611,22 +611,22 @@
 				jm->etc = g_list_append(jm->etc, child);
 			/* The following tests expect xmlns != NULL */
 			continue;
-		} else if(!strcmp(child->name, "subject") && !strcmp(xmlns,"jabber:client")) {
+		} else if(!strcmp(child->name, "subject") && !strcmp(xmlns, NS_XMPP_CLIENT)) {
 			if(!jm->subject) {
 				jm->subject = xmlnode_get_data(child);
 				if(!jm->subject)
 					jm->subject = g_strdup("");
 			}
-		} else if(!strcmp(child->name, "thread") && !strcmp(xmlns,"jabber:client")) {
+		} else if(!strcmp(child->name, "thread") && !strcmp(xmlns, NS_XMPP_CLIENT)) {
 			if(!jm->thread_id)
 				jm->thread_id = xmlnode_get_data(child);
-		} else if(!strcmp(child->name, "body") && !strcmp(xmlns,"jabber:client")) {
+		} else if(!strcmp(child->name, "body") && !strcmp(xmlns, NS_XMPP_CLIENT)) {
 			if(!jm->body) {
 				char *msg = xmlnode_to_str(child, NULL);
 				jm->body = purple_strdup_withhtml(msg);
 				g_free(msg);
 			}
-		} else if(!strcmp(child->name, "html") && !strcmp(xmlns,"http://jabber.org/protocol/xhtml-im")) {
+		} else if(!strcmp(child->name, "html") && !strcmp(xmlns, NS_XHTML_IM)) {
 			if(!jm->xhtml && xmlnode_get_child(child, "body")) {
 				char *c;
 
@@ -740,7 +740,7 @@
 			jm->type = JABBER_MESSAGE_EVENT;
 			for(items = xmlnode_get_child(child,"items"); items; items = items->next)
 				jm->eventitems = g_list_append(jm->eventitems, items);
-		} else if(!strcmp(child->name, "attention") && !strcmp(xmlns, XEP_0224_NAMESPACE)) {
+		} else if(!strcmp(child->name, "attention") && !strcmp(xmlns, NS_ATTENTION)) {
 			jm->hasBuzz = TRUE;
 		} else if(!strcmp(child->name, "delay") && !strcmp(xmlns,"urn:xmpp:delay")) {
 			const char *timestamp = xmlnode_get_attrib(child, "stamp");
@@ -800,7 +800,7 @@
 			}
 		} else if (g_str_equal(child->name, "query")) {
 			const char *node = xmlnode_get_attrib(child, "node");
-			if (purple_strequal(xmlns, "http://jabber.org/protocol/disco#items")
+			if (purple_strequal(xmlns, NS_DISCO_ITEMS)
 					&& purple_strequal(node, "http://jabber.org/protocol/commands")) {
 				jabber_adhoc_got_list(js, jm->from, child);
 			}
@@ -946,7 +946,7 @@
 		case PURPLE_CONV_TYPE_IM:
 			jb = jabber_buddy_find(js, who, FALSE);
 			if (jb) {
-				return jabber_buddy_has_capability(jb, XEP_0231_NAMESPACE);
+				return jabber_buddy_has_capability(jb, NS_BOB);
 			} else {
 				return FALSE;
 			}
@@ -958,7 +958,7 @@
 				 10 people, to avoid getting too many BoB requests */
 				return jabber_chat_get_num_participants(chat) <= 10 &&
 					jabber_chat_all_participants_have_capability(chat,
-						XEP_0231_NAMESPACE);
+						NS_BOB);
 			} else {
 				return FALSE;
 			}
@@ -1204,9 +1204,9 @@
 	 * the user's roster, allow sending XHTML-IM markup.
 	 */
 	if (!jbr || !jbr->caps.info ||
-			jabber_resource_has_capability(jbr, "http://jabber.org/protocol/xhtml-im")) {
+			jabber_resource_has_capability(jbr, NS_XHTML_IM)) {
 		if (!jabber_xhtml_plain_equal(xhtml, jm->body))
-			jm->xhtml = g_strdup_printf("<html xmlns='http://jabber.org/protocol/xhtml-im'><body xmlns='http://www.w3.org/1999/xhtml'>%s</body></html>", xhtml);
+			jm->xhtml = g_strdup_printf("<html xmlns='" NS_XHTML_IM "'><body xmlns='" NS_XHTML "'>%s</body></html>", xhtml);
 	}
 
 	g_free(xhtml);
@@ -1249,7 +1249,7 @@
 	}
 
 	if (chat->xhtml && !jabber_xhtml_plain_equal(xhtml, jm->body))
-		jm->xhtml = g_strdup_printf("<html xmlns='http://jabber.org/protocol/xhtml-im'><body xmlns='http://www.w3.org/1999/xhtml'>%s</body></html>", xhtml);
+		jm->xhtml = g_strdup_printf("<html xmlns='" NS_XHTML_IM "'><body xmlns='" NS_XHTML "'>%s</body></html>", xhtml);
 
 	g_free(xhtml);
 
--- a/libpurple/protocols/jabber/message.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/message.h	Sat Nov 28 02:22:49 2009 +0000
@@ -28,8 +28,6 @@
 #include "jabber.h"
 #include "xmlnode.h"
 
-#define XEP_0224_NAMESPACE "urn:xmpp:attention:0"
-
 typedef struct _JabberMessage {
 	JabberStream *js;
 	enum {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/jabber/namespaces.h	Sat Nov 28 02:22:49 2009 +0000
@@ -0,0 +1,91 @@
+/*
+ * 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
+ * (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 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
+ *
+ */
+
+#ifndef PURPLE_JABBER_NAMESPACES_H_
+#define PURPLE_JABBER_NAMESPACES_H_
+
+#define NS_XMPP_BIND "urn:ietf:params:xml:ns:xmpp-bind"
+#define NS_XMPP_CLIENT "jabber:client"
+#define NS_XMPP_SASL "urn:ietf:params:xml:ns:xmpp-sasl"
+#define NS_XMPP_SESSION "urn:ietf:params:xml:ns:xmpp-session"
+#define NS_XMPP_STANZAS "urn:ietf:params:xml:ns:xmpp-stanzas"
+#define NS_XMPP_STREAMS "http://etherx.jabber.org/streams"
+
+/* XEP-0012 Last Activity (and XEP-0256 Last Activity in Presence) */
+#define NS_LAST_ACTIVITY "jabber:iq:last"
+
+/* XEP-0030 Service Discovery */
+#define NS_DISCO_INFO "http://jabber.org/protocol/disco#info"
+#define NS_DISCO_ITEMS "http://jabber.org/protocol/disco#items"
+
+/* XEP-0047 IBB (In-band bytestreams) */
+#define NS_IBB "http://jabber.org/protocol/ibb"
+
+/* XEP-0065 SOCKS5 Bytestreams */
+#define NS_BYTESTREAMS "http://jabber.org/protocol/bytestreams"
+
+/* XEP-0066 Out of Band Data (OOB) */
+#define NS_OOB_IQ_DATA "jabber:iq:oob"
+#define NS_OOB_X_DATA  "jabber:x:oob"
+
+/* XEP-0071 XHTML-IM (rich-text messages) */
+#define NS_XHTML_IM "http://jabber.org/protocol/xhtml-im"
+#define NS_XHTML "http://www.w3.org/1999/xhtml"
+
+/* XEP-0084 v0.12 User Avatar */
+#define NS_AVATAR_0_12_DATA     "http://www.xmpp.org/extensions/xep-0084.html#ns-data"
+#define NS_AVATAR_0_12_METADATA "http://www.xmpp.org/extensions/xep-0084.html#ns-metadata"
+
+/* XEP-0084 v1.1 User Avatar */
+#define NS_AVATAR_1_1_DATA      "urn:xmpp:avatar:data"
+#define NS_AVATAR_1_1_METADATA  "urn:xmpp:avatar:metadata"
+
+/* XEP-0191 Simple Communications Blocking */
+#define NS_SIMPLE_BLOCKING "urn:xmpp:blocking"
+
+/* XEP-0199 Ping */
+#define NS_PING "urn:xmpp:ping"
+
+/* XEP-0202 Entity Time */
+#define NS_ENTITY_TIME "urn:xmpp:time"
+
+/* XEP-0224 Attention */
+#define NS_ATTENTION "urn:xmpp:attention:0"
+
+/* XEP-0231 BoB (Bits of Binary) */
+#define NS_BOB "urn:xmpp:bob"
+
+/* Google extensions */
+#define NS_GOOGLE_CAMERA "http://www.google.com/xmpp/protocol/camera/v1"
+#define NS_GOOGLE_VIDEO "http://www.google.com/xmpp/protocol/video/v1"
+#define NS_GOOGLE_VOICE "http://www.google.com/xmpp/protocol/voice/v1"
+#define NS_GOOGLE_JINGLE_INFO "google:jingleinfo"
+
+#define NS_GOOGLE_MAIL_NOTIFY "google:mail:notify"
+
+#define NS_GOOGLE_PROTOCOL_SESSION "http://www.google.com/xmpp/protocol/session"
+#define NS_GOOGLE_SESSION "http://www.google.com/session"
+#define NS_GOOGLE_SESSION_PHONE "http://www.google.com/session/phone"
+#define NS_GOOGLE_SESSION_VIDEO "http://www.google.com/session/video"
+
+#endif /* PURPLE_JABBER_NAMESPACES_H_ */
--- a/libpurple/protocols/jabber/oob.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/oob.c	Sat Nov 28 02:22:49 2009 +0000
@@ -170,11 +170,11 @@
 	if(!strcmp(code, "406")) {
 		z = xmlnode_new_child(y, "not-acceptable");
 		xmlnode_set_attrib(y, "type", "modify");
-		xmlnode_set_namespace(z, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(z, NS_XMPP_STANZAS);
 	} else if(!strcmp(code, "404")) {
 		z = xmlnode_new_child(y, "not-found");
 		xmlnode_set_attrib(y, "type", "cancel");
-		xmlnode_set_namespace(z, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(z, NS_XMPP_STANZAS);
 	}
 	jabber_iq_send(iq);
 
--- a/libpurple/protocols/jabber/ping.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/ping.c	Sat Nov 28 02:22:49 2009 +0000
@@ -74,7 +74,7 @@
 
 	iq = jabber_iq_new(js, JABBER_IQ_GET);
 	ping = xmlnode_new_child(iq->node, "ping");
-	xmlnode_set_namespace(ping, "urn:xmpp:ping");
+	xmlnode_set_namespace(ping, NS_PING);
 
 	jabber_iq_set_callback(iq, jabber_keepalive_pong_cb, NULL);
 	jabber_iq_send(iq);
@@ -90,7 +90,7 @@
 		xmlnode_set_attrib(iq->node, "to", jid);
 
 	ping = xmlnode_new_child(iq->node, "ping");
-	xmlnode_set_namespace(ping, "urn:xmpp:ping");
+	xmlnode_set_namespace(ping, NS_PING);
 
 	jabber_iq_set_callback(iq, jabber_ping_result_cb, NULL);
 	jabber_iq_send(iq);
--- a/libpurple/protocols/jabber/presence.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/presence.c	Sat Nov 28 02:22:49 2009 +0000
@@ -297,7 +297,7 @@
 		gchar seconds[10];
 		g_snprintf(seconds, 10, "%d", (int) (time(NULL) - js->idle));
 
-		xmlnode_set_namespace(query, "jabber:iq:last");
+		xmlnode_set_namespace(query, NS_LAST_ACTIVITY);
 		xmlnode_set_attrib(query, "seconds", seconds);
 	}
 
@@ -466,8 +466,8 @@
 		goto out;
 
 	if (!jbr->commands_fetched && jabber_resource_has_capability(jbr, "http://jabber.org/protocol/commands")) {
-		JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items");
-		xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query", "http://jabber.org/protocol/disco#items");
+		JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, NS_DISCO_ITEMS);
+		xmlnode *query = xmlnode_get_child_with_namespace(iq->node, "query", NS_DISCO_ITEMS);
 		xmlnode_set_attrib(iq->node, "to", userdata->from);
 		xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands");
 		jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL);
@@ -659,7 +659,7 @@
 				}
 			}
 		} else if (!strcmp(y->name, "query") &&
-			!strcmp(xmlnode_get_namespace(y), "jabber:iq:last")) {
+			!strcmp(xmlnode_get_namespace(y), NS_LAST_ACTIVITY)) {
 			/* resource has specified idle */
 			const gchar *seconds = xmlnode_get_attrib(y, "seconds");
 			if (seconds) {
--- a/libpurple/protocols/jabber/si.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/si.c	Sat Nov 28 02:22:49 2009 +0000
@@ -144,7 +144,7 @@
 	if(xfer->type == PURPLE_XFER_SEND)
 	{
 		xmlnode *activate;
-		iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, "http://jabber.org/protocol/bytestreams");
+		iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, NS_BYTESTREAMS);
 		xmlnode_set_attrib(iq->node, "to", streamhost->jid);
 		query = xmlnode_get_child(iq->node, "query");
 		xmlnode_set_attrib(query, "sid", jsx->stream_id);
@@ -155,7 +155,7 @@
 	}
 	else
 	{
-		iq = jabber_iq_new_query(jsx->js, JABBER_IQ_RESULT, "http://jabber.org/protocol/bytestreams");
+		iq = jabber_iq_new_query(jsx->js, JABBER_IQ_RESULT, NS_BYTESTREAMS);
 		xmlnode_set_attrib(iq->node, "to", xfer->who);
 		jabber_iq_set_id(iq, jsx->iq_id);
 		query = xmlnode_get_child(iq->node, "query");
@@ -232,7 +232,7 @@
 		xmlnode_set_attrib(error, "code", "404");
 		xmlnode_set_attrib(error, "type", "cancel");
 		inf = xmlnode_new_child(error, "item-not-found");
-		xmlnode_set_namespace(inf, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(inf, NS_XMPP_STANZAS);
 
 		jabber_iq_send(iq);
 
@@ -843,8 +843,7 @@
 
 	purple_xfer_unref(xfer);
 
-	iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET,
-			"http://jabber.org/protocol/bytestreams");
+	iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, NS_BYTESTREAMS);
 	xmlnode_set_attrib(iq->node, "to", xfer->who);
 	query = xmlnode_get_child(iq->node, "query");
 
@@ -1214,11 +1213,11 @@
 		if(var && !strcmp(var, "stream-method")) {
 			if((value = xmlnode_get_child(field, "value"))) {
 				char *val = xmlnode_get_data(value);
-				if(val && !strcmp(val, "http://jabber.org/protocol/bytestreams")) {
+				if(val && !strcmp(val, NS_BYTESTREAMS)) {
 					jabber_si_xfer_bytestreams_send_init(xfer);
 					jsx->stream_method |= STREAM_METHOD_BYTESTREAMS;
 					found_method = TRUE;
-				} else if (val && !strcmp(val, XEP_0047_NAMESPACE)) {
+				} else if (val && !strcmp(val, NS_IBB)) {
 					jsx->stream_method |= STREAM_METHOD_IBB;
 					if (!found_method) {
 						/* we haven't tried to init a bytestream session, yet
@@ -1276,10 +1275,10 @@
 		behind troublesome firewalls */
 	option = xmlnode_new_child(field, "option");
 	value = xmlnode_new_child(option, "value");
-	xmlnode_insert_data(value, "http://jabber.org/protocol/bytestreams", -1);
+	xmlnode_insert_data(value, NS_BYTESTREAMS, -1);
 	option = xmlnode_new_child(field, "option");
 	value = xmlnode_new_child(option, "value");
-	xmlnode_insert_data(value, "http://jabber.org/protocol/ibb", -1);
+	xmlnode_insert_data(value, NS_IBB, -1);
 
 	jabber_iq_set_callback(iq, jabber_si_xfer_send_method_cb, xfer);
 
@@ -1380,9 +1379,9 @@
 		error = xmlnode_new_child(iq->node, "error");
 		xmlnode_set_attrib(error, "type", "cancel");
 		child = xmlnode_new_child(error, "forbidden");
-		xmlnode_set_namespace(child, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(child, NS_XMPP_STANZAS);
 		child = xmlnode_new_child(error, "text");
-		xmlnode_set_namespace(child, "urn:ietf:params:xml:ns:xmpp-stanzas");
+		xmlnode_set_namespace(child, NS_XMPP_STANZAS);
 		xmlnode_insert_data(child, "Offer Declined", -1);
 
 		jabber_iq_send(iq);
@@ -1460,7 +1459,7 @@
 	if (jbr) {
 		char *msg;
 
-		if (jabber_resource_has_capability(jbr, XEP_0047_NAMESPACE))
+		if (jabber_resource_has_capability(jbr, NS_IBB))
 			jsx->stream_method |= STREAM_METHOD_IBB;
 		if (jabber_resource_has_capability(jbr, "http://jabber.org/protocol/si/profile/file-transfer")) {
 			jabber_si_xfer_send_request(xfer);
@@ -1588,10 +1587,10 @@
 			for people who know their firewalls are very restrictive */
 		if (jsx->stream_method & STREAM_METHOD_BYTESTREAMS) {
 			value = xmlnode_new_child(field, "value");
-			xmlnode_insert_data(value, "http://jabber.org/protocol/bytestreams", -1);
+			xmlnode_insert_data(value, NS_BYTESTREAMS, -1);
 		} else if(jsx->stream_method & STREAM_METHOD_IBB) {
 			value = xmlnode_new_child(field, "value");
-			xmlnode_insert_data(value, "http://jabber.org/protocol/ibb", -1);
+			xmlnode_insert_data(value, NS_IBB, -1);
 		}
 
 		jabber_iq_send(iq);
@@ -1695,9 +1694,9 @@
 				if((value = xmlnode_get_child(option, "value"))) {
 					char *val;
 					if((val = xmlnode_get_data(value))) {
-						if(!strcmp(val, "http://jabber.org/protocol/bytestreams")) {
+						if(!strcmp(val, NS_BYTESTREAMS)) {
 							jsx->stream_method |= STREAM_METHOD_BYTESTREAMS;
-						} else if(!strcmp(val, "http://jabber.org/protocol/ibb")) {
+						} else if(!strcmp(val, NS_IBB)) {
 							jsx->stream_method |= STREAM_METHOD_IBB;
 						}
 						g_free(val);
--- a/libpurple/protocols/jabber/useravatar.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/jabber/useravatar.h	Sat Nov 28 02:22:49 2009 +0000
@@ -29,12 +29,6 @@
 
 /* Implementation of XEP-0084 */
 
-#define NS_AVATAR_0_12_DATA     "http://www.xmpp.org/extensions/xep-0084.html#ns-data"
-#define NS_AVATAR_0_12_METADATA "http://www.xmpp.org/extensions/xep-0084.html#ns-metadata"
-
-#define NS_AVATAR_1_1_DATA      "urn:xmpp:avatar:data"
-#define NS_AVATAR_1_1_METADATA  "urn:xmpp:avatar:metadata"
-
 void jabber_avatar_init(void);
 void jabber_avatar_set(JabberStream *js, PurpleStoredImage *img);
 
--- a/libpurple/protocols/msn/msn.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/msn/msn.c	Sat Nov 28 02:22:49 2009 +0000
@@ -23,8 +23,6 @@
  */
 #define PHOTO_SUPPORT 1
 
-#include <glib.h>
-
 #include "msn.h"
 #include "accountopt.h"
 #include "contact.h"
--- a/libpurple/protocols/msn/object.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/msn/object.c	Sat Nov 28 02:22:49 2009 +0000
@@ -21,6 +21,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
+
+#include "msn.h"
 #include "object.h"
 #include "debug.h"
 /* Sha1 stuff */
--- a/libpurple/protocols/mxit/chunk.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/mxit/chunk.c	Sat Nov 28 02:22:49 2009 +0000
@@ -576,18 +576,17 @@
 
 	/* parse the resource chunks */
 	while ( chunklen > 0 ) {
-		struct raw_chunk* chunkhdr = ( struct raw_chunk * ) &chunkdata[pos];
-		chunkhdr->length = ntohl( chunkhdr->length );		/* host byte-order */
+		gchar* chunk = &chunkdata[pos];
 
 		/* start of chunk data */
-		pos += sizeof( struct raw_chunk );
+		pos += MXIT_CHUNK_HEADER_SIZE;
 
-		switch ( chunkhdr->type ) {
+		switch ( chunk_type( chunk ) ) {
 			case CP_CHUNK_SPLASH :			/* splash image */
 				{
 					struct splash_chunk* splash = g_new0( struct splash_chunk, 1 );
 
-					mxit_chunk_parse_splash( &chunkdata[pos], chunkhdr->length, splash );
+					mxit_chunk_parse_splash( &chunkdata[pos], chunk_length( chunk ), splash );
 
 					cr->resources = g_list_append( cr->resources, splash );
 					break;
@@ -600,12 +599,12 @@
 					break;
 				}
 			default:
-				purple_debug_info( MXIT_PLUGIN_ID, "Unsupported custom resource chunk received (%i)\n", chunkhdr->type );
+				purple_debug_info( MXIT_PLUGIN_ID, "Unsupported custom resource chunk received (%i)\n", chunk_type( chunk) );
 		}
 
 		/* skip over data to next resource chunk */
-		pos += chunkhdr->length;
-		chunklen -= ( sizeof( struct raw_chunk ) + chunkhdr->length );
+		pos += chunk_length( chunk );
+		chunklen -= ( MXIT_CHUNK_HEADER_SIZE + chunk_length( chunk ) );
 	}
 }
 
--- a/libpurple/protocols/mxit/chunk.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/mxit/chunk.h	Sat Nov 28 02:22:49 2009 +0000
@@ -31,6 +31,8 @@
 
 
 #define		MXIT_CHUNK_FILEID_LEN		8			/* bytes */
+#define		MXIT_CHUNK_HEADER_SIZE		5			/* type (1 byte) + length (4 bytes) */
+
 
 /* Multimedia chunk types */
 #define		CP_CHUNK_NONE				0x00		/* (0) no chunk */
@@ -68,13 +70,35 @@
 #define		REJECT_BAD_RECIPIENT		4
 
 /*
- * a Chunk header
+ * Chunk header manipulation functions
  */
-struct raw_chunk {
-	guint8		type;
-	guint32		length;
-	gchar		data[0];
-} __attribute__ ((packed));
+static inline guint chunk_type( gchar* chunkheader )
+{
+	return *chunkheader;
+}
+
+static inline void set_chunk_type( gchar* chunkheader, guint type )
+{
+	*chunkheader = type;
+}
+
+static inline guint32 chunk_length( gchar* chunkheader )
+{
+	guint32 length = *( (const guint32*) &chunkheader[1] );
+	return htonl( length );
+}
+
+static inline void set_chunk_length( gchar* chunkheader, guint32 size )
+{
+	size = htonl( size );
+	memcpy( &chunkheader[1], &size, sizeof( guint32 ) );
+}
+
+static inline gchar* chunk_data( gchar* chunkheader )
+{
+	return &chunkheader[MXIT_CHUNK_HEADER_SIZE];
+}
+
 
 struct offerfile_chunk {
 	char	fileid[MXIT_CHUNK_FILEID_LEN];
--- a/libpurple/protocols/mxit/formcmds.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/mxit/formcmds.c	Sat Nov 28 02:22:49 2009 +0000
@@ -239,12 +239,10 @@
 	replymsg = g_hash_table_lookup(hash, "replymsg");		/* find the reply message */
 	if ((selmsg) && (replymsg)) {
 		gchar*	seltext = g_markup_escape_text(purple_url_decode(selmsg), -1);
-		gchar*	replytext = g_markup_escape_text(purple_url_decode(replymsg), -1);
 
-		mxit_add_html_link( mx, replytext, seltext );
+		mxit_add_html_link( mx, purple_url_decode(replymsg), seltext );
 
 		g_free(seltext);
-		g_free(replytext);
 	}
 }
 
@@ -345,7 +343,6 @@
  *  @param message			The message text
  *  @return					The length of the command
  */
-//void mxit_command_received(struct MXitSession* session, const char* from, char* message, time_t timestamp)
 int mxit_parse_command(struct RXMsgData* mx, char* message)
 {
 	GHashTable* hash	= NULL;
--- a/libpurple/protocols/mxit/markup.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/mxit/markup.c	Sat Nov 28 02:22:49 2009 +0000
@@ -416,7 +416,6 @@
 	}
 	else if ( mx->chatid < 0 ) {
 		/* normal chat message */
-		//serv_got_im( mx->session->con, mx->from, mx->msg->str, mx->flags, mx->timestamp );
 		mxit_show_split_message( mx );
 	}
 	else {
--- a/libpurple/protocols/mxit/mxit.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/mxit/mxit.c	Sat Nov 28 02:22:49 2009 +0000
@@ -689,9 +689,6 @@
 
 	option = purple_account_option_bool_new( _( "Enable splash-screen popup" ), MXIT_CONFIG_SPLASHPOPUP, FALSE );
 	proto_info.protocol_options = g_list_append( proto_info.protocol_options, option );
-
-	if ( sizeof( struct raw_chunk ) != 5 )
-		g_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "sizeof(struct raw_chunk) != 5!  MXit probably won't work!\n");
 }
 
 PURPLE_INIT_PLUGIN( mxit, init_plugin, plugin_info );
--- a/libpurple/protocols/mxit/mxit.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/mxit/mxit.h	Sat Nov 28 02:22:49 2009 +0000
@@ -61,7 +61,7 @@
 /* Plugin details */
 #define		MXIT_PLUGIN_ID				"prpl-loubserp-mxit"
 #define		MXIT_PLUGIN_NAME			"MXit"
-#define		MXIT_PLUGIN_VERSION			"2.2.0"
+#define		MXIT_PLUGIN_VERSION			"2.3.0"
 #define		MXIT_PLUGIN_EMAIL			"Pieter Loubser <libpurple@mxit.com>"
 #define		MXIT_PLUGIN_WWW				"http://www.mxit.com"
 #define		MXIT_PLUGIN_SUMMARY			"MXit Protocol Plugin"
--- a/libpurple/protocols/mxit/protocol.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/mxit/protocol.c	Sat Nov 28 02:22:49 2009 +0000
@@ -1035,7 +1035,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "SENDING FILE '%s' of %i bytes to user '%s'\n", filename, buflen, username );
@@ -1044,17 +1044,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_senddirect( chunk->data, username, filename, buf, buflen );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_senddirect( chunk_data( chunk ), username, filename, buf, buflen );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating senddirect chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_DIRECT_SND;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_DIRECT_SND );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1071,7 +1071,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_file_reject\n" );
@@ -1080,17 +1080,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_reject( chunk->data, fileid );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_reject( chunk_data( chunk ), fileid );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating reject chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_REJECT;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_REJECT );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1109,7 +1109,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_file_accept\n" );
@@ -1118,17 +1118,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_get( chunk->data, fileid, filesize, offset );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_get( chunk_data(chunk), fileid, filesize, offset );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating getfile chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_GET;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_GET );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1145,7 +1145,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_file_received\n" );
@@ -1154,17 +1154,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_received( chunk->data, fileid, status );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_received( chunk_data(chunk), fileid, status );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating received chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_RECIEVED;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_RECIEVED );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1182,7 +1182,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_set_avatar: %i bytes\n", avatarlen );
@@ -1191,17 +1191,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_set_avatar( chunk->data, avatar, avatarlen );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_set_avatar( chunk_data(chunk), avatar, avatarlen );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating set avatar chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_SET_AVATAR;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_SET_AVATAR );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
@@ -1221,7 +1221,7 @@
 {
 	char				data[CP_MAX_PACKET];
 	int					datalen		= 0;
-	struct raw_chunk*	chunk;
+	gchar*				chunk;
 	int					size;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_get_avatar: %s\n", mxitId );
@@ -1230,17 +1230,17 @@
 	datalen = sprintf( data, "ms=" );
 
 	/* map chunk header over data buffer */
-	chunk = (struct raw_chunk *) &data[datalen];
-
-	size = mxit_chunk_create_get_avatar( chunk->data, mxitId, avatarId, MXIT_AVATAR_SIZE );
+	chunk = &data[datalen];
+
+	size = mxit_chunk_create_get_avatar( chunk_data(chunk), mxitId, avatarId, MXIT_AVATAR_SIZE );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating get avatar chunk (%i)\n", size );
 		return;
 	}
 
-	chunk->type = CP_CHUNK_GET_AVATAR;
-	chunk->length = htonl( size );
-	datalen += sizeof( struct raw_chunk ) + size;
+	set_chunk_type( chunk, CP_CHUNK_GET_AVATAR );
+	set_chunk_length( chunk, size );
+	datalen += MXIT_CHUNK_HEADER_SIZE + size;
 
 	/* send the byte stream to the mxit server */
 	mxit_queue_packet( session, data, datalen, CP_CMD_MEDIA );
--- a/libpurple/protocols/mxit/roster.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/mxit/roster.c	Sat Nov 28 02:22:49 2009 +0000
@@ -53,11 +53,11 @@
 	const char*				name;
 } const mxit_statuses[] = {
 		/*	primative,						no,							id,			name					*/
-		{	PURPLE_STATUS_OFFLINE,			MXIT_PRESENCE_OFFLINE,		"offline",	NULL				},	/* 0 */
-		{	PURPLE_STATUS_AVAILABLE,		MXIT_PRESENCE_ONLINE,		"online",	NULL				},	/* 1 */
-		{	PURPLE_STATUS_AWAY,				MXIT_PRESENCE_AWAY,			"away",		NULL				},	/* 2 */
-		{	PURPLE_STATUS_AVAILABLE,		MXIT_PRESENCE_AVAILABLE,	"chat",		N_( "Chatty" )		},	/* 3 */
-		{	PURPLE_STATUS_UNAVAILABLE,		MXIT_PRESENCE_DND,			"dnd",		NULL				}	/* 4 */
+		{	PURPLE_STATUS_OFFLINE,			MXIT_PRESENCE_OFFLINE,		"offline",	N_( "Offline" )			},	/* 0 */
+		{	PURPLE_STATUS_AVAILABLE,		MXIT_PRESENCE_ONLINE,		"online",	N_( "Available" )		},	/* 1 */
+		{	PURPLE_STATUS_AWAY,				MXIT_PRESENCE_AWAY,			"away",		N_( "Away" )			},	/* 2 */
+		{	PURPLE_STATUS_AVAILABLE,		MXIT_PRESENCE_AVAILABLE,	"chat",		N_( "Chatty" )			},	/* 3 */
+		{	PURPLE_STATUS_UNAVAILABLE,		MXIT_PRESENCE_DND,			"dnd",		N_( "Do Not Disturb" )	}	/* 4 */
 };
 
 
@@ -398,7 +398,7 @@
 		contact->statusMsg = NULL;
 	}
 	if ( statusMsg[0] != '\0' )
-		contact->statusMsg = g_strdup( statusMsg );	
+		contact->statusMsg = g_markup_escape_text( statusMsg, -1 );
 
 	/* update avatarId */
 	if ( ( contact->avatarId ) && ( g_ascii_strcasecmp( contact->avatarId, avatarId ) == 0 ) ) {
--- a/libpurple/protocols/mxit/splashscreen.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/mxit/splashscreen.c	Sat Nov 28 02:22:49 2009 +0000
@@ -43,10 +43,10 @@
 {
 	const char* splashId = purple_account_get_string(session->acc, MXIT_CONFIG_SPLASHID, NULL);
 
-	purple_debug_info(MXIT_PLUGIN_ID, "Current splashId: '%s'\n", splashId);
-
-	if ((splashId != NULL) && (*splashId != '\0'))
+	if ((splashId != NULL) && (*splashId != '\0')) {
+		purple_debug_info(MXIT_PLUGIN_ID, "Current splashId: '%s'\n", splashId);
 		return splashId;
+	}
 	else
 		return NULL;
 }
@@ -149,7 +149,7 @@
 
 	/* Get current splash ID */
 	splashId = splash_current(session);
-	if (!splashId)
+	if (splashId == NULL)		/* no splash-screen */
 		return;
 
 	/* if is clickable, then send click event */
--- a/libpurple/protocols/myspace/myspace.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/myspace/myspace.h	Sat Nov 28 02:22:49 2009 +0000
@@ -20,6 +20,8 @@
 #ifndef _MYSPACE_MYSPACE_H
 #define _MYSPACE_MYSPACE_H
 
+#include "internal.h"
+
 /* Other includes */
 #include <string.h>
 #include <errno.h>/* for EAGAIN */
@@ -36,8 +38,6 @@
 #include <sys/socket.h>
 #endif
 
-#include "internal.h"
-
 #include "notify.h"
 #include "plugin.h"
 #include "accountopt.h"
--- a/libpurple/protocols/novell/nmuser.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/novell/nmuser.c	Sat Nov 28 02:22:49 2009 +0000
@@ -18,9 +18,8 @@
  *
  */
 
-#include <glib.h>
+#include "internal.h"
 #include <string.h>
-#include "internal.h"
 #include "nmfield.h"
 #include "nmuser.h"
 #include "nmconn.h"
--- a/libpurple/protocols/oscar/oscar.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/oscar/oscar.h	Sat Nov 28 02:22:49 2009 +0000
@@ -29,10 +29,10 @@
 #ifndef _OSCAR_H_
 #define _OSCAR_H_
 
+#include "internal.h"
 #include "circbuffer.h"
 #include "debug.h"
 #include "eventloop.h"
-#include "internal.h"
 #include "proxy.h"
 #include "sslconn.h"
 
--- a/libpurple/protocols/qq/buddy_list.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/qq/buddy_list.c	Sat Nov 28 02:22:49 2009 +0000
@@ -22,8 +22,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <string.h>
-
 #include "qq.h"
 
 #include "debug.h"
--- a/libpurple/protocols/qq/buddy_opt.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/qq/buddy_opt.c	Sat Nov 28 02:22:49 2009 +0000
@@ -22,8 +22,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 #include "notify.h"
 #include "request.h"
 #include "privacy.h"
--- a/libpurple/protocols/qq/char_conv.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/qq/char_conv.c	Sat Nov 28 02:22:49 2009 +0000
@@ -22,8 +22,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 
 #include "char_conv.h"
 #include "packet_parse.h"
--- a/libpurple/protocols/qq/qq.h	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/qq/qq.h	Sat Nov 28 02:22:49 2009 +0000
@@ -25,7 +25,6 @@
 #ifndef _QQ_QQ_H_
 #define _QQ_QQ_H_
 
-#include <glib.h>
 #include "internal.h"
 #include "ft.h"
 #include "circbuffer.h"
--- a/libpurple/protocols/qq/qq_base.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/qq/qq_base.c	Sat Nov 28 02:22:49 2009 +0000
@@ -22,8 +22,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 #include "server.h"
 #include "cipher.h"
 #include "request.h"
--- a/libpurple/protocols/qq/qq_network.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/qq/qq_network.c	Sat Nov 28 02:22:49 2009 +0000
@@ -22,9 +22,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "cipher.h"
 #include "debug.h"
-#include "internal.h"
 
 #include "buddy_info.h"
 #include "group_info.h"
--- a/libpurple/protocols/qq/qq_process.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/qq/qq_process.c	Sat Nov 28 02:22:49 2009 +0000
@@ -22,9 +22,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
 #include "cipher.h"
 #include "debug.h"
-#include "internal.h"
 
 #include "buddy_info.h"
 #include "buddy_list.h"
--- a/libpurple/protocols/qq/utils.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/qq/utils.c	Sat Nov 28 02:22:49 2009 +0000
@@ -22,6 +22,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
+#include "internal.h"
+
 #include "limits.h"
 #include "stdlib.h"
 #include "string.h"
--- a/libpurple/protocols/sametime/sametime.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/sametime/sametime.c	Sat Nov 28 02:22:49 2009 +0000
@@ -21,6 +21,7 @@
   USA.
 */
 
+#include "internal.h"
 
 /* system includes */
 #include <stdlib.h>
@@ -30,9 +31,6 @@
 #include <glib.h>
 
 /* purple includes */
-#include "internal.h"
-#include "config.h"
-
 #include "account.h"
 #include "accountopt.h"
 #include "circbuffer.h"
--- a/libpurple/protocols/silc/buddy.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/silc/buddy.c	Sat Nov 28 02:22:49 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/chat.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/silc/chat.c	Sat Nov 28 02:22:49 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/ft.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/silc/ft.c	Sat Nov 28 02:22:49 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/ops.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/silc/ops.c	Sat Nov 28 02:22:49 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/pk.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/silc/pk.c	Sat Nov 28 02:22:49 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/silc.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/silc/silc.c	Sat Nov 28 02:22:49 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/util.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/silc/util.c	Sat Nov 28 02:22:49 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/silc/wb.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/silc/wb.c	Sat Nov 28 02:22:49 2009 +0000
@@ -17,6 +17,7 @@
 
 */
 
+#include "internal.h"
 #include "silc.h"
 #include "silcclient.h"
 #include "silcpurple.h"
--- a/libpurple/protocols/yahoo/util.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/protocols/yahoo/util.c	Sat Nov 28 02:22:49 2009 +0000
@@ -656,7 +656,10 @@
 	/* Strip off the outter HTML node */
 	/* This probably isn't necessary, especially if we made the outter HTML
 	 * node an empty span.  But the HTML is simpler this way. */
-	xmlstr2 = g_strndup(xmlstr1 + 6, strlen(xmlstr1) - 13);
+	if (!purple_strequal(xmlstr1, "<html/>"))
+		xmlstr2 = g_strndup(xmlstr1 + 6, strlen(xmlstr1) - 13);
+	else
+		xmlstr2 = g_strdup("");
 	g_free(xmlstr1);
 
 	esc = g_strescape(x, NULL);
--- a/libpurple/roomlist.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/roomlist.c	Sat Nov 28 02:22:49 2009 +0000
@@ -24,8 +24,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-
 #include "internal.h"
 
 #include "account.h"
--- a/libpurple/tests/test_yahoo_util.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/tests/test_yahoo_util.c	Sat Nov 28 02:22:49 2009 +0000
@@ -15,6 +15,10 @@
 
 START_TEST(test_codes_to_html)
 {
+	assert_string_equal_free("",
+			yahoo_codes_to_html(""));
+	assert_string_equal_free("",
+			yahoo_codes_to_html("\x1B[12345m"));
 	assert_string_equal_free("plain",
 			yahoo_codes_to_html("plain"));
 	assert_string_equal_free("unknown  ansi code",
--- a/libpurple/theme-manager.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/theme-manager.c	Sat Nov 28 02:22:49 2009 +0000
@@ -20,9 +20,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-#include <string.h>
-
 #include "internal.h"
 #include "theme-manager.h"
 #include "util.h"
--- a/libpurple/theme.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/theme.c	Sat Nov 28 02:22:49 2009 +0000
@@ -20,9 +20,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <glib.h>
-#include <string.h>
-
 #include "internal.h"
 #include "theme.h"
 #include "util.h"
--- a/libpurple/whiteboard.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/whiteboard.c	Sat Nov 28 02:22:49 2009 +0000
@@ -21,8 +21,6 @@
  *
  */
 
-#include <string.h>
-
 #include "internal.h"
 #include "whiteboard.h"
 #include "prpl.h"
--- a/libpurple/xmlnode.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/libpurple/xmlnode.c	Sat Nov 28 02:22:49 2009 +0000
@@ -29,8 +29,8 @@
  * as I want to be.  Thank you libxode for giving me a good starting point */
 #define _PURPLE_XMLNODE_C_
 
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 
 #include <libxml/parser.h>
 #include <string.h>
--- a/pidgin/gtkcertmgr.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/pidgin/gtkcertmgr.c	Sat Nov 28 02:22:49 2009 +0000
@@ -25,10 +25,8 @@
  *
  */
 
-#include <glib.h>
-
+#include "internal.h"
 #include "core.h"
-#include "internal.h"
 #include "pidgin.h"
 #include "pidginstock.h"
 
--- a/pidgin/gtkmedia.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/pidgin/gtkmedia.c	Sat Nov 28 02:22:49 2009 +0000
@@ -23,9 +23,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include <string.h>
+#include "internal.h"
 #include "debug.h"
-#include "internal.h"
 #include "connection.h"
 #include "media.h"
 #include "mediamanager.h"
--- a/pidgin/gtkwhiteboard.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/pidgin/gtkwhiteboard.c	Sat Nov 28 02:22:49 2009 +0000
@@ -21,8 +21,6 @@
  *
  */
 
-#include <stdlib.h>
-
 #include "internal.h"
 #include "blist.h"
 #include "debug.h"
--- a/pidgin/plugins/gtk-signals-test.c	Mon Nov 23 23:53:19 2009 +0000
+++ b/pidgin/plugins/gtk-signals-test.c	Sat Nov 28 02:22:49 2009 +0000
@@ -20,9 +20,10 @@
  */
 #define GTK_SIGNAL_TEST_PLUGIN_ID "gtk-signals-test"
 
+#include "internal.h"
+
 #include <gtk/gtk.h>
 
-#include "internal.h"
 #include "debug.h"
 #include "version.h"
 
--- a/po/de.po	Mon Nov 23 23:53:19 2009 +0000
+++ b/po/de.po	Sat Nov 28 02:22:49 2009 +0000
@@ -11,9 +11,9 @@
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-23 19:22+0100\n"
-"PO-Revision-Date: 2009-11-23 19:21+0100\n"
-"Last-Translator: Jochen Kemnade <jochenkemnade@web.de>\n"
+"POT-Creation-Date: 2009-11-26 22:45+0100\n"
+"PO-Revision-Date: 2009-11-26 22:44+0100\n"
+"Last-Translator: Björn Voigt <bjoern@cs.tu-berlin.de>\n"
 "Language-Team: Deutsch <de@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -12083,6 +12083,9 @@
 msgid "Mongolian"
 msgstr "Mongolisch"
 
+msgid "Malay"
+msgstr "Malaiisch"
+
 msgid "Bokmål Norwegian"
 msgstr "Bokmål Norwegisch"
 
@@ -12152,6 +12155,9 @@
 msgid "Turkish"
 msgstr "Türkisch"
 
+msgid "Ukranian"
+msgstr "Ukrainisch"
+
 msgid "Urdu"
 msgstr "Urdu"
 
--- a/po/hu.po	Mon Nov 23 23:53:19 2009 +0000
+++ b/po/hu.po	Sat Nov 28 02:22:49 2009 +0000
@@ -10,8 +10,8 @@
 msgstr ""
 "Project-Id-Version: pidgin 2.5\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 20:34-0500\n"
-"PO-Revision-Date: 2009-08-29 00:59+0200\n"
+"POT-Creation-Date: 2009-11-26 13:07+0100\n"
+"PO-Revision-Date: 2009-11-26 13:06+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
 "Language-Team: Hungarian <gnome at fsf dot hu>\n"
 "MIME-Version: 1.0\n"
@@ -633,9 +633,8 @@
 msgid "Enable Sounds"
 msgstr "Hangok engedélyezése"
 
-#, fuzzy
 msgid "You are not connected."
-msgstr "Lezárta a kapcsolatot."
+msgstr "Nincs csatlakozva."
 
 msgid "<AUTO-REPLY> "
 msgstr "<AUTOMATIKUS VÁLASZ> "
@@ -646,9 +645,8 @@
 msgstr[0] "%d felhasználó listája:\n"
 msgstr[1] "%d felhasználó listája:\n"
 
-#, fuzzy
 msgid "Supported debug options are: plugins version"
-msgstr "A támogatott hibakeresési parancsok:  version"
+msgstr "A támogatott hibakeresési parancsok: plugins version"
 
 msgid "No such command (in this context)."
 msgstr "Nincs ilyen parancs (ebben a kontextusban)."
@@ -800,7 +798,7 @@
 
 #, c-format
 msgid "%.2f KiB/s"
-msgstr "%.2f KiB/mp"
+msgstr "%.2f KiB/s"
 
 msgid "Sent"
 msgstr "Elküldött"
@@ -1530,10 +1528,10 @@
 
 #, c-format
 msgid "TinyURL for above: %s"
-msgstr ""
+msgstr "TinyURL a fentihez: %s"
 
 msgid "Please wait while TinyURL fetches a shorter URL ..."
-msgstr ""
+msgstr "Kis türelmet, a TinyURL rövidebb URL címet készít…"
 
 msgid "Only create TinyURL for URLs of this length or greater"
 msgstr "TinyURL készítése csak a legalább ilyen hosszú URL-címekhez"
@@ -1663,6 +1661,8 @@
 "The certificate is not trusted because no certificate that can verify it is "
 "currently trusted."
 msgstr ""
+"A tanúsítvány nem megbízható, mivel az ellenőrzésére képes egyik tanúsítvány "
+"sem megbízható."
 
 msgid "The certificate is not valid yet."
 msgstr "A tanúsítvány még nem érvényes."
@@ -1894,9 +1894,9 @@
 msgid "Resolver process exited without answering our request"
 msgstr "A feloldó folyamat a kérés megválaszolása nélkül lépett ki"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error converting %s to punycode: %d"
-msgstr "Hiba %s feloldásakor: %d"
+msgstr "Hiba %s átalakításakor punycode-ra: %d"
 
 #, c-format
 msgid "Thread creation failure: %s"
@@ -2215,17 +2215,14 @@
 msgid "A non-recoverable Farsight2 error has occurred."
 msgstr "Helyrehozhatatlan Farsight2 hiba történt."
 
-#, fuzzy
 msgid "Conference error"
 msgstr "Konferenciahiba"
 
-#, fuzzy
 msgid "Error with your microphone"
-msgstr "Hiba történt a mikrofonnal."
-
-#, fuzzy
+msgstr "Hiba történt a mikrofonnal"
+
 msgid "Error with your webcam"
-msgstr "Hiba történt a webkamerával."
+msgstr "Hiba történt a webkamerával"
 
 #, c-format
 msgid "Error creating session: %s"
@@ -3993,6 +3990,10 @@
 msgid "Log Out"
 msgstr "Kijelentkezés"
 
+#. primative,						no,							id,			name
+#. 0
+#. 1
+#. 2
 msgid "Chatty"
 msgstr "Beszédes"
 
@@ -4261,6 +4262,7 @@
 msgid "None (To pending)"
 msgstr "Senki (Címzett függőben)"
 
+#. 0
 msgid "None"
 msgstr "Nincs"
 
@@ -4571,9 +4573,8 @@
 msgid "configure:  Configure a chat room."
 msgstr "configure:  Csevegőszoba beállítása."
 
-#, fuzzy
 msgid "part [message]:  Leave the room."
-msgstr "part [szoba]:  A szoba elhagyása."
+msgstr "part [üzenet]:  A szoba elhagyása."
 
 msgid "register:  Register with a chat room."
 msgstr "register:  Regisztráció csevegőszobánál."
@@ -5242,7 +5243,7 @@
 "Az MSN használatához SSL támogatás szükséges. Telepítsen egy támogatott SSL "
 "könyvtárat."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be valid email addresses."
@@ -5472,9 +5473,8 @@
 msgid "Unknown error (%d)"
 msgstr "Ismeretlen hiba (%d)"
 
-#, fuzzy
 msgid "Unable to remove user"
-msgstr "Nem vehető fel a felhasználó"
+msgstr "Nem törölhető a felhasználó"
 
 msgid "Mobile message was not sent because it was too long."
 msgstr "A mobilüzenet nem küldhető el, mert túl hosszú."
@@ -5712,28 +5712,82 @@
 msgid "%s has removed you from his or her buddy list."
 msgstr "%s eltávolította Önt a partnerlistájáról."
 
+#. 1
+msgid "Angry"
+msgstr "Dühös"
+
+#. 2
+msgid "Excited"
+msgstr "Érdeklődő"
+
+#. 3
+msgid "Grumpy"
+msgstr "Rosszkedvű"
+
+#. 4
+msgid "Happy"
+msgstr "Boldog"
+
+#. 5
+msgid "In Love"
+msgstr "Szerelmes"
+
+#. 6
+msgid "Invincible"
+msgstr "Legyőzhetetlen"
+
+#. 7
+msgid "Sad"
+msgstr "Szomorú"
+
+#. 8
+msgid "Hot"
+msgstr "Forró"
+
+#. 9
+msgid "Sick"
+msgstr "Beteg"
+
+#. 10
+msgid "Sleepy"
+msgstr "Álmos"
+
 #. show current mood
-#, fuzzy
 msgid "Current Mood"
-msgstr "Az Ön jelenlegi hangulata"
+msgstr "Jelenlegi hangulat"
 
 #. add all moods to list
-#, fuzzy
 msgid "New Mood"
-msgstr "Hangulat"
-
-#, fuzzy
+msgstr "Új hangulat"
+
 msgid "Change your Mood"
-msgstr "Jelszó módosítása"
-
-#, fuzzy
+msgstr "Hangulat módosítása"
+
 msgid "How do you feel right now?"
-msgstr "Nem vagyok itt"
+msgstr "Hogy érzi magát?"
+
+msgid "The PIN you entered is invalid."
+msgstr "A megadott PIN érvénytelen."
+
+msgid "The PIN you entered has an invalid length [4-10]."
+msgstr "A megadott PIN hossza érvénytelen [4-10]."
+
+msgid "The PIN is invalid. It should only consist of digits [0-9]."
+msgstr "A PIN érvénytelen. Csak számokból állhat [0-9]."
+
+msgid "The two PINs you entered do not match."
+msgstr "A megadott két PIN nem egyezik."
+
+msgid "The name you entered is invalid."
+msgstr "A megadott név érvénytelen."
+
+msgid ""
+"The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
+msgstr "A megadott születésnap érvénytelen. A helyes formátum: „ÉÉÉÉ-HH-NN”."
 
 #. show error to user
-#, fuzzy
 msgid "Profile Update Error"
-msgstr "Írási hiba"
+msgstr "Profilfrissítési hiba"
 
 #. no profile information yet, so we cannot update
 #. (reference: "libpurple/request.h")
@@ -5741,354 +5795,298 @@
 msgstr "Profil"
 
 msgid "Your profile information is not yet retrieved. Please try again later."
-msgstr ""
+msgstr "A profilinformációi még nincsenek lekérve. Próbálja újra később."
 
 #. pin
-#, fuzzy
 msgid "PIN"
-msgstr "UIN"
+msgstr "PIN"
 
 msgid "Verify PIN"
-msgstr ""
+msgstr "PIN ellenőrzése"
 
 #. display name
-#, fuzzy
 msgid "Display Name"
-msgstr "Vezetéknév"
+msgstr "Megjelenő név"
 
 #. hidden
 msgid "Hide my number"
-msgstr ""
+msgstr "Rejtsd el a számom"
 
 #. mobile number
-#, fuzzy
 msgid "Mobile Number"
 msgstr "Mobiltelefonszám"
 
-#, fuzzy
 msgid "Update your Profile"
-msgstr "Yahoo! profil"
+msgstr "Profil frissítése"
 
 msgid "Here you can update your MXit profile"
-msgstr ""
+msgstr "Itt frissítheti MXit profilját"
 
 msgid "View Splash"
-msgstr ""
+msgstr "Indítókép megjelenítése"
 
 msgid "There is no splash-screen currently available"
-msgstr ""
-
-#, fuzzy
+msgstr "Nem érhető el indítókép"
+
 msgid "About"
-msgstr "A névjegyem"
+msgstr "Névjegy"
 
 #. display / change mood
-#, fuzzy
 msgid "Change Mood..."
-msgstr "Jelszó módosítása…"
+msgstr "Hangulat módosítása…"
 
 #. display / change profile
-#, fuzzy
 msgid "Change Profile..."
-msgstr "Jelszó módosítása…"
+msgstr "Profil módosítása…"
 
 #. display splash-screen
-#, fuzzy
 msgid "View Splash..."
-msgstr "Napló megtekintése…"
+msgstr "Indítókép megtekintése…"
 
 #. display plugin version
-#, fuzzy
 msgid "About..."
-msgstr "A névjegyem"
+msgstr "Névjegy…"
 
 #. the file is too big
-#, fuzzy
 msgid "The file you are trying to send is too large!"
-msgstr "Az üzenet túl nagy."
-
-msgid ""
-"Unable to connect to the mxit HTTP server. Please check your server server "
-"settings."
-msgstr ""
-
-#, fuzzy
+msgstr "A küldeni kívánt fájl túl nagy."
+
+msgid ""
+"Unable to connect to the MXit HTTP server. Please check your server settings."
+msgstr ""
+"Nem lehet kapcsolódni a Mxit HTTP kiszolgálóhoz. Ellenőrizze a kiszolgáló "
+"beállításait."
+
 msgid "Logging In..."
-msgstr "Bejelentkezés"
-
-#, fuzzy
-msgid ""
-"Unable to connect to the mxit server. Please check your server server "
-"settings."
-msgstr ""
-"Nem lehet kapcsolódni a kiszolgálóhoz. Adja meg a kiszolgáló címét, amelyhez "
-"kapcsolódni szeretne."
-
-#, fuzzy
+msgstr "Bejelentkezés…"
+
+msgid ""
+"Unable to connect to the MXit server. Please check your server settings."
+msgstr ""
+"Nem lehet kapcsolódni a MXit kiszolgálóhoz. Ellenőrizze a kiszolgáló "
+"beállításait."
+
 msgid "Connecting..."
-msgstr "Kapcsolódás"
+msgstr "Kapcsolódás…"
+
+msgid "The nick name you entered is invalid."
+msgstr "A megadott becenév érvénytelen."
+
+msgid "The PIN you entered has an invalid length [7-10]."
+msgstr "A megadott PIN érvénytelen hosszúságú [7-10]."
 
 #. mxit login name
 msgid "MXit Login Name"
-msgstr ""
+msgstr "MXit bejelentkezési név"
 
 #. nick name
-#, fuzzy
 msgid "Nick Name"
 msgstr "Becenév"
 
 #. show the form to the user to complete
-#, fuzzy
 msgid "Register New MXit Account"
-msgstr "Új XMPP fiók regisztrálása"
-
-#, fuzzy
+msgstr "Új MXit fiók regisztrálása"
+
 msgid "Please fill in the following fields:"
-msgstr "Töltse ki az alábbi mezőket"
+msgstr "Töltse ki az alábbi mezőket:"
 
 #. no reply from the WAP site
 msgid "Error contacting the MXit WAP site. Please try again later."
-msgstr ""
+msgstr "Hiba a MXit WAP oldalhoz kapcsolódáskor. Próbálja újra később."
 
 #. wapserver error
 #. server could not find the user
 msgid ""
 "MXit is currently unable to process the request. Please try again later."
-msgstr ""
+msgstr "A MXit jelenleg nem képes feldolgozni a kérést. Próbálja újra később."
 
 msgid "Wrong security code entered. Please try again later."
-msgstr ""
+msgstr "A megadott biztonsági kód hibás. Próbálja újra később."
 
 msgid "Your session has expired. Please try again later."
-msgstr ""
+msgstr "A munkamenet lejárt. Próbálja újra később."
 
 msgid "Invalid country selected. Please try again."
-msgstr ""
+msgstr "Érvénytelen országot választott. Próbálja újra később."
 
 msgid "Username is not registered. Please register first."
-msgstr ""
+msgstr "A felhasználónév nincs regisztrálva. Először regisztráljon."
 
 msgid "Username is already registered. Please choose another username."
 msgstr ""
-
-#, fuzzy
+"A felhasználónév már használatban van. Válasszon másik felhasználónevet."
+
 msgid "Internal error. Please try again later."
-msgstr "A kiszolgáló nem érhető el, próbálkozzon később"
+msgstr "Belső hiba. Próbálja újra később."
 
 msgid "You did not enter the security code"
-msgstr ""
-
-#, fuzzy
+msgstr "Nem adta meg a biztonsági kódot."
+
 msgid "Security Code"
-msgstr "Biztonság engedélyezve"
+msgstr "Biztonsági kód"
 
 #. ask for input
-#, fuzzy
 msgid "Enter Security Code"
-msgstr "Adja meg a kódot"
-
-#, fuzzy
+msgstr "Adja meg a biztonsági kódot"
+
 msgid "Your Country"
 msgstr "Ország"
 
-#, fuzzy
 msgid "Your Language"
-msgstr "Előnyben részesített nyelv"
+msgstr "Nyelv"
 
 #. display the form to the user and wait for his/her input
-#, fuzzy
 msgid "MXit Authorization"
-msgstr "Engedélyezés kérése"
+msgstr "MXit engedélyezés"
 
 msgid "MXit account validation"
-msgstr ""
-
-#, fuzzy
+msgstr "Mxit fiókellenőrzés"
+
 msgid "Retrieving User Information..."
-msgstr "Kiszolgálóinformációk"
-
-#, fuzzy
+msgstr "Felhasználóinformációk lekérése…"
+
+msgid "Loading menu..."
+msgstr "Menü betöltése…"
+
 msgid "Status Message"
-msgstr "Elküldött üzenetek"
-
-#, fuzzy
+msgstr "Állapotüzenet"
+
 msgid "Hidden Number"
-msgstr "Középső név"
-
-#, fuzzy
+msgstr "Rejtett szám"
+
 msgid "Your Mobile Number..."
-msgstr "Mobiltelefonszám beállítása…"
+msgstr "Az Ön mobiltelefonszáma…"
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
-#, fuzzy
 msgid "WAP Server"
-msgstr "Kiszolgáló"
-
-#, fuzzy
+msgstr "WAP kiszolgáló"
+
 msgid "Connect via HTTP"
-msgstr "Kapcsolódás TCP segítségével"
+msgstr "Kapcsolódás HTTP segítségével"
 
 msgid "Enable splash-screen popup"
-msgstr ""
+msgstr "Felugró indítókép engedélyezése"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
-msgstr ""
+msgstr "A kapcsolat elveszett a MXithez. Csatlakozzon újra."
 
 #. packet could not be queued for transmission
-#, fuzzy
 msgid "Message Send Error"
-msgstr "XMPP üzenethiba"
-
-#, fuzzy
+msgstr "Üzenetküldési hiba"
+
 msgid "Unable to process your request at this time"
-msgstr "Nem oldható fel a gépnév"
+msgstr "Nem dolgozható fel a kérés"
 
 msgid "Timeout while waiting for a response from the MXit server."
-msgstr ""
-
-#, fuzzy
+msgstr "Időtúllépés a MXit kiszolgáló válaszára várakozás közben."
+
 msgid "Successfully Logged In..."
-msgstr "Sikeresen csatlakozott a Qun-hoz"
-
-#, fuzzy
+msgstr "Sikeres bejelentkezés…"
+
+#, c-format
+msgid ""
+"%s sent you an encrypted message, but it is not supported on this client."
+msgstr "%s titkosított üzenetet küldött, de ez még nem támogatott."
+
 msgid "Message Error"
-msgstr "XMPP üzenethiba"
+msgstr "Üzenethiba"
 
 msgid "Cannot perform redirect using the specified protocol"
-msgstr ""
-
-#, fuzzy
+msgstr "Nem végezhető átirányítás a megadott protokoll használatával"
+
+msgid "An internal MXit server error occurred."
+msgstr "Belső MXit kiszolgálóhiba történt."
+
+#, c-format
+msgid "Login error: %s (%i)"
+msgstr "Bejelentkezési hiba: %s (%i)"
+
+#, c-format
+msgid "Logout error: %s (%i)"
+msgstr "Kijelentkezési hiba: %s (%i)"
+
 msgid "Contact Error"
-msgstr "Kapcsolódási hiba"
-
-#, fuzzy
+msgstr "Partnerhiba"
+
 msgid "Message Sending Error"
-msgstr "XMPP üzenethiba"
-
-#, fuzzy
+msgstr "Üzenetküldési hiba"
+
 msgid "Status Error"
-msgstr "Folyamhiba"
-
-#, fuzzy
+msgstr "Állapothiba"
+
 msgid "Mood Error"
-msgstr "Ikonhiba"
-
-#, fuzzy
+msgstr "Hangulathiba"
+
 msgid "Invitation Error"
-msgstr "Regisztrációtörlési hiba"
-
-#, fuzzy
+msgstr "Meghívási hiba"
+
 msgid "Contact Removal Error"
-msgstr "Kapcsolódási hiba"
-
-#, fuzzy
+msgstr "Partnereltávolítási hiba"
+
 msgid "Subscription Error"
-msgstr "Feliratkozás"
-
-#, fuzzy
+msgstr "Feliratkozási hiba"
+
 msgid "Contact Update Error"
-msgstr "Kapcsolódási hiba"
-
-#, fuzzy
+msgstr "Partnerfrissítési hiba"
+
 msgid "File Transfer Error"
-msgstr "Fájlátvitel"
-
-#, fuzzy
+msgstr "Fájlátviteli hiba"
+
 msgid "Cannot create MultiMx room"
-msgstr "Nem hozható létre figyelmeztetés"
-
-#, fuzzy
+msgstr "Nem hozható létre MultiMx szoba"
+
 msgid "MultiMx Invitation Error"
-msgstr "Regisztrációtörlési hiba"
-
-#, fuzzy
+msgstr "MultiMx meghívási hiba"
+
 msgid "Profile Error"
-msgstr "Írási hiba"
+msgstr "Profilhiba"
 
 #. bad packet
 msgid "Invalid packet received from MXit."
-msgstr ""
+msgstr "Érvénytelen csomag érkezett a MXit-től."
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x01)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x01)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x02)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x02)"
 
 msgid "A connection error occurred to MXit. (read stage 0x03)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x03)"
 
 #. malformed packet length record (too long)
 msgid "A connection error occurred to MXit. (read stage 0x04)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x04)"
 
 #. connection error
 msgid "A connection error occurred to MXit. (read stage 0x05)"
-msgstr ""
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x05)"
 
 #. connection closed
 msgid "A connection error occurred to MXit. (read stage 0x06)"
-msgstr ""
-
-msgid "Angry"
-msgstr "Dühös"
-
-msgid "Excited"
-msgstr "Érdeklődő"
-
-#, fuzzy
-msgid "Grumpy"
-msgstr "Csoport"
-
-msgid "Happy"
-msgstr "Boldog"
-
-msgid "In Love"
-msgstr "Szerelmes"
-
-msgid "Invincible"
-msgstr "Legyőzhetetlen"
-
-msgid "Sad"
-msgstr "Szomorú"
-
-#, fuzzy
-msgid "Hot"
-msgstr "_Gépnév:"
-
-#, fuzzy
-msgid "Sick"
-msgstr "Becenév"
-
-msgid "Sleepy"
-msgstr "Álmos"
-
-#, fuzzy
+msgstr "Kapcsolathiba történt a MXit-tel. (olvasási állapot: 0x06)"
+
 msgid "Pending"
-msgstr "Küldés"
-
-#, fuzzy
+msgstr "Függőben"
+
 msgid "Invited"
-msgstr "Meghívás"
-
-#, fuzzy
+msgstr "Meghívva"
+
 msgid "Rejected"
-msgstr "Visszautasítás"
-
-#, fuzzy
+msgstr "Visszautasítva"
+
 msgid "Deleted"
-msgstr "Törlés"
+msgstr "Törölve"
 
 msgid "MXit Advertising"
-msgstr ""
-
-#, fuzzy
+msgstr "MXit hirdetés"
+
 msgid "More Information"
-msgstr "Munkahelyi adatok"
+msgstr "További információk"
 
 #, c-format
 msgid "No such user: %s"
@@ -6866,46 +6864,42 @@
 msgstr "Nem, amíg az AOL-on tartózkodik"
 
 msgid "Cannot receive IM due to parental controls"
-msgstr ""
+msgstr "Nem fogadható üzenet a szülői felügyelet miatt"
 
 msgid "Cannot send SMS without accepting terms"
-msgstr ""
-
-#, fuzzy
+msgstr "Nem küldhető SMS a feltételek elfogadása nélkül"
+
 msgid "Cannot send SMS"
-msgstr "A fájl nem küldhető el"
+msgstr "Nem küldhető SMS"
 
 #. SMS_WITHOUT_DISCLAIMER is weird
-#, fuzzy
 msgid "Cannot send SMS to this country"
-msgstr "Könyvtár nem küldhető."
+msgstr "Nem küldhető SMS ebbe az országba"
 
 #. Undocumented
 msgid "Cannot send SMS to unknown country"
-msgstr ""
+msgstr "Nem küldhető SMS ismeretlen országba"
 
 msgid "Bot accounts cannot initiate IMs"
-msgstr ""
+msgstr "Botfiókok nem kezdeményezhetnek azonnali üzenetküldést"
 
 msgid "Bot account cannot IM this user"
-msgstr ""
+msgstr "Botfiókok nem küldhetnek azonnali üzenetet a felhasználónak"
 
 msgid "Bot account reached IM limit"
-msgstr ""
+msgstr "A botfiók elérte az azonnali üzenetek korlátját"
 
 msgid "Bot account reached daily IM limit"
-msgstr ""
+msgstr "A botfiók elérte a napi azonnali üzenetek korlátját"
 
 msgid "Bot account reached monthly IM limit"
-msgstr ""
-
-#, fuzzy
+msgstr "A botfiók elérte a havi azonnali üzenetek korlátját"
+
 msgid "Unable to receive offline messages"
-msgstr "Az üzenetet nem lehet elküldeni."
-
-#, fuzzy
+msgstr "Nem lehet offline üzeneteket fogadni"
+
 msgid "Offline message store full"
-msgstr "Offline üzenet"
+msgstr "Az offline üzenetek tárolója megtelt"
 
 msgid ""
 "(There was an error receiving this message.  The buddy you are speaking with "
@@ -7076,14 +7070,13 @@
 msgstr "Az AOL azonnali üzenő szolgáltatás átmenetileg nem érhető el."
 
 #. username connecting too frequently
-#, fuzzy
 msgid ""
 "Your username has been connecting and disconnecting too frequently. Wait ten "
 "minutes and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Ön túl gyakran jelentkezik ki/be. Várjon tíz percet és próbálja meg újra. Ha "
-"tovább folytatja, még többet kell majd várnia."
+"A felhasználóneve túl gyakran jelentkezik ki/be. Várjon tíz percet és "
+"próbálja meg újra. Ha tovább próbálkozik, még többet kell majd várnia."
 
 #. client too old
 #, c-format
@@ -7093,14 +7086,13 @@
 "következő helyről: %s"
 
 #. IP address connecting too frequently
-#, fuzzy
 msgid ""
 "Your IP address has been connecting and disconnecting too frequently. Wait a "
 "minute and try again. If you continue to try, you will need to wait even "
 "longer."
 msgstr ""
-"Ön túl gyakran jelentkezik ki/be. Várjon egy percet és próbálja meg újra. Ha "
-"tovább folytatja, még többet kell majd várnia."
+"Az IP-címe túl gyakran jelentkezik ki/be. Várjon egy percet és próbálja meg "
+"újra. Ha tovább próbálkozik, még többet kell majd várnia."
 
 msgid "The SecurID key entered is invalid"
 msgstr "A megadott SecurID kulcs érvénytelen"
@@ -7254,21 +7246,21 @@
 msgstr[0] "Nem kapott meg %hu üzenetet a következőtől: %s, ismeretlen okból."
 msgstr[1] "Nem kapott meg %hu üzenetet a következőtől: %s, ismeretlen okból."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "Az üzenetet nem lehet elküldeni (%s)."
+msgstr "Az üzenetet nem lehet elküldeni: %s (%s)"
 
 #, c-format
 msgid "Unable to send message: %s"
 msgstr "Az üzenetet nem lehet elküldeni: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "Az üzenetet nem lehet elküldeni a következőnek: %s:"
-
-#, fuzzy, c-format
+msgstr "Az üzenetet nem lehet elküldeni a következőnek: %s: %s (%s)"
+
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "Az üzenetet nem lehet elküldeni a következőnek: %s:"
+msgstr "Az üzenetet nem lehet elküldeni a következőnek: %s: %s"
 
 #, c-format
 msgid "User information not available: %s"
@@ -7297,13 +7289,12 @@
 "[Nem lehet megjeleníteni az üzenetet ettől a felhasználótól, mert az "
 "érvénytelen karaktereket tartalmazott.]"
 
-#, fuzzy
 msgid ""
 "The last action you attempted could not be performed because you are over "
 "the rate limit. Please wait 10 seconds and try again.\n"
 msgstr ""
-"Az utolsó művelet nem hajtható végre, mert a túllépte a sebességkorlátot. "
-"Kérem várjon 10 másodpercet és próbálja meg újra."
+"Az utolsó művelet nem hajtható végre, mert túllépte a sebességkorlátot. "
+"Kérem várjon 10 másodpercet és próbálja meg újra.\n"
 
 #, c-format
 msgid "You have been disconnected from chat room %s."
@@ -10169,13 +10160,13 @@
 msgstr "Bejövő levelek megnyitása"
 
 msgid "Can't send SMS. Unable to obtain mobile carrier."
-msgstr ""
+msgstr "Nem küldhető SMS. Nem található mobilszolgáltató."
 
 msgid "Can't send SMS. Unknown mobile carrier."
-msgstr ""
+msgstr "Nem küldhető SMS. Ismeretlen mobilszolgáltató."
 
 msgid "Getting mobile carrier to send the SMS."
-msgstr ""
+msgstr "Mobilszolgáltató keresése az SMS elküldéséhez."
 
 #. Write a local message to this conversation showing that a request for a
 #. * Doodle session has been made
@@ -10717,6 +10708,8 @@
 msgid ""
 "Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more"
 msgstr ""
+"Azonnali üzenetküldés AIM, Google Talk, Jabber/XMPP, MSN, Yahoo és más "
+"protokollok támogatásával"
 
 msgid "Internet Messenger"
 msgstr "Azonnali üzenetküldés"
@@ -11986,6 +11979,9 @@
 msgid "Mongolian"
 msgstr "Mongol"
 
+msgid "Malay"
+msgstr "Maláj"
+
 msgid "Bokmål Norwegian"
 msgstr "Norvég Bokmål"
 
@@ -12055,6 +12051,9 @@
 msgid "Turkish"
 msgstr "török"
 
+msgid "Ukranian"
+msgstr "Ukrán"
+
 msgid "Urdu"
 msgstr "urdu"
 
@@ -12688,7 +12687,7 @@
 "\n"
 
 msgid "DIR"
-msgstr ""
+msgstr "KÖNYVTÁR"
 
 msgid "use DIR for config files"
 msgstr "a KÖNYVTÁR használata a beállítófájlokhoz"
@@ -12709,16 +12708,16 @@
 msgstr "ne jelentkezzen be automatikusan"
 
 msgid "NAME"
-msgstr ""
-
-#, fuzzy
+msgstr "NÉV"
+
 msgid ""
 "enable specified account(s) (optional argument NAME\n"
 "                      specifies account(s) to use, separated by commas.\n"
 "                      Without this only the first account will be enabled)."
 msgstr ""
-"automatikus bejelentkezés (a NÉV paraméter megadja a\n"
-"                      használandó fiókok vesszőkkel tagolt listáját."
+"adott fiókok engedélyezése (a NÉV paraméter megadja a\n"
+"                      használandó fiókok vesszőkkel tagolt listáját.\n"
+"                      Enélkül csak az első fiók lesz engedélyezve."
 
 msgid "X display to use"
 msgstr "Használandó X-megjelenítő"
@@ -12981,21 +12980,19 @@
 msgstr "Ismeretlen… Kérjük jelentse ezt!"
 
 msgid "(Custom)"
-msgstr ""
-
-#, fuzzy
-msgid "(Default)"
-msgstr "(alapértelmezett)"
+msgstr "(Egyéni)"
+
+msgid "Penguin Pimps"
+msgstr "Penguin Pimps"
 
 msgid "The default Pidgin sound theme"
-msgstr ""
-
-#, fuzzy
+msgstr "Az alapértelmezett Pidgin hangtéma"
+
 msgid "The default Pidgin buddy list theme"
-msgstr "Pidgin partnerlistatéma-szerkesztő"
+msgstr "Az alapértelmezett Pidgin partnerlistatéma"
 
 msgid "The default Pidgin status icon theme"
-msgstr ""
+msgstr "Az alapértelmezett Pidgin állapotikon-téma"
 
 msgid "Theme failed to unpack."
 msgstr "A téma kicsomagolása meghiúsult."
@@ -13006,18 +13003,29 @@
 msgid "Theme failed to copy."
 msgstr "A téma másolása meghiúsult."
 
-msgid "Install Theme"
-msgstr "Téma telepítése"
-
-msgid ""
-"Select a smiley theme that you would like to use from the list below. New "
-"themes can be installed by dragging and dropping them onto the theme list."
-msgstr ""
-"Válassza ki a használni kívánt hangulatjel-témát az alábbi listából. Új "
-"témák a témalistába dobással telepíthetők."
-
-msgid "Icon"
-msgstr "Ikon"
+msgid "Theme Selections"
+msgstr "Témaválasztás"
+
+#. Instructions
+msgid ""
+"Select a theme that you would like to use from the lists below.\n"
+"New themes can be installed by dragging and dropping them onto the theme "
+"list."
+msgstr ""
+"Válassza ki a használni kívánt témát az alábbi listákból.\n"
+"Új témák a témalistába húzva telepíthetők."
+
+msgid "Buddy List Theme:"
+msgstr "Partnerlistatéma:"
+
+msgid "Status Icon Theme:"
+msgstr "Állapotikon-téma:"
+
+msgid "Sound Theme:"
+msgstr "Hangtéma:"
+
+msgid "Smiley Theme:"
+msgstr "Hangulatjel-téma:"
 
 msgid "Keyboard Shortcuts"
 msgstr "Gyorsbillentyűk"
@@ -13025,10 +13033,6 @@
 msgid "Cl_ose conversations with the Escape key"
 msgstr "Társalgások bezárása az _Escape billentyűvel"
 
-#. Buddy List Themes
-msgid "Buddy List Theme"
-msgstr "Partnerlista-téma"
-
 #. System Tray
 msgid "System Tray Icon"
 msgstr "Rendszertálca-ikon"
@@ -13115,9 +13119,6 @@
 msgid "Font"
 msgstr "Betűkészlet"
 
-msgid "Use document font from _theme"
-msgstr "A _téma dokumentum-betűkészletének használata"
-
 msgid "Use font from _theme"
 msgstr "A téma _betűkészletének használata"
 
@@ -13140,17 +13141,15 @@
 msgid "Cannot start browser configuration program."
 msgstr "Nem indítható a böngészőkonfigurációs program."
 
-#, fuzzy
 msgid "Disabled"
-msgstr "_Tiltás"
+msgstr "Tiltva"
 
 #, c-format
 msgid "Use _automatically detected IP address: %s"
 msgstr "Automatikusan felismert _IP cím használata: %s"
 
-#, fuzzy
 msgid "ST_UN server:"
-msgstr "_Kiszolgáló:"
+msgstr "ST_UN kiszolgáló:"
 
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Például: stunserver.org</span>"
@@ -13164,78 +13163,27 @@
 msgid "_Enable automatic router port forwarding"
 msgstr "A_utomatikus útválasztóport-átirányítás"
 
-#, fuzzy
 msgid "_Manually specify range of ports to listen on:"
-msgstr "A figyelendő porttartomány _kézi megadása"
-
-#, fuzzy
+msgstr "A figyelendő porttartomány _kézi megadása:"
+
 msgid "_Start:"
-msgstr "Áll_apot:"
-
-#, fuzzy
+msgstr "Ke_zdete:"
+
 msgid "_End:"
-msgstr "_Kibontás"
+msgstr "_Vége:"
 
 #. TURN server
 msgid "Relay Server (TURN)"
 msgstr "Továbbító kiszolgáló (TURN)"
 
-#, fuzzy
 msgid "_TURN server:"
-msgstr "_Kiszolgáló:"
-
-#, fuzzy
+msgstr "_TURN kiszolgáló:"
+
 msgid "Use_rname:"
-msgstr "Felhasználónév:"
-
-#, fuzzy
+msgstr "_Felhasználónév:"
+
 msgid "Pass_word:"
-msgstr "Jelszó:"
-
-msgid "Proxy Server &amp; Browser"
-msgstr "Proxy-kiszolgáló és böngésző"
-
-msgid "<b>Proxy configuration program was not found.</b>"
-msgstr "<b>A proxykonfigurációs program nem található.</b>"
-
-msgid "<b>Browser configuration program was not found.</b>"
-msgstr "<b>A böngészőkonfigurációs program nem található.</b>"
-
-msgid ""
-"Proxy & Browser preferences are configured\n"
-"in GNOME Preferences"
-msgstr ""
-"A proxy és böngésző a GNOME beállításaiban\n"
-"vannak konfigurálva"
-
-msgid "Configure _Proxy"
-msgstr "_Proxy beállítása"
-
-msgid "Configure _Browser"
-msgstr "Bö_ngésző beállítása"
-
-msgid "Proxy Server"
-msgstr "Proxy-kiszolgáló"
-
-#. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
-#, fuzzy
-msgid "Use remote _DNS with SOCKS4 proxies"
-msgstr "Távoli DNS használata SOCKS4 proxykkal"
-
-#, fuzzy
-msgid "Proxy t_ype:"
-msgstr "Proxy _típusa:"
-
-msgid "No proxy"
-msgstr "Nincs Proxy"
-
-#, fuzzy
-msgid "P_ort:"
-msgstr "_Port:"
-
-#, fuzzy
-msgid "User_name:"
-msgstr "Felhasználónév:"
+msgstr "_Jelszó:"
 
 msgid "Seamonkey"
 msgstr "Seamonkey"
@@ -13276,6 +13224,15 @@
 msgid "Browser Selection"
 msgstr "Böngészőválasztás"
 
+msgid "Browser preferences are configured in GNOME preferences"
+msgstr "A böngésző beállításai a GNOME beállításaiban vannak megadva"
+
+msgid "<b>Browser configuration program was not found.</b>"
+msgstr "<b>A böngészőkonfigurációs program nem található.</b>"
+
+msgid "Configure _Browser"
+msgstr "Bö_ngésző beállítása"
+
 msgid "_Browser:"
 msgstr "_Böngésző:"
 
@@ -13299,6 +13256,35 @@
 "_Kézi:\n"
 "(%s az URL-hez)"
 
+msgid "Proxy Server"
+msgstr "Proxy-kiszolgáló"
+
+msgid "Proxy preferences are configured in GNOME preferences"
+msgstr "A proxy beállításai a GNOME beállításaiban vannak megadva"
+
+msgid "<b>Proxy configuration program was not found.</b>"
+msgstr "<b>A proxykonfigurációs program nem található.</b>"
+
+msgid "Configure _Proxy"
+msgstr "_Proxy beállítása"
+
+#. This is a global option that affects SOCKS4 usage even with
+#. * account-specific proxy settings
+msgid "Use remote _DNS with SOCKS4 proxies"
+msgstr "Távoli _DNS használata SOCKS4 proxykkal"
+
+msgid "Proxy t_ype:"
+msgstr "Proxy _típusa:"
+
+msgid "No proxy"
+msgstr "Nincs Proxy"
+
+msgid "P_ort:"
+msgstr "P_ort:"
+
+msgid "User_name:"
+msgstr "_Felhasználónév:"
+
 msgid "Log _format:"
 msgstr "Napló_formátum:"
 
@@ -13382,25 +13368,18 @@
 msgid "Based on keyboard or mouse use"
 msgstr "Billentyűzet vagy egér használata alapján"
 
+msgid "_Minutes before becoming idle:"
+msgstr "Üresjárat ennyi _perc után:"
+
+msgid "Change to this status when _idle:"
+msgstr "Állapot módosítása erre, _ha inaktív:"
+
 msgid "_Auto-reply:"
 msgstr "_Automatikus válasz:"
 
 msgid "When both away and idle"
 msgstr "Ha távol van és inaktív"
 
-#. Auto-away stuff
-msgid "Auto-away"
-msgstr "Automatikus távollét"
-
-msgid "_Minutes before becoming idle:"
-msgstr "Üresjárat ennyi _perc után:"
-
-msgid "Change status when _idle"
-msgstr "Állapot módosítása, _ha inaktív"
-
-msgid "Change _status to:"
-msgstr "Állap_ot módosítása a következőre:"
-
 #. Signon status stuff
 msgid "Status at Startup"
 msgstr "Állapot induláskor"
@@ -13414,15 +13393,15 @@
 msgid "Interface"
 msgstr "Felület"
 
-msgid "Smiley Themes"
-msgstr "Hangulatjel-témák"
-
 msgid "Browser"
 msgstr "Böngésző"
 
 msgid "Status / Idle"
 msgstr "Állapot / Inaktív"
 
+msgid "Themes"
+msgstr "Témák"
+
 msgid "Allow all users to contact me"
 msgstr "Mindenki kapcsolatba léphet velem"
 
@@ -13770,9 +13749,6 @@
 msgid "Pidgin smileys"
 msgstr "Pidgin hangulatjelek"
 
-msgid "Penguin Pimps"
-msgstr "Penguin Pimps"
-
 msgid "Selecting this disables graphical emoticons."
 msgstr "Ennek kiválasztása letiltja a grafikus hangulatjeleket."
 
@@ -14414,6 +14390,9 @@
 msgid "Conversation Entry"
 msgstr "Társalgás beviteli mező"
 
+msgid "Conversation History"
+msgstr "Társalgáselőzmények"
+
 msgid "Request Dialog"
 msgstr "Kérdés párbeszédablak"
 
@@ -14879,9 +14858,8 @@
 msgid "_Start %s on Windows startup"
 msgstr "A %s indítá_sa a Windows indulásakor"
 
-#, fuzzy
 msgid "Allow multiple instances"
-msgstr "több példány engedélyezése"
+msgstr "Több példány engedélyezése"
 
 msgid "_Dockable Buddy List"
 msgstr "_Dokkolható partnerlista"
@@ -14944,25 +14922,3 @@
 msgstr ""
 "Ez a bővítmény XMPP kiszolgálókban vagy kliensekben végzett hibakereséshez "
 "hasznos."
-
-#, fuzzy
-#~ msgid "The root certificate this one claims to be issued by is unknown."
-#~ msgstr "A tanúsítványt kiadó gyökértanúsítványt a Pidgin nem ismeri."
-
-#~ msgid "Send instant messages over multiple protocols"
-#~ msgstr "Azonnali üzenetek küldése több protokoll használatával"
-
-#~ msgid "_Start port:"
-#~ msgstr "_Első port:"
-
-#~ msgid "_End port:"
-#~ msgstr "_Utolsó port:"
-
-#~ msgid "_User:"
-#~ msgstr "_Felhasználó:"
-
-#~ msgid "GTK+ Runtime Version"
-#~ msgstr "GTK+ runtime verzió"
-
-#~ msgid "Without this only the first account will be enabled)."
-#~ msgstr "Enélkül csak az első fiók lesz engedélyezve)."