From cf224cd1a1f08dcf6ba48253fd60a2d148c613b3 Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Tue, 9 Mar 2010 17:43:18 +0500
Subject: mod_compression: Fixed various possible tracebacks in logging.

---
 plugins/mod_compression.lua | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/plugins/mod_compression.lua b/plugins/mod_compression.lua
index ec9e24ec..9ad0cbd4 100644
--- a/plugins/mod_compression.lua
+++ b/plugins/mod_compression.lua
@@ -8,6 +8,7 @@
 local st = require "util.stanza";
 local zlib = require "zlib";
 local pcall = pcall;
+local tostring = tostring;
 
 local xmlns_compression_feature = "http://jabber.org/features/compress"
 local xmlns_compression_protocol = "http://jabber.org/protocol/compress"
@@ -57,7 +58,7 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 					local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed");
 					session.send(error_st);
 					session.log("error", "Failed to create zlib.deflate filter.");
-					module:log("error", deflate_stream);
+					module:log("error", "%s", tostring(deflate_stream));
 					return
 				end
 				
@@ -65,8 +66,8 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 				if status == false then
 					local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed");
 					session.send(error_st);
-					session.log("error", "Failed to create zlib.deflate filter.");
-					module:log("error", inflate_stream);
+					session.log("error", "Failed to create zlib.inflate filter.");
+					module:log("error", "%s", tostring(inflate_stream));
 					return
 				end
 				
@@ -81,7 +82,7 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 								text = compressed;
 								extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed");
 							});
-							module:log("warn", compressed);
+							module:log("warn", "%s", tostring(compressed));
 							return;
 						end
 						old_send(compressed);
@@ -98,7 +99,7 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 									text = decompressed;
 									extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed");
 								});
-								module:log("warn", decompressed);
+								module:log("warn", "%s", tostring(decompressed));
 								return;
 							end
 							old_data(conn, decompressed);
@@ -114,7 +115,7 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 					end;
 				session.compressed = true;
 			else
-				session.log("info", method.." compression selected. But we don't support it.");
+				session.log("info", "%s compression selected, but we don't support it.", tostring(method));
 				local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("unsupported-method");
 				session.send(error_st);
 			end
-- 
cgit v1.2.3


From 84ece3aca6b0d76a307acb47a4d0fc89c5eb3437 Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Tue, 9 Mar 2010 17:52:18 +0500
Subject: mod_compression: Don't tell client compression succeeded when it
 didn't.

---
 plugins/mod_compression.lua | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/plugins/mod_compression.lua b/plugins/mod_compression.lua
index 9ad0cbd4..e35430fd 100644
--- a/plugins/mod_compression.lua
+++ b/plugins/mod_compression.lua
@@ -48,10 +48,6 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 			-- checking if the compression method is supported
 			local method = stanza:child_with_name("method")[1];
 			if method == "zlib" then
-				session.log("info", method.." compression selected.");
-				session.send(st.stanza("compressed", {xmlns=xmlns_compression_protocol}));
-				session:reset_stream();
-				
 				-- create deflate and inflate streams
 				local status, deflate_stream = pcall(zlib.deflate, compression_level);
 				if status == false then
@@ -71,6 +67,10 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 					return
 				end
 				
+				session.log("info", method.." compression selected.");
+				session.send(st.stanza("compressed", {xmlns=xmlns_compression_protocol}));
+				session:reset_stream();
+
 				-- setup compression for session.w
 				local old_send = session.send;
 				
-- 
cgit v1.2.3


From b01e95ae145a66dd28529e4891bc244bb70ca584 Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Tue, 9 Mar 2010 18:11:45 +0500
Subject: mod_compression: Don't succeed after indicating a failure.

---
 plugins/mod_compression.lua | 1 +
 1 file changed, 1 insertion(+)

diff --git a/plugins/mod_compression.lua b/plugins/mod_compression.lua
index e35430fd..bdecf467 100644
--- a/plugins/mod_compression.lua
+++ b/plugins/mod_compression.lua
@@ -43,6 +43,7 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 				local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("unsupported-method");
 				session.send(error_st);
 				session.log("warn", "Tried to establish another compression layer.");
+				return;
 			end
 			
 			-- checking if the compression method is supported
-- 
cgit v1.2.3


From a4d78f333f96d6a1fe08bdd66e1b7cdf1f0e124a Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Tue, 9 Mar 2010 18:19:50 +0500
Subject: mod_compression: More robust stanza processing.

---
 plugins/mod_compression.lua | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/plugins/mod_compression.lua b/plugins/mod_compression.lua
index bdecf467..379927df 100644
--- a/plugins/mod_compression.lua
+++ b/plugins/mod_compression.lua
@@ -47,7 +47,8 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 			end
 			
 			-- checking if the compression method is supported
-			local method = stanza:child_with_name("method")[1];
+			local method = stanza:child_with_name("method");
+			method = method and method[1];
 			if method == "zlib" then
 				-- create deflate and inflate streams
 				local status, deflate_stream = pcall(zlib.deflate, compression_level);
-- 
cgit v1.2.3


From b3aafb2c908ee767656555086c9c08c471f5063a Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Tue, 9 Mar 2010 20:14:47 +0500
Subject: mod_compression: Return <setup-failed/> instead of
 <unsupported-method/> where applicable.

---
 plugins/mod_compression.lua | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/plugins/mod_compression.lua b/plugins/mod_compression.lua
index 379927df..87ff6be7 100644
--- a/plugins/mod_compression.lua
+++ b/plugins/mod_compression.lua
@@ -40,7 +40,7 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 		function(session, stanza)
 			-- fail if we are already compressed
 			if session.compressed then
-				local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("unsupported-method");
+				local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed");
 				session.send(error_st);
 				session.log("warn", "Tried to establish another compression layer.");
 				return;
@@ -48,7 +48,7 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 			
 			-- checking if the compression method is supported
 			local method = stanza:child_with_name("method");
-			method = method and method[1];
+			method = method and (method[1] or "");
 			if method == "zlib" then
 				-- create deflate and inflate streams
 				local status, deflate_stream = pcall(zlib.deflate, compression_level);
@@ -116,10 +116,12 @@ module:add_handler({"c2s_unauthed", "c2s"}, "compress", xmlns_compression_protoc
 						return true;
 					end;
 				session.compressed = true;
-			else
+			elseif method then
 				session.log("info", "%s compression selected, but we don't support it.", tostring(method));
 				local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("unsupported-method");
 				session.send(error_st);
+			else
+				session.send(st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"));
 			end
 		end
 );
-- 
cgit v1.2.3