Software / code / prosody
Comparison
plugins/mod_compression.lua @ 1719:cf103398e643
Don't allow double compression.
| author | Tobias Markmann <tm@ayena.de> |
|---|---|
| date | Tue, 18 Aug 2009 22:00:37 +0200 |
| parent | 1718:af3d0c329396 |
| child | 1728:cb4c94b47d53 |
comparison
equal
deleted
inserted
replaced
| 1718:af3d0c329396 | 1719:cf103398e643 |
|---|---|
| 35 ); | 35 ); |
| 36 | 36 |
| 37 -- TODO Support compression on S2S level too. | 37 -- TODO Support compression on S2S level too. |
| 38 module:add_handler({"c2s_unauthed", "c2s_authed"}, "compress", xmlns_compression_protocol, | 38 module:add_handler({"c2s_unauthed", "c2s_authed"}, "compress", xmlns_compression_protocol, |
| 39 function(session, stanza) | 39 function(session, stanza) |
| 40 -- fail if we are already compressed | |
| 41 if session.compressed then | |
| 42 local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("unsupported-method"); | |
| 43 session.send(error_st); | |
| 44 session:log("warn", "Tried to establish another compression layer."); | |
| 45 end | |
| 46 | |
| 40 -- checking if the compression method is supported | 47 -- checking if the compression method is supported |
| 41 local method = stanza:child_with_name("method")[1]; | 48 local method = stanza:child_with_name("method")[1]; |
| 42 if method == "zlib" then | 49 if method == "zlib" then |
| 43 session.log("info", method.." compression selected."); | 50 session.log("info", method.." compression selected."); |
| 44 session.send(st.stanza("compressed", {xmlns=xmlns_compression_protocol})); | 51 session.send(st.stanza("compressed", {xmlns=xmlns_compression_protocol})); |
| 72 session:close({ | 79 session:close({ |
| 73 condition = "undefined-condition"; | 80 condition = "undefined-condition"; |
| 74 text = compressed; | 81 text = compressed; |
| 75 extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed"); | 82 extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed"); |
| 76 }); | 83 }); |
| 77 module:log("error", compressed); | 84 module:log("warn", compressed); |
| 78 return; | 85 return; |
| 79 end | 86 end |
| 80 old_send(compressed); | 87 old_send(compressed); |
| 81 end; | 88 end; |
| 82 | 89 |
| 89 session:close({ | 96 session:close({ |
| 90 condition = "undefined-condition"; | 97 condition = "undefined-condition"; |
| 91 text = decompressed; | 98 text = decompressed; |
| 92 extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed"); | 99 extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed"); |
| 93 }); | 100 }); |
| 94 module:log("error", decompressed); | 101 module:log("warn", decompressed); |
| 95 return; | 102 return; |
| 96 end | 103 end |
| 97 old_data(conn, decompressed); | 104 old_data(conn, decompressed); |
| 98 end; | 105 end; |
| 99 end | 106 end |