Software / code / prosody
Comparison
plugins/mod_compression.lua @ 5776:bd0ff8ae98a8
Remove all trailing whitespace
| author | Florian Zeitz <florob@babelmonkeys.de> |
|---|---|
| date | Fri, 09 Aug 2013 17:48:21 +0200 |
| parent | 5535:0df0afc041d7 |
| child | 6054:7a5ddbaf758d |
comparison
equal
deleted
inserted
replaced
| 5775:a6c2b8933507 | 5776:bd0ff8ae98a8 |
|---|---|
| 1 -- Prosody IM | 1 -- Prosody IM |
| 2 -- Copyright (C) 2009-2012 Tobias Markmann | 2 -- Copyright (C) 2009-2012 Tobias Markmann |
| 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"; | 8 local st = require "util.stanza"; |
| 101 extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed"); | 101 extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed"); |
| 102 }); | 102 }); |
| 103 return; | 103 return; |
| 104 end | 104 end |
| 105 return compressed; | 105 return compressed; |
| 106 end); | 106 end); |
| 107 end | 107 end |
| 108 | 108 |
| 109 -- setup decompression for a stream | 109 -- setup decompression for a stream |
| 110 local function setup_decompression(session, inflate_stream) | 110 local function setup_decompression(session, inflate_stream) |
| 111 add_filter(session, "bytes/in", function(data) | 111 add_filter(session, "bytes/in", function(data) |
| 123 end); | 123 end); |
| 124 end | 124 end |
| 125 | 125 |
| 126 module:hook("stanza/http://jabber.org/protocol/compress:compressed", function(event) | 126 module:hook("stanza/http://jabber.org/protocol/compress:compressed", function(event) |
| 127 local session = event.origin; | 127 local session = event.origin; |
| 128 | 128 |
| 129 if session.type == "s2sout_unauthed" or session.type == "s2sout" then | 129 if session.type == "s2sout_unauthed" or session.type == "s2sout" then |
| 130 session.log("debug", "Activating compression...") | 130 session.log("debug", "Activating compression...") |
| 131 -- create deflate and inflate streams | 131 -- create deflate and inflate streams |
| 132 local deflate_stream = get_deflate_stream(session); | 132 local deflate_stream = get_deflate_stream(session); |
| 133 if not deflate_stream then return true; end | 133 if not deflate_stream then return true; end |
| 134 | 134 |
| 135 local inflate_stream = get_inflate_stream(session); | 135 local inflate_stream = get_inflate_stream(session); |
| 136 if not inflate_stream then return true; end | 136 if not inflate_stream then return true; end |
| 137 | 137 |
| 138 -- setup compression for session.w | 138 -- setup compression for session.w |
| 139 setup_compression(session, deflate_stream); | 139 setup_compression(session, deflate_stream); |
| 140 | 140 |
| 141 -- setup decompression for session.data | 141 -- setup decompression for session.data |
| 142 setup_decompression(session, inflate_stream); | 142 setup_decompression(session, inflate_stream); |
| 143 session:reset_stream(); | 143 session:reset_stream(); |
| 144 session:open_stream(session.from_host, session.to_host); | 144 session:open_stream(session.from_host, session.to_host); |
| 145 session.compressed = true; | 145 session.compressed = true; |
| 156 local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); | 156 local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); |
| 157 (session.sends2s or session.send)(error_st); | 157 (session.sends2s or session.send)(error_st); |
| 158 session.log("debug", "Client tried to establish another compression layer."); | 158 session.log("debug", "Client tried to establish another compression layer."); |
| 159 return true; | 159 return true; |
| 160 end | 160 end |
| 161 | 161 |
| 162 -- checking if the compression method is supported | 162 -- checking if the compression method is supported |
| 163 local method = stanza:child_with_name("method"); | 163 local method = stanza:child_with_name("method"); |
| 164 method = method and (method[1] or ""); | 164 method = method and (method[1] or ""); |
| 165 if method == "zlib" then | 165 if method == "zlib" then |
| 166 session.log("debug", "zlib compression enabled."); | 166 session.log("debug", "zlib compression enabled."); |
| 167 | 167 |
| 168 -- create deflate and inflate streams | 168 -- create deflate and inflate streams |
| 169 local deflate_stream = get_deflate_stream(session); | 169 local deflate_stream = get_deflate_stream(session); |
| 170 if not deflate_stream then return true; end | 170 if not deflate_stream then return true; end |
| 171 | 171 |
| 172 local inflate_stream = get_inflate_stream(session); | 172 local inflate_stream = get_inflate_stream(session); |
| 173 if not inflate_stream then return true; end | 173 if not inflate_stream then return true; end |
| 174 | 174 |
| 175 (session.sends2s or session.send)(st.stanza("compressed", {xmlns=xmlns_compression_protocol})); | 175 (session.sends2s or session.send)(st.stanza("compressed", {xmlns=xmlns_compression_protocol})); |
| 176 session:reset_stream(); | 176 session:reset_stream(); |
| 177 | 177 |
| 178 -- setup compression for session.w | 178 -- setup compression for session.w |
| 179 setup_compression(session, deflate_stream); | 179 setup_compression(session, deflate_stream); |
| 180 | 180 |
| 181 -- setup decompression for session.data | 181 -- setup decompression for session.data |
| 182 setup_decompression(session, inflate_stream); | 182 setup_decompression(session, inflate_stream); |
| 183 | 183 |
| 184 session.compressed = true; | 184 session.compressed = true; |
| 185 elseif method then | 185 elseif method then |
| 186 session.log("debug", "%s compression selected, but we don't support it.", tostring(method)); | 186 session.log("debug", "%s compression selected, but we don't support it.", tostring(method)); |
| 187 local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("unsupported-method"); | 187 local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("unsupported-method"); |
| 188 (session.sends2s or session.send)(error_st); | 188 (session.sends2s or session.send)(error_st); |