Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  nsHTTPCompressConv.h   Sprache: C

 

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#if !defined(_nsHTTPCompressConv_h_)
#  define _nsHTTPCompressConv_h_ 1

#  include "nsIStreamConverter.h"
#  include "nsICompressConvStats.h"
#  include "nsIThreadRetargetableStreamListener.h"
#  include "nsCOMPtr.h"
#  include "nsString.h"
#  include "mozilla/Atomics.h"
#  include "mozilla/Mutex.h"

#  include "zlib.h"

class nsIStringInputStream;

#  define NS_HTTPCOMPRESSCONVERTER_CID          \
    {/* 66230b2b-17fa-4bd3-abf4-07986151022d */ \
     0x66230b2b,                                \
     0x17fa,                                    \
     0x4bd3,                                    \
     {0xab, 0xf4, 0x07, 0x98, 0x61, 0x51, 0x02, 0x2d}}

#  define HTTP_DEFLATE_TYPE "deflate"
#  define HTTP_GZIP_TYPE "gzip"
#  define HTTP_X_GZIP_TYPE "x-gzip"
#  define HTTP_COMPRESS_TYPE "compress"
#  define HTTP_X_COMPRESS_TYPE "x-compress"
#  define HTTP_BROTLI_TYPE "br"
#  define HTTP_IDENTITY_TYPE "identity"
#  define HTTP_UNCOMPRESSED_TYPE "uncompressed"
#  define HTTP_ZSTD_TYPE "zstd"
#  define HTTP_ZST_TYPE "zst"
#  define HTTP_BROTLI_DICTIONARY_TYPE "dcb"
#  define HTTP_ZSTD_DICTIONARY_TYPE "dcz"

#  define GZIP_MAGIC_0 0x1f
#  define GZIP_MAGIC_1 0x8b

#  define ZSTD_MAGIC_0 0x28
#  define ZSTD_MAGIC_1 0xb5
#  define ZSTD_MAGIC_2 0x2f
#  define ZSTD_MAGIC_3 0xfd

// Not magic bytes, but common brotli first bytes
#  define BROTLI_BYTE_0 0xce
#  define BROTLI_BYTE_1 0xb2

namespace mozilla {
namespace net {

class BrotliWrapper;
class ZstdWrapper;

class nsHTTPCompressConv : public nsIStreamConverter,
                           public nsICompressConvStats {
 public:
  // nsISupports methods
  NS_DECL_THREADSAFE_ISUPPORTS
  NS_DECL_NSIREQUESTOBSERVER
  NS_DECL_NSISTREAMLISTENER
  NS_DECL_NSICOMPRESSCONVSTATS
  NS_DECL_NSITHREADRETARGETABLESTREAMLISTENER

  // nsIStreamConverter methods
  NS_DECL_NSISTREAMCONVERTER

  nsHTTPCompressConv();

  using CompressMode = enum {
    HTTP_COMPRESS_GZIP,
    HTTP_COMPRESS_DEFLATE,
    HTTP_COMPRESS_COMPRESS,
    HTTP_COMPRESS_BROTLI,
    HTTP_COMPRESS_IDENTITY,
    HTTP_COMPRESS_ZSTD,
    HTTP_COMPRESS_BROTLI_DICTIONARY,
    HTTP_COMPRESS_ZSTD_DICTIONARY,
  };

 private:
  virtual ~nsHTTPCompressConv();

  nsCOMPtr<nsIStreamListener> mListener
      MOZ_GUARDED_BY(mMutex);  // gets converted data via OnDataAvailable()
  Atomic<CompressMode, Relaxed> mMode{HTTP_COMPRESS_IDENTITY};

  unsigned char* mOutBuffer{nullptr};
  unsigned char* mInpBuffer{nullptr};

  uint32_t mOutBufferLen{0};
  uint32_t mInpBufferLen{0};

  UniquePtr<BrotliWrapper> mBrotli;
  UniquePtr<ZstdWrapper> mZstd;

  nsCOMPtr<nsIStringInputStream> mStream;

  static nsresult BrotliHandler(nsIInputStream* stream, void* closure,
                                const char* dataIn, uint32_t, uint32_t avail,
                                uint32_t* countRead);

  static nsresult ZstdHandler(nsIInputStream* stream, void* closure,
                              const char* dataIn, uint32_t, uint32_t avail,
                              uint32_t* countRead);

  nsresult do_OnDataAvailable(nsIRequest* request, uint64_t aSourceOffset,
                              const char* buffer, uint32_t aCount);

  bool mCheckHeaderDone{false};
  Atomic<bool> mStreamEnded{false};
  bool mStreamInitialized{false};
  bool mDummyStreamInitialised{false};
  bool mFailUncleanStops;
  Atomic<bool> mDispatchToMainThread{false};

  z_stream d_stream{};
  unsigned mLen{0}, hMode{0}, mSkipCount{0}, mFlags{0};

  uint32_t check_header(nsIInputStream* iStr, uint32_t streamLen, nsresult* rs);

  void ReportDecodingErrorWithSite(const nsACString& aLabel);
  Atomic<uint32_t, Relaxed> mDecodedDataLength{0};

  // Cached on main thread in OnStartRequest; read from any thread thereafter.
  Atomic<bool, Relaxed> mIsPrivateBrowsing{false};
  nsCString mSite;

  mutable mozilla::Mutex mMutex{"nsHTTPCompressConv"};
};

}  // namespace net
}  // namespace mozilla

#endif

Messung V0.5 in Prozent
C=94 H=100 G=96

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-09-27) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126864
#Domains=1897691