Software / code / verse
Comparison
plugins/compression.lua @ 197:7e98cf2c1d8d
plugins.*: Use verse.stanza() & co instead of require util.stanza
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 17 Mar 2011 18:33:52 +0100 |
| parent | 176:6004486e8b6c |
| child | 250:a5ac643a7fd6 |
comparison
equal
deleted
inserted
replaced
| 196:eb9d69d3f0b5 | 197:7e98cf2c1d8d |
|---|---|
| 3 -- | 3 -- |
| 4 -- This project is MIT/X11 licensed. Please see the | 4 -- This project is MIT/X11 licensed. Please see the |
| 5 -- COPYING file in the source package for more information. | 5 -- COPYING file in the source package for more information. |
| 6 -- | 6 -- |
| 7 | 7 |
| 8 local st = require "util.stanza"; | |
| 9 local zlib = require "zlib"; | 8 local zlib = require "zlib"; |
| 10 | 9 |
| 11 local xmlns_compression_feature = "http://jabber.org/features/compress" | 10 local xmlns_compression_feature = "http://jabber.org/features/compress" |
| 12 local xmlns_compression_protocol = "http://jabber.org/protocol/compress" | 11 local xmlns_compression_protocol = "http://jabber.org/protocol/compress" |
| 13 local xmlns_stream = "http://etherx.jabber.org/streams"; | 12 local xmlns_stream = "http://etherx.jabber.org/streams"; |
| 16 | 15 |
| 17 -- returns either nil or a fully functional ready to use inflate stream | 16 -- returns either nil or a fully functional ready to use inflate stream |
| 18 local function get_deflate_stream(session) | 17 local function get_deflate_stream(session) |
| 19 local status, deflate_stream = pcall(zlib.deflate, compression_level); | 18 local status, deflate_stream = pcall(zlib.deflate, compression_level); |
| 20 if status == false then | 19 if status == false then |
| 21 local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); | 20 local error_st = verse.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); |
| 22 session:send(error_st); | 21 session:send(error_st); |
| 23 session:error("Failed to create zlib.deflate filter: %s", tostring(deflate_stream)); | 22 session:error("Failed to create zlib.deflate filter: %s", tostring(deflate_stream)); |
| 24 return | 23 return |
| 25 end | 24 end |
| 26 return deflate_stream | 25 return deflate_stream |
| 28 | 27 |
| 29 -- returns either nil or a fully functional ready to use inflate stream | 28 -- returns either nil or a fully functional ready to use inflate stream |
| 30 local function get_inflate_stream(session) | 29 local function get_inflate_stream(session) |
| 31 local status, inflate_stream = pcall(zlib.inflate); | 30 local status, inflate_stream = pcall(zlib.inflate); |
| 32 if status == false then | 31 if status == false then |
| 33 local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); | 32 local error_st = verse.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); |
| 34 session:send(error_st); | 33 session:send(error_st); |
| 35 session:error("Failed to create zlib.inflate filter: %s", tostring(inflate_stream)); | 34 session:error("Failed to create zlib.inflate filter: %s", tostring(inflate_stream)); |
| 36 return | 35 return |
| 37 end | 36 end |
| 38 return inflate_stream | 37 return inflate_stream |
| 45 local status, compressed, eof = pcall(deflate_stream, tostring(t), 'sync'); | 44 local status, compressed, eof = pcall(deflate_stream, tostring(t), 'sync'); |
| 46 if status == false then | 45 if status == false then |
| 47 session:close({ | 46 session:close({ |
| 48 condition = "undefined-condition"; | 47 condition = "undefined-condition"; |
| 49 text = compressed; | 48 text = compressed; |
| 50 extra = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("processing-failed"); | 49 extra = verse.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("processing-failed"); |
| 51 }); | 50 }); |
| 52 session:warn("Compressed send failed: %s", tostring(compressed)); | 51 session:warn("Compressed send failed: %s", tostring(compressed)); |
| 53 return; | 52 return; |
| 54 end | 53 end |
| 55 session.conn:write(compressed); | 54 session.conn:write(compressed); |
| 64 local status, decompressed, eof = pcall(inflate_stream, data); | 63 local status, decompressed, eof = pcall(inflate_stream, data); |
| 65 if status == false then | 64 if status == false then |
| 66 session:close({ | 65 session:close({ |
| 67 condition = "undefined-condition"; | 66 condition = "undefined-condition"; |
| 68 text = decompressed; | 67 text = decompressed; |
| 69 extra = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("processing-failed"); | 68 extra = verse.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("processing-failed"); |
| 70 }); | 69 }); |
| 71 stream:warn("%s", tostring(decompressed)); | 70 stream:warn("%s", tostring(decompressed)); |
| 72 return; | 71 return; |
| 73 end | 72 end |
| 74 return old_data(conn, decompressed); | 73 return old_data(conn, decompressed); |
| 83 if comp_st then | 82 if comp_st then |
| 84 -- do we support the mechanism | 83 -- do we support the mechanism |
| 85 for a in comp_st:children() do | 84 for a in comp_st:children() do |
| 86 local algorithm = a[1] | 85 local algorithm = a[1] |
| 87 if algorithm == "zlib" then | 86 if algorithm == "zlib" then |
| 88 stream:send(st.stanza("compress", {xmlns=xmlns_compression_protocol}):tag("method"):text("zlib")) | 87 stream:send(verse.stanza("compress", {xmlns=xmlns_compression_protocol}):tag("method"):text("zlib")) |
| 89 stream:debug("Enabled compression using zlib.") | 88 stream:debug("Enabled compression using zlib.") |
| 90 return true; | 89 return true; |
| 91 end | 90 end |
| 92 end | 91 end |
| 93 session:debug("Remote server supports no compression algorithm we support.") | 92 session:debug("Remote server supports no compression algorithm we support.") |