15
15
*/
16
16
package net .schmizz .sshj .transport .compression ;
17
17
18
- import com . jcraft . jzlib . Deflater ;
19
- import com . jcraft . jzlib . GZIPException ;
20
- import com . jcraft . jzlib .Inflater ;
21
- import com . jcraft . jzlib . JZlib ;
18
+ import java . util . zip . DataFormatException ;
19
+ import java . util . zip . Deflater ;
20
+ import java . util . zip .Inflater ;
21
+
22
22
import net .schmizz .sshj .common .Buffer ;
23
23
import net .schmizz .sshj .common .DisconnectReason ;
24
- import net .schmizz .sshj .common .SSHRuntimeException ;
25
24
import net .schmizz .sshj .transport .TransportException ;
25
+ import net .schmizz .sshj .transport .compression .Compression ;
26
26
27
- /** ZLib based Compression. */
28
- public class ZlibCompression
29
- implements Compression {
27
+ public class ZlibCompression implements Compression {
30
28
31
29
/** Named factory for the ZLib Compression. */
32
30
public static class Factory
@@ -52,19 +50,15 @@ public String getName() {
52
50
53
51
@ Override
54
52
public void init (Mode mode ) {
55
- try {
56
- switch (mode ) {
57
- case DEFLATE :
58
- deflater = new Deflater (JZlib .Z_DEFAULT_COMPRESSION );
59
- break ;
60
- case INFLATE :
61
- inflater = new Inflater ();
62
- break ;
63
- default :
64
- assert false ;
65
- }
66
- } catch (GZIPException gze ) {
67
-
53
+ switch (mode ) {
54
+ case DEFLATE :
55
+ deflater = new Deflater (Deflater .DEFAULT_COMPRESSION );
56
+ break ;
57
+ case INFLATE :
58
+ inflater = new Inflater ();
59
+ break ;
60
+ default :
61
+ assert false ;
68
62
}
69
63
}
70
64
@@ -75,43 +69,28 @@ public boolean isDelayed() {
75
69
76
70
@ Override
77
71
public void compress (Buffer buffer ) {
78
- deflater .setNextIn (buffer .array ());
79
- deflater .setNextInIndex (buffer .rpos ());
80
- deflater .setAvailIn (buffer .available ());
72
+ deflater .setInput (buffer .array (), buffer .rpos (), buffer .available ());
81
73
buffer .wpos (buffer .rpos ());
82
74
do {
83
- deflater .setNextOut (tempBuf );
84
- deflater .setNextOutIndex (0 );
85
- deflater .setAvailOut (BUF_SIZE );
86
- final int status = deflater .deflate (JZlib .Z_PARTIAL_FLUSH );
87
- if (status == JZlib .Z_OK ) {
88
- buffer .putRawBytes (tempBuf , 0 , BUF_SIZE - deflater .getAvailOut ());
89
- } else {
90
- throw new SSHRuntimeException ("compress: deflate returned " + status );
91
- }
92
- } while (deflater .getAvailOut () == 0 );
75
+ final int len = deflater .deflate (tempBuf , 0 , BUF_SIZE , Deflater .SYNC_FLUSH );
76
+ buffer .putRawBytes (tempBuf , 0 , len );
77
+ } while (!deflater .needsInput ());
93
78
}
94
79
95
-
96
80
@ Override
97
81
public void uncompress (Buffer from , Buffer to )
98
82
throws TransportException {
99
- inflater .setNextIn (from .array ());
100
- inflater .setNextInIndex (from .rpos ());
101
- inflater .setAvailIn (from .available ());
83
+ inflater .setInput (from .array (), from .rpos (), from .available ());
102
84
while (true ) {
103
- inflater .setNextOut (tempBuf );
104
- inflater .setNextOutIndex (0 );
105
- inflater .setAvailOut (BUF_SIZE );
106
- final int status = inflater .inflate (JZlib .Z_PARTIAL_FLUSH );
107
- switch (status ) {
108
- case JZlib .Z_OK :
109
- to .putRawBytes (tempBuf , 0 , BUF_SIZE - inflater .getAvailOut ());
110
- break ;
111
- case JZlib .Z_BUF_ERROR :
85
+ try {
86
+ int len = inflater .inflate (tempBuf , 0 , BUF_SIZE );
87
+ if (len > 0 ) {
88
+ to .putRawBytes (tempBuf , 0 , len );
89
+ } else {
112
90
return ;
113
- default :
114
- throw new TransportException (DisconnectReason .COMPRESSION_ERROR , "uncompress: inflate returned " + status );
91
+ }
92
+ } catch (DataFormatException e ) {
93
+ throw new TransportException (DisconnectReason .COMPRESSION_ERROR , "uncompress: inflate returned " + e .getMessage ());
115
94
}
116
95
}
117
96
}
0 commit comments