// GzipStreamRequest.cs
// Copyright (C) 2001 Mike Krueger
// comments are taken from CVS Client/Server reference manual which
// comes with the cvs client (www.cvshome.org)
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// As a special exception, if you link this library with other files to
// produce an executable, this library does not by itself cause the
// resulting executable to be covered by the GNU General Public License.
// This exception does not however invalidate any other reasons why the
// executable file might be covered by the GNU General Public License.
using NZlib.Streams;
namespace CVS.Requests{
/// <summary>
/// Response expected: no.
/// Use zlib (RFC 1950/1951) compression to compress all further communication between
/// the client and the server. After this request is sent, all further communication must
/// be compressed. All further data received from the server will also be compressed.
/// The level argument suggests to the server the level of compression that it should apply;
/// it should be an integer between 1 and 9, inclusive, where a higher number indicates more compression.
/// </summary>
public class GzipStreamRequest : AbstractRequest
{
int level;
public GzipStreamRequest() : this(9)
{
}
public GzipStreamRequest(int level)
{
this.level = level;
}
public override string RequestString {
get {
return "Gzip-stream " + level + "\n";
}
}
public override bool IsResponseExpected {
get {
return false;
}
}
public override bool DoesModifyConnection {
get {
return true;
}
}
public override void ModifyConnection(IConnection connection)
{
connection.OutputStream.BaseStream = new DeflaterOutputStream(connection.OutputStream.BaseStream);
connection.InputStream.BaseStream = new InflaterInputStream(connection.InputStream.BaseStream);
}
}
}
|