Bug 1390708 - remove nsBinHexDecoder draft
authorShih-Chiang Chien <schien@mozilla.com>
Wed, 11 Oct 2017 11:58:28 +0800
changeset 678318 877d48902960d03b3b099c935646ddfefe16a680
parent 678317 38aa461eaac36be31ba7ae50b064789a83d3ccf7
child 735290 42e1c7650035b1e2bde8f2f6392b281416c1bcd1
push id83882
push userschien@mozilla.com
push dateWed, 11 Oct 2017 04:02:22 +0000
bugs1390708
milestone58.0a1
Bug 1390708 - remove nsBinHexDecoder MozReview-Commit-ID: 73NU592iRbX
netwerk/streamconv/converters/moz.build
netwerk/streamconv/converters/nsBinHexDecoder.cpp
netwerk/streamconv/converters/nsBinHexDecoder.h
--- a/netwerk/streamconv/converters/moz.build
+++ b/netwerk/streamconv/converters/moz.build
@@ -18,19 +18,14 @@ UNIFIED_SOURCES += [
     'nsHTTPCompressConv.cpp',
     'nsIndexedToHTML.cpp',
     'nsMultiMixedConv.cpp',
     'nsTXTToHTMLConv.cpp',
     'nsUnknownDecoder.cpp',
     'ParseFTPList.cpp',
 ]
 
-if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'cocoa':
-    UNIFIED_SOURCES += [
-        'nsBinHexDecoder.cpp',
-    ]
-
 FINAL_LIBRARY = 'xul'
 
 LOCAL_INCLUDES += [
     '/modules/brotli/dec',
     '/netwerk/base',
 ]
deleted file mode 100644
--- a/netwerk/streamconv/converters/nsBinHexDecoder.cpp
+++ /dev/null
@@ -1,520 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* 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/. */
-
-#include "nsIOService.h"
-#include "nsBinHexDecoder.h"
-#include "nsIServiceManager.h"
-#include "nsIStreamConverterService.h"
-#include "nsCRT.h"
-#include "nsIPipe.h"
-#include "nsMimeTypes.h"
-#include "netCore.h"
-#include "nsString.h"
-#include "prnetdb.h"
-#include "nsIURI.h"
-#include "nsIURL.h"
-
-#include "nsIMIMEService.h"
-#include "nsMimeTypes.h"
-#include <algorithm>
-
-namespace mozilla {
-namespace net {
-
-nsBinHexDecoder::nsBinHexDecoder() :
-  mState(0), mCRC(0), mFileCRC(0), mOctetin(26),
-  mDonePos(3), mInCRC(0), mCount(0), mMarker(0), mPosInbuff(0),
-  mPosOutputBuff(0)
-{
-  mDataBuffer = nullptr;
-  mOutgoingBuffer = nullptr;
-  mPosInDataBuffer = 0;
-  mRlebuf = 0;
-
-  mOctetBuf.val = 0;
-  mHeader.type = 0;
-  mHeader.creator = 0;
-  mHeader.flags = 0;
-  mHeader.dlen = 0;
-  mHeader.rlen = 0;
-}
-
-nsBinHexDecoder::~nsBinHexDecoder()
-{
-  if (mDataBuffer)
-    free(mDataBuffer);
-  if (mOutgoingBuffer)
-    free(mOutgoingBuffer);
-}
-
-NS_IMPL_ADDREF(nsBinHexDecoder)
-NS_IMPL_RELEASE(nsBinHexDecoder)
-
-NS_INTERFACE_MAP_BEGIN(nsBinHexDecoder)
-  NS_INTERFACE_MAP_ENTRY(nsIStreamConverter)
-  NS_INTERFACE_MAP_ENTRY(nsIStreamListener)
-  NS_INTERFACE_MAP_ENTRY(nsIRequestObserver)
-  NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-
-// The binhex 4.0 decoder table....
-
-static const signed char binhex_decode[256] =
-{
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1,
-  13, 14, 15, 16, 17, 18, 19, -1, 20, 21, -1, -1, -1, -1, -1, -1,
-  22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, -1,
-  37, 38, 39, 40, 41, 42, 43, -1, 44, 45, 46, 47, -1, -1, -1, -1,
-  48, 49, 50, 51, 52, 53, 54, -1, 55, 56, 57, 58, 59, 60, -1, -1,
-  61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
-#define BHEXVAL(c) (binhex_decode[(unsigned char) c])
-
-//////////////////////////////////////////////////////
-// nsIStreamConverter methods...
-//////////////////////////////////////////////////////
-
-NS_IMETHODIMP
-nsBinHexDecoder::Convert(nsIInputStream *aFromStream,
-                         const char *aFromType,
-                         const char *aToType,
-                         nsISupports *aCtxt,
-                         nsIInputStream **aResultStream)
-{
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-nsBinHexDecoder::AsyncConvertData(const char *aFromType,
-                                  const char *aToType,
-                                  nsIStreamListener *aListener,
-                                  nsISupports *aCtxt)
-{
-  NS_ASSERTION(aListener && aFromType && aToType,
-               "null pointer passed into bin hex converter");
-
-  // hook up our final listener. this guy gets the various On*() calls we want to throw
-  // at him.
-  //
-  mNextListener = aListener;
-  return (aListener) ? NS_OK : NS_ERROR_FAILURE;
-}
-
-//////////////////////////////////////////////////////
-// nsIStreamListener methods...
-//////////////////////////////////////////////////////
-NS_IMETHODIMP
-nsBinHexDecoder::OnDataAvailable(nsIRequest* request,
-                                 nsISupports *aCtxt,
-                                 nsIInputStream *aStream,
-                                 uint64_t aSourceOffset,
-                                 uint32_t aCount)
-{
-  nsresult rv = NS_OK;
-
-  if (mOutputStream && mDataBuffer && aCount > 0)
-  {
-    uint32_t numBytesRead = 0;
-    while (aCount > 0) // while we still have bytes to copy...
-    {
-      aStream->Read(mDataBuffer, std::min(aCount, nsIOService::gDefaultSegmentSize - 1), &numBytesRead);
-      if (aCount >= numBytesRead)
-        aCount -= numBytesRead; // subtract off the number of bytes we just read
-      else
-        aCount = 0;
-
-      // Process this new chunk of bin hex data...
-      ProcessNextChunk(request, aCtxt, numBytesRead);
-    }
-  }
-
-  return rv;
-}
-
-nsresult nsBinHexDecoder::ProcessNextState(nsIRequest * aRequest, nsISupports * aContext)
-{
-  nsresult status = NS_OK;
-  uint16_t tmpcrc, cval;
-  unsigned char ctmp, c = mRlebuf;
-
-  /* do CRC */
-  ctmp = mInCRC ? c : 0;
-  cval = mCRC & 0xf000;
-  tmpcrc = ((uint16_t) (mCRC << 4) | (ctmp >> 4)) ^ (cval | (cval >> 7) | (cval >> 12));
-  cval = tmpcrc & 0xf000;
-  mCRC = ((uint16_t) (tmpcrc << 4) | (ctmp & 0x0f)) ^ (cval | (cval >> 7) | (cval >> 12));
-
-  /* handle state */
-  switch (mState)
-  {
-    case BINHEX_STATE_START:
-      mState = BINHEX_STATE_FNAME;
-      mCount = 0;
-
-      // c & 63 returns the length of mName. So if we need the length, that's how
-      // you can figure it out....
-      mName.SetLength(c & 63);
-      if (mName.Length() != (c & 63)) {
-        /* XXX ProcessNextState/ProcessNextChunk aren't rv checked */
-        mState = BINHEX_STATE_DONE;
-      }
-      break;
-
-    case BINHEX_STATE_FNAME:
-      if (mCount < mName.Length()) {
-        mName.BeginWriting()[mCount] = c;
-      }
-
-      if (++mCount > mName.Length())
-      {
-        // okay we've figured out the file name....set the content type on the channel
-        // based on the file name AND issue our delayed on start request....
-
-        DetectContentType(aRequest, mName);
-        // now propagate the on start request
-        mNextListener->OnStartRequest(aRequest, aContext);
-
-        mState = BINHEX_STATE_HEADER;
-        mCount = 0;
-      }
-      break;
-
-    case BINHEX_STATE_HEADER:
-      ((char *) &mHeader)[mCount] = c;
-      if (++mCount == 18)
-      {
-        if (sizeof(binhex_header) != 18)  /* fix an alignment problem in some OSes */
-        {
-          char *p = (char *)&mHeader;
-          p += 19;
-          for (c = 0; c < 8; c++)
-          {
-            *p = *(p-2);
-            --p;
-          }
-        }
-
-        mState = BINHEX_STATE_HCRC;
-        mInCRC = 1;
-        mCount = 0;
-      }
-      break;
-
-    case BINHEX_STATE_DFORK:
-    case BINHEX_STATE_RFORK:
-      mOutgoingBuffer[mPosOutputBuff++] = c;
-      if (--mCount == 0)
-      {
-        /* only output data fork in the non-mac system.      */
-        if (mState == BINHEX_STATE_DFORK)
-        {
-          uint32_t numBytesWritten = 0;
-          mOutputStream->Write(mOutgoingBuffer, mPosOutputBuff, &numBytesWritten);
-          if (int32_t(numBytesWritten) != mPosOutputBuff)
-            status = NS_ERROR_FAILURE;
-
-          // now propagate the data we just wrote
-          mNextListener->OnDataAvailable(aRequest, aContext, mInputStream, 0, numBytesWritten);
-        }
-        else
-          status = NS_OK;        /* do nothing for resource fork.  */
-
-        mPosOutputBuff = 0;
-
-        if (status != NS_OK)
-          mState = BINHEX_STATE_DONE;
-        else
-          ++mState;
-
-        mInCRC = 1;
-      }
-      else if (mPosOutputBuff >= (int32_t) nsIOService::gDefaultSegmentSize)
-      {
-        if (mState == BINHEX_STATE_DFORK)
-        {
-          uint32_t numBytesWritten = 0;
-          mOutputStream->Write(mOutgoingBuffer, mPosOutputBuff, &numBytesWritten);
-          if (int32_t(numBytesWritten) != mPosOutputBuff)
-            status = NS_ERROR_FAILURE;
-
-          mNextListener->OnDataAvailable(aRequest, aContext, mInputStream, 0, numBytesWritten);
-          mPosOutputBuff = 0;
-        }
-      }
-      break;
-
-    case BINHEX_STATE_HCRC:
-    case BINHEX_STATE_DCRC:
-    case BINHEX_STATE_RCRC:
-      if (!mCount++)
-        mFileCRC = (unsigned short) c << 8;
-      else
-      {
-        if ((mFileCRC | c) != mCRC)
-        {
-          mState = BINHEX_STATE_DONE;
-          break;
-        }
-
-        /* passed the CRC check!!!*/
-        mCRC = 0;
-        if (++mState == BINHEX_STATE_FINISH)
-        {
-          // when we reach the finished state...fire an on stop request on the event listener...
-          mNextListener->OnStopRequest(aRequest, aContext, NS_OK);
-          mNextListener = nullptr;
-
-          /*   now We are done with everything.  */
-          ++mState;
-          break;
-        }
-
-        if (mState == BINHEX_STATE_DFORK)
-          mCount = PR_ntohl(mHeader.dlen);
-        else
-        {
-          // we aren't processing the resurce Fork. uncomment this line if we make this converter
-          // smart enough to do this in the future.
-          // mCount = PR_ntohl(mHeader.rlen);  /* it should in host byte order */
-          mCount = 0;
-        }
-
-        if (mCount) {
-          mInCRC = 0;
-        } else {
-          /* nothing inside, so skip to the next state. */
-          ++mState;
-        }
-      }
-      break;
-  }
-
-  return NS_OK;
-}
-
-nsresult nsBinHexDecoder::ProcessNextChunk(nsIRequest * aRequest, nsISupports * aContext, uint32_t numBytesInBuffer)
-{
-  bool foundStart;
-  int16_t octetpos, c = 0;
-  uint32_t val;
-  mPosInDataBuffer = 0; // use member variable.
-
-  NS_ENSURE_TRUE(numBytesInBuffer > 0, NS_ERROR_FAILURE);
-
-  //  if it is the first time, seek to the right start place.
-  if (mState == BINHEX_STATE_START)
-  {
-    foundStart = false;
-    // go through the line, until we get a ':'
-    while (mPosInDataBuffer < numBytesInBuffer)
-    {
-      c = mDataBuffer[mPosInDataBuffer++];
-      while (c == nsCRT::CR || c == nsCRT::LF)
-      {
-        if (mPosInDataBuffer >= numBytesInBuffer)
-          break;
-
-        c = mDataBuffer[mPosInDataBuffer++];
-        if (c == ':')
-        {
-          foundStart = true;
-          break;
-        }
-      }
-      if (foundStart)  break;    /* we got the start point. */
-    }
-
-    if (mPosInDataBuffer >= numBytesInBuffer)
-      return NS_OK;      /* we meet buff end before we get the start point, wait till next fills. */
-
-    if (c != ':')
-      return NS_ERROR_FAILURE;    /* can't find the start character.  */
-  }
-
-  while (mState != BINHEX_STATE_DONE)
-  {
-    /* fill in octetbuf */
-    do
-    {
-      if (mPosInDataBuffer >= numBytesInBuffer)
-        return NS_OK;      /* end of buff, go on for the nxet calls. */
-
-      c = GetNextChar(numBytesInBuffer);
-      if (c == 0)  return NS_OK;
-
-      if ((val = BHEXVAL(c)) == uint32_t(-1))
-      {
-        /* we incount an invalid character.  */
-        if (c)
-        {
-          /* rolling back. */
-          --mDonePos;
-          if (mOctetin >= 14)
-            --mDonePos;
-          if (mOctetin >= 20)
-            --mDonePos;
-        }
-        break;
-      }
-      mOctetBuf.val |= val << mOctetin;
-    }
-    while ((mOctetin -= 6) > 2);
-
-    /* handle decoded characters -- run length encoding (rle) detection */
-
-    // We put decoded chars into mOctetBuf.val in order from high to low (via
-    // bitshifting, above).  But we want to byte-address them, so we want the
-    // first byte to correspond to the high byte.  In other words, we want
-    // these bytes to be in network order.
-    mOctetBuf.val = PR_htonl(mOctetBuf.val);
-
-    for (octetpos = 0; octetpos < mDonePos; ++octetpos)
-    {
-      c = mOctetBuf.c[octetpos];
-
-      if (c == 0x90 && !mMarker++)
-        continue;
-
-      if (mMarker)
-      {
-        if (c == 0)
-        {
-          mRlebuf = 0x90;
-          ProcessNextState(aRequest, aContext);
-        }
-        else
-        {
-          /* we are in the run length mode */
-          while (--c > 0)
-            ProcessNextState(aRequest, aContext);
-        }
-        mMarker = 0;
-      }
-      else
-      {
-        mRlebuf = (unsigned char) c;
-        ProcessNextState(aRequest, aContext);
-      }
-
-      if (mState >= BINHEX_STATE_DONE)
-        break;
-    }
-
-    /* prepare for next 3 characters.  */
-    if (mDonePos < 3 && mState < BINHEX_STATE_DONE)
-      mState = BINHEX_STATE_DONE;
-
-    mOctetin = 26;
-    mOctetBuf.val = 0;
-  }
-
-  return   NS_OK;
-}
-
-int16_t nsBinHexDecoder::GetNextChar(uint32_t numBytesInBuffer)
-{
-  char c = 0;
-
-  while (mPosInDataBuffer < numBytesInBuffer)
-  {
-    c = mDataBuffer[mPosInDataBuffer++];
-    if (c != nsCRT::LF && c != nsCRT::CR)
-      break;
-  }
-  return (c == nsCRT::LF || c == nsCRT::CR) ? 0 : (int) c;
-}
-
-//////////////////////////////////////////////////////
-// nsIRequestObserver methods...
-//////////////////////////////////////////////////////
-
-NS_IMETHODIMP
-nsBinHexDecoder::OnStartRequest(nsIRequest* request, nsISupports *aCtxt)
-{
-  nsresult rv = NS_OK;
-
-  NS_ENSURE_TRUE(mNextListener, NS_ERROR_FAILURE);
-
-  mDataBuffer = (char *) malloc((sizeof(char) * nsIOService::gDefaultSegmentSize));
-  mOutgoingBuffer = (char *) malloc((sizeof(char) * nsIOService::gDefaultSegmentSize));
-  if (!mDataBuffer || !mOutgoingBuffer) return NS_ERROR_FAILURE; // out of memory;
-
-  // now we want to create a pipe which we'll use to write our converted data...
-  rv = NS_NewPipe(getter_AddRefs(mInputStream), getter_AddRefs(mOutputStream),
-                  nsIOService::gDefaultSegmentSize,
-                  nsIOService::gDefaultSegmentSize,
-                  true, true);
-
-  // don't propagate the on start request to mNextListener until we have determined the content type.
-  return rv;
-}
-
-// Given the fileName we discovered inside the bin hex decoding, figure out the
-// content type and set it on the channel associated with the request.  If the
-// filename tells us nothing useful, just report an unknown type and let the
-// unknown decoder handle things.
-nsresult nsBinHexDecoder::DetectContentType(nsIRequest* aRequest,
-                                            const nsCString& aFilename)
-{
-  if (aFilename.IsEmpty()) {
-    // Nothing to do here.
-    return NS_OK;
-  }
-
-  nsresult rv;
-  nsCOMPtr<nsIChannel> channel(do_QueryInterface(aRequest, &rv));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nsCOMPtr<nsIMIMEService> mimeService(do_GetService("@mozilla.org/mime;1", &rv));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nsAutoCString contentType;
-
-  // extract the extension from aFilename and look it up.
-  const char * fileExt = strrchr(aFilename.get(), '.');
-  if (!fileExt) {
-    return NS_OK;
-  }
-
-  mimeService->GetTypeFromExtension(nsDependentCString(fileExt), contentType);
-
-  // Only set the type if it's not empty and, to prevent recursive loops, not the binhex type
-  if (!contentType.IsEmpty() &&
-      !contentType.EqualsLiteral(APPLICATION_BINHEX)) {
-    channel->SetContentType(contentType);
-  } else {
-    channel->SetContentType(NS_LITERAL_CSTRING(UNKNOWN_CONTENT_TYPE));
-  }
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-nsBinHexDecoder::OnStopRequest(nsIRequest* request, nsISupports *aCtxt,
-                                nsresult aStatus)
-{
-  nsresult rv = NS_OK;
-
-  if (!mNextListener) return NS_ERROR_FAILURE;
-  // don't do anything here...we'll fire our own on stop request when we are done
-  // processing the data....
-
-  return rv;
-}
-
-} // namespace net
-} // namespace mozilla
deleted file mode 100644
--- a/netwerk/streamconv/converters/nsBinHexDecoder.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* 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/. */
-
-// A decoder for Mac Bin Hex 4.0.
-
-// This decoder is currently only intended to be used on NON-Mac platforms. It isn't hooked up to
-// code which would actually save the file to disk. As a result, we can't leverage the resource fork.
-// This makes this decoder most unhelpful for the Mac. Our assumption is that if you save a bin hex file
-// on the mac and try to open it, stuffit or some other tool is already going to be on the Mac which knows how
-// to handle bin hex. On windows and unix, that's not the case. We need client code to strip out the data fork.
-// So this decoder currently just strips out the data fork.
-
-// Note: it's possible that we can eventually turn this decoder into both a decoder and into a file stream (much
-// like the apple double decoder) so on the Mac, if we are saving to disk, we can invoke the decoder as a file stream
-// and it will process the resource fork and do the right magic.
-
-#ifndef nsBinHexDecoder_h__
-#define nsBinHexDecoder_h__
-
-#include "nsIStreamConverter.h"
-#include "nsIChannel.h"
-#include "nsIOutputStream.h"
-#include "nsIInputStream.h"
-
-#include "nsCOMPtr.h"
-#include "nsString.h"
-
-#define NS_BINHEXDECODER_CID                         \
-{ /* 301DEA42-6850-4cda-8945-81F7DBC2186B */         \
-  0x301dea42, 0x6850, 0x4cda,                        \
-  { 0x89, 0x45, 0x81, 0xf7, 0xdb, 0xc2, 0x18, 0x6b } \
-}
-
-namespace mozilla {
-namespace net {
-
-typedef struct _binhex_header
-{
-  uint32_t type, creator;
-  uint16_t flags;
-  int32_t dlen, rlen;
-} binhex_header;
-
-typedef union
-{
-  unsigned char c[4];
-  uint32_t      val;
-} longbuf;
-
-#define BINHEX_STATE_START    0
-#define BINHEX_STATE_FNAME    1
-#define BINHEX_STATE_HEADER   2
-#define BINHEX_STATE_HCRC     3
-#define BINHEX_STATE_DFORK    4
-#define BINHEX_STATE_DCRC     5
-#define BINHEX_STATE_RFORK    6
-#define BINHEX_STATE_RCRC     7
-#define BINHEX_STATE_FINISH   8
-#define BINHEX_STATE_DONE     9
-/* #define BINHEX_STATE_ERROR  10 */
-
-class nsBinHexDecoder : public nsIStreamConverter
-{
-public:
-  // nsISupports methods
-  NS_DECL_ISUPPORTS
-
-  // nsIStreamConverter methods
-  NS_DECL_NSISTREAMCONVERTER
-
-  // nsIStreamListener methods
-  NS_DECL_NSISTREAMLISTENER
-
-  // nsIRequestObserver methods
-  NS_DECL_NSIREQUESTOBSERVER
-
-  nsBinHexDecoder();
-
-protected:
-  virtual ~nsBinHexDecoder();
-
-  int16_t  GetNextChar(uint32_t numBytesInBuffer);
-  nsresult ProcessNextChunk(nsIRequest * aRequest, nsISupports * aContext, uint32_t numBytesInBuffer);
-  nsresult ProcessNextState(nsIRequest * aRequest, nsISupports * aContext);
-  nsresult DetectContentType(nsIRequest * aRequest, const nsCString& aFilename);
-
-protected:
-  nsCOMPtr<nsIStreamListener> mNextListener;
-
-  // the input and output streams form a pipe...they need to be passed around together..
-  nsCOMPtr<nsIOutputStream>     mOutputStream;     // output stream
-  nsCOMPtr<nsIInputStream>      mInputStream;
-
-  int16_t   mState;      /* current state */
-  uint16_t  mCRC;        /* cumulative CRC */
-  uint16_t  mFileCRC;    /* CRC value from file */
-  longbuf   mOctetBuf;   /* buffer for decoded 6-bit values     */
-  int16_t   mOctetin;    /* current input position in octetbuf */
-  int16_t   mDonePos;    /* ending position in octetbuf */
-  int16_t   mInCRC;      /* flag set when reading a CRC */
-
-  // Bin Hex Header Information
-  binhex_header mHeader;
-  nsCString mName;       /* fsspec for the output file */
-
-  // unfortunately we are going to need 2 8K buffers here. One for the data we are currently digesting. Another
-  // for the outgoing decoded data. I tried getting them to share a buffer but things didn't work out so nicely.
-  char * mDataBuffer; // temporary holding pen for the incoming data.
-  char * mOutgoingBuffer; // temporary holding pen for the incoming data.
-  uint32_t mPosInDataBuffer;
-
-  unsigned char mRlebuf;  /* buffer for last run length encoding value */
-
-  uint32_t mCount;        /* generic counter */
-  int16_t mMarker;        /* flag indicating maker */
-
-  int32_t mPosInbuff;     /* the index of the inbuff.  */
-  int32_t mPosOutputBuff; /* the position of the out buff.    */
-};
-
-} // namespace net
-} // namespace mozilla
-
-#endif /* nsBinHexDecoder_h__ */