diff libpurple/protocols/oscar/odc.c @ 20300:96a6a9eef15b

applied changes from 2ab75e32c52e94c674d0b5a396d224da7e9d509e through 3829f989342d787500e9abe363c89909db102f4b
author Luke Schierer <lschiere@pidgin.im>
date Fri, 19 Oct 2007 16:27:50 +0000
parents 44b4e8bd759b
children 35b4f1dc4c8d
line wrap: on
line diff
--- a/libpurple/protocols/oscar/odc.c	Fri Oct 19 16:22:50 2007 +0000
+++ b/libpurple/protocols/oscar/odc.c	Fri Oct 19 16:27:50 2007 +0000
@@ -27,6 +27,8 @@
 #include "imgstore.h"
 #include "util.h"
 
+#define DIRECTIM_MAX_FILESIZE 52428800
+
 /**
  * Free any ODC related data and print a message to the conversation
  * window based on conn->disconnect_reason.
@@ -587,6 +589,27 @@
 
 	if (frame->payload.len > 0)
 	{
+		if (frame->payload.len > DIRECTIM_MAX_FILESIZE)
+		{
+			gchar *tmp, *size1, *size2;
+			PurpleAccount *account;
+			PurpleConversation *conv;
+
+			size1 = purple_str_size_to_units(frame->payload.len);
+			size2 = purple_str_size_to_units(DIRECTIM_MAX_FILESIZE);
+			tmp = g_strdup_printf(_("%s tried to send you a %s file, but we only allow files up to %s over Direct IM.  Try using file transfer instead.\n"), conn->sn, size1, size2);
+			g_free(size1);
+			g_free(size2);
+
+			account = purple_connection_get_account(conn->od->gc);
+			conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, conn->sn);
+			purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL));
+			g_free(tmp);
+
+			peer_connection_destroy(conn, OSCAR_DISCONNECT_LOCAL_CLOSED, NULL);
+			return;
+		}
+
 		/* We have payload data!  Switch to the ODC watcher to read it. */
 		frame->payload.data = g_new(guint8, frame->payload.len);
 		frame->payload.offset = 0;