46 end |
46 end |
47 |
47 |
48 -- checking if the compression method is supported |
48 -- checking if the compression method is supported |
49 local method = stanza:child_with_name("method")[1]; |
49 local method = stanza:child_with_name("method")[1]; |
50 if method == "zlib" then |
50 if method == "zlib" then |
51 session.log("info", method.." compression selected."); |
|
52 session.send(st.stanza("compressed", {xmlns=xmlns_compression_protocol})); |
|
53 session:reset_stream(); |
|
54 |
|
55 -- create deflate and inflate streams |
51 -- create deflate and inflate streams |
56 local status, deflate_stream = pcall(zlib.deflate, compression_level); |
52 local status, deflate_stream = pcall(zlib.deflate, compression_level); |
57 if status == false then |
53 if status == false then |
58 local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); |
54 local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); |
59 session.send(error_st); |
55 session.send(error_st); |
69 session.log("error", "Failed to create zlib.inflate filter."); |
65 session.log("error", "Failed to create zlib.inflate filter."); |
70 module:log("error", "%s", tostring(inflate_stream)); |
66 module:log("error", "%s", tostring(inflate_stream)); |
71 return |
67 return |
72 end |
68 end |
73 |
69 |
|
70 session.log("info", method.." compression selected."); |
|
71 session.send(st.stanza("compressed", {xmlns=xmlns_compression_protocol})); |
|
72 session:reset_stream(); |
|
73 |
74 -- setup compression for session.w |
74 -- setup compression for session.w |
75 local old_send = session.send; |
75 local old_send = session.send; |
76 |
76 |
77 session.send = function(t) |
77 session.send = function(t) |
78 local status, compressed, eof = pcall(deflate_stream, tostring(t), 'sync'); |
78 local status, compressed, eof = pcall(deflate_stream, tostring(t), 'sync'); |