Back to index

lightning-sunbird  0.9+nobinonly
nsHTTPCompressConv.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is mozilla.org code.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corporation.
00019  * Portions created by the Initial Developer are Copyright (C) 1998
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s):
00023  *   David Dick <ddick@cpan.org>
00024  *
00025  * Alternatively, the contents of this file may be used under the terms of
00026  * either the GNU General Public License Version 2 or later (the "GPL"), or
00027  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00028  * in which case the provisions of the GPL or the LGPL are applicable instead
00029  * of those above. If you wish to allow use of your version of this file only
00030  * under the terms of either the GPL or the LGPL, and not to allow others to
00031  * use your version of this file under the terms of the MPL, indicate your
00032  * decision by deleting the provisions above and replace them with the notice
00033  * and other provisions required by the GPL or the LGPL. If you do not delete
00034  * the provisions above, a recipient may use your version of this file under
00035  * the terms of any one of the MPL, the GPL or the LGPL.
00036  *
00037  * ***** END LICENSE BLOCK ***** */
00038 
00039 #if !defined (__nsHTTPCompressConv__h__)
00040 #define       __nsHTTPCompressConv__h__   1
00041 
00042 #include "nsIStreamConverter.h"
00043 #include "nsIFactory.h"
00044 #include "nsCOMPtr.h"
00045 
00046 #include "zlib.h"
00047 
00048 #define NS_HTTPCOMPRESSCONVERTER_CID                \
00049 {                                                   \
00050     /* 66230b2b-17fa-4bd3-abf4-07986151022d */      \
00051     0x66230b2b,                                     \
00052     0x17fa,                                         \
00053     0x4bd3,                                         \
00054     {0xab, 0xf4, 0x07, 0x98, 0x61, 0x51, 0x02, 0x2d}\
00055 }
00056 
00057 
00058 #define       HTTP_DEFLATE_TYPE           "deflate"
00059 #define       HTTP_GZIP_TYPE               "gzip"
00060 #define       HTTP_X_GZIP_TYPE         "x-gzip"
00061 #define       HTTP_COMPRESS_TYPE       "compress"
00062 #define       HTTP_X_COMPRESS_TYPE "x-compress"
00063 #define       HTTP_IDENTITY_TYPE       "identity"
00064 #define       HTTP_UNCOMPRESSED_TYPE      "uncompressed"
00065 
00066 typedef enum    {
00067         HTTP_COMPRESS_GZIP,
00068         HTTP_COMPRESS_DEFLATE,
00069         HTTP_COMPRESS_COMPRESS,
00070         HTTP_COMPRESS_IDENTITY
00071     }   CompressMode;
00072 
00073 class nsHTTPCompressConv    : public nsIStreamConverter {
00074 public:
00075     // nsISupports methods
00076     NS_DECL_ISUPPORTS
00077 
00078        NS_DECL_NSIREQUESTOBSERVER
00079     NS_DECL_NSISTREAMLISTENER
00080 
00081     // nsIStreamConverter methods
00082     NS_DECL_NSISTREAMCONVERTER
00083 
00084 
00085     nsHTTPCompressConv ();
00086     virtual ~nsHTTPCompressConv ();
00087 
00088 private:
00089 
00090     nsIStreamListener   *mListener; // this guy gets the converted data via his OnDataAvailable ()
00091        CompressMode        mMode;
00092 
00093     unsigned char *mOutBuffer;
00094     unsigned char *mInpBuffer;
00095 
00096     PRUint32  mOutBufferLen;
00097     PRUint32  mInpBufferLen;
00098        
00099     nsCOMPtr<nsISupports>   mAsyncConvContext;
00100 
00101     nsresult do_OnDataAvailable (nsIRequest *request, nsISupports *aContext, PRUint32 aSourceOffset, char *buffer, PRUint32 aCount);
00102 
00103     PRBool      mCheckHeaderDone;
00104     PRBool      mStreamEnded;
00105     PRBool      mStreamInitialized;
00106     PRBool      mDummyStreamInitialised;
00107 
00108     z_stream d_stream;
00109     unsigned mLen, hMode, mSkipCount, mFlags;
00110 
00111     PRUint32 check_header (nsIInputStream *iStr, PRUint32 streamLen, nsresult *rv);
00112 };
00113 
00114 
00115 #endif