mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-08 04:27:37 +00:00
195 lines
4.5 KiB
C
195 lines
4.5 KiB
C
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||
|
*
|
||
|
* The contents of this file are subject to the Netscape Public License
|
||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||
|
* http://www.mozilla.org/NPL/
|
||
|
*
|
||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||
|
* for the specific language governing rights and limitations under the
|
||
|
* NPL.
|
||
|
*
|
||
|
* The Initial Developer of this code under the NPL is Netscape
|
||
|
* Communications Corporation. Portions created by Netscape are
|
||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||
|
* Reserved.
|
||
|
*/
|
||
|
|
||
|
#ifndef net_strm_h___
|
||
|
#define net_strm_h___
|
||
|
|
||
|
#include "nspr.h"
|
||
|
#include "nsIURL.h"
|
||
|
#include "nsIInputStream.h"
|
||
|
#include "nsIOutputStream.h"
|
||
|
#include "nsIStreamListener.h"
|
||
|
|
||
|
|
||
|
/* Forward declaration... */
|
||
|
class nsNetlibStream;
|
||
|
|
||
|
class nsConnectionInfo : public nsISupports
|
||
|
{
|
||
|
public:
|
||
|
NS_DECL_ISUPPORTS
|
||
|
|
||
|
nsConnectionInfo(nsIURL *aURL,
|
||
|
nsNetlibStream *aStream,
|
||
|
nsIStreamListener *aNotify);
|
||
|
|
||
|
protected:
|
||
|
virtual ~nsConnectionInfo();
|
||
|
|
||
|
public:
|
||
|
nsIURL *pURL;
|
||
|
nsNetlibStream *pNetStream;
|
||
|
nsIStreamListener *pConsumer;
|
||
|
};
|
||
|
|
||
|
|
||
|
class nsNetlibStream : public nsIInputStream,
|
||
|
public nsIOutputStream
|
||
|
{
|
||
|
public:
|
||
|
NS_DECL_ISUPPORTS
|
||
|
|
||
|
nsNetlibStream(void);
|
||
|
|
||
|
virtual PRInt32 GetAvailableSpace(PRInt32 *aErrorCode) = 0;
|
||
|
|
||
|
/* From nsIBaseStream interface */
|
||
|
virtual void Close(void);
|
||
|
|
||
|
protected:
|
||
|
virtual ~nsNetlibStream();
|
||
|
|
||
|
inline void LockStream (void) { if (m_Lock) PR_EnterMonitor(m_Lock); }
|
||
|
inline void UnlockStream(void) { if (m_Lock) PR_ExitMonitor (m_Lock); }
|
||
|
|
||
|
protected:
|
||
|
PRBool m_bIsClosed;
|
||
|
|
||
|
private:
|
||
|
PRMonitor *m_Lock;
|
||
|
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* Variable size, buffered stream...
|
||
|
*/
|
||
|
class nsBufferedStream : public nsNetlibStream {
|
||
|
|
||
|
public:
|
||
|
nsBufferedStream(void);
|
||
|
|
||
|
virtual PRInt32 GetAvailableSpace(PRInt32 *aErrorCode);
|
||
|
|
||
|
/* From nsIBaseStream interface */
|
||
|
virtual PRInt32 GetLength(void);
|
||
|
|
||
|
/* nsIInputStream interface */
|
||
|
virtual PRInt32 Read(PRInt32 *aErrorCode,
|
||
|
char *aBuf,
|
||
|
PRInt32 aOffset,
|
||
|
PRInt32 aCount);
|
||
|
|
||
|
/* nsIOutputStream interface */
|
||
|
virtual PRInt32 Write(PRInt32 *aErrorCode,
|
||
|
const char *aBuf,
|
||
|
PRInt32 aOffset,
|
||
|
PRInt32 aLen);
|
||
|
|
||
|
protected:
|
||
|
virtual ~nsBufferedStream();
|
||
|
|
||
|
private:
|
||
|
char *m_Buffer;
|
||
|
PRInt32 m_BufferLength;
|
||
|
|
||
|
PRInt32 m_DataLength;
|
||
|
PRInt32 m_ReadOffset;
|
||
|
PRInt32 m_WriteOffset;
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Fixed size stream...
|
||
|
*/
|
||
|
|
||
|
class nsAsyncStream : public nsNetlibStream {
|
||
|
|
||
|
public:
|
||
|
nsAsyncStream(PRInt32 buffer_size);
|
||
|
|
||
|
virtual PRInt32 GetAvailableSpace(PRInt32 *aErrorCode);
|
||
|
|
||
|
/* From nsIBaseStream interface */
|
||
|
virtual PRInt32 GetLength(void);
|
||
|
|
||
|
/* nsIInputStream interface */
|
||
|
virtual PRInt32 Read(PRInt32 *aErrorCode,
|
||
|
char *aBuf,
|
||
|
PRInt32 aOffset,
|
||
|
PRInt32 aCount);
|
||
|
|
||
|
/* nsIOutputStream interface */
|
||
|
virtual PRInt32 Write(PRInt32 *aErrorCode,
|
||
|
const char *aBuf,
|
||
|
PRInt32 aOffset,
|
||
|
PRInt32 aLen);
|
||
|
|
||
|
protected:
|
||
|
virtual ~nsAsyncStream();
|
||
|
|
||
|
private:
|
||
|
char *m_Buffer;
|
||
|
PRInt32 m_BufferLength;
|
||
|
|
||
|
PRInt32 m_DataLength;
|
||
|
PRInt32 m_ReadOffset;
|
||
|
PRInt32 m_WriteOffset;
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Fixed size, blocking stream...
|
||
|
*/
|
||
|
class nsBlockingStream : public nsNetlibStream {
|
||
|
|
||
|
public:
|
||
|
nsBlockingStream(void);
|
||
|
|
||
|
virtual PRInt32 GetAvailableSpace(PRInt32 *aErrorCode);
|
||
|
|
||
|
/* From nsIBaseStream interface */
|
||
|
virtual PRInt32 GetLength(void);
|
||
|
|
||
|
/* nsIInputStream interface */
|
||
|
virtual PRInt32 Read(PRInt32 *aErrorCode,
|
||
|
char *aBuf,
|
||
|
PRInt32 aOffset,
|
||
|
PRInt32 aCount);
|
||
|
|
||
|
/* nsIOutputStream interface */
|
||
|
virtual PRInt32 Write(PRInt32 *aErrorCode,
|
||
|
const char *aBuf,
|
||
|
PRInt32 aOffset,
|
||
|
PRInt32 aLen);
|
||
|
|
||
|
protected:
|
||
|
virtual ~nsBlockingStream();
|
||
|
|
||
|
PRInt32 ReadBuffer(char *aBuf, PRInt32 aCount);
|
||
|
|
||
|
private:
|
||
|
char *m_Buffer;
|
||
|
PRInt32 m_BufferLength;
|
||
|
|
||
|
PRInt32 m_DataLength;
|
||
|
PRInt32 m_ReadOffset;
|
||
|
PRInt32 m_WriteOffset;
|
||
|
};
|
||
|
|
||
|
#endif /* net_strm_h___ */
|