private OutputStream doCompress(OutputStream uncompressed, bool compress) { if(_compressionSupported) { if(compress && uncompressed.size() >= 100) { // // Do compression. // IceInternal.Buffer cbuf = IceInternal.BZip2.compress(uncompressed.getBuffer(), IceInternal.Protocol.headerSize, _compressionLevel); if(cbuf != null) { OutputStream cstream = new OutputStream(uncompressed.instance(), uncompressed.getEncoding(), cbuf, true); // // Set compression status. // cstream.pos(9); cstream.writeByte((byte)2); // // Write the size of the compressed stream into the header. // cstream.pos(10); cstream.writeInt(cstream.size()); // // Write the compression status and size of the compressed stream into the header of the // uncompressed stream -- we need this to trace requests correctly. // uncompressed.pos(9); uncompressed.writeByte((byte)2); uncompressed.writeInt(cstream.size()); return cstream; } } } uncompressed.pos(9); uncompressed.writeByte((byte)((_compressionSupported && compress) ? 1 : 0)); // // Not compressed, fill in the message size. // uncompressed.pos(10); uncompressed.writeInt(uncompressed.size()); return uncompressed; }