/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: NPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Netscape Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the NPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the NPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsIInputStream.idl" #include "nsIOutputStream.idl" #include "nsISeekableStream.idl" interface nsIFile; /** * An input stream that allows you to read from a file. */ [scriptable, uuid(e3d56a20-c7ec-11d3-8cda-0060b0fc14a3)] interface nsIFileInputStream : nsIInputStream { /** * @param file file to read from (must QI to nsILocalFile) * @param ioFlags file open flags listed in prio.h * @param perm file mode bits listed in prio.h * @param behaviorFlags flags specifying various behaviors of the class * (see enumerations in the class) */ void init(in nsIFile file, in long ioFlags, in long perm, in long behaviorFlags); /** * If this is set, the file will be deleted by the time the stream is * closed. It may be removed before the stream is closed if it is possible * to delete it and still read from it. * * If OPEN_ON_READ is defined, and the file was recreated after the first * delete, the file will be deleted again when it is closed again. */ const long DELETE_ON_CLOSE = 1<<1; /** * If this is set, the file will close automatically when the end of the * file is reached. */ const long CLOSE_ON_EOF = 1<<2; /** * If this is set, the file will be reopened whenever Seek(0) occurs. If * the file is already open and the seek occurs, it will happen naturally. * (The file will only be reopened if it is closed for some reason.) */ const long REOPEN_ON_REWIND = 1<<3; }; /** * An output stream that lets you stream to a file. */ [scriptable, uuid(e6f68040-c7ec-11d3-8cda-0060b0fc14a3)] interface nsIFileOutputStream : nsIOutputStream { /** * @param file - file to write to (must QI to nsILocalFile) * @param ioFlags - file open flags listed in prio.h * @param perm - file mode bits listed in prio.h * @param behaviorFlags flags specifying various behaviors of the class * (currently none supported) */ void init(in nsIFile file, in long ioFlags, in long perm, in long behaviorFlags); }; /** * An input stream that reads ahead and keeps a buffer coming from another input * stream so that fewer accesses to the underlying stream are necessary. */ [scriptable, uuid(616f5b48-da09-11d3-8cda-0060b0fc14a3)] interface nsIBufferedInputStream : nsIInputStream { /** * @param fillFromStream - add buffering to this stream * @param bufferSize - specifies the maximum buffer size */ void init(in nsIInputStream fillFromStream, in unsigned long bufferSize); }; /** * An output stream that stores up data to write out to another output stream * and does the entire write only when the buffer is full, so that fewer writes * to the underlying output stream are necessary. */ [scriptable, uuid(6476378a-da09-11d3-8cda-0060b0fc14a3)] interface nsIBufferedOutputStream : nsIOutputStream { /** * @param sinkToStream - add buffering to this stream * @param bufferSize - specifies the maximum buffer size */ void init(in nsIOutputStream sinkToStream, in unsigned long bufferSize); }; %{C++ //////////////////////////////////////////////////////////////////////////////// #define NS_LOCALFILEINPUTSTREAM_CLASSNAME "Local File Input Stream" #define NS_LOCALFILEINPUTSTREAM_CONTRACTID "@mozilla.org/network/file-input-stream;1" #define NS_LOCALFILEINPUTSTREAM_CID \ { /* be9a53ae-c7e9-11d3-8cda-0060b0fc14a3 */ \ 0xbe9a53ae, \ 0xc7e9, \ 0x11d3, \ {0x8c, 0xda, 0x00, 0x60, 0xb0, 0xfc, 0x14, 0xa3} \ } #define NS_LOCALFILEOUTPUTSTREAM_CLASSNAME "Local File Output Stream" #define NS_LOCALFILEOUTPUTSTREAM_CONTRACTID "@mozilla.org/network/file-output-stream;1" #define NS_LOCALFILEOUTPUTSTREAM_CID \ { /* c272fee0-c7e9-11d3-8cda-0060b0fc14a3 */ \ 0xc272fee0, \ 0xc7e9, \ 0x11d3, \ {0x8c, 0xda, 0x00, 0x60, 0xb0, 0xfc, 0x14, 0xa3} \ } //////////////////////////////////////////////////////////////////////////////// #define NS_BUFFEREDINPUTSTREAM_CLASSNAME "Buffered Input Stream" #define NS_BUFFEREDINPUTSTREAM_CONTRACTID "@mozilla.org/network/buffered-input-stream;1" #define NS_BUFFEREDINPUTSTREAM_CID \ { /* 9226888e-da08-11d3-8cda-0060b0fc14a3 */ \ 0x9226888e, \ 0xda08, \ 0x11d3, \ {0x8c, 0xda, 0x00, 0x60, 0xb0, 0xfc, 0x14, 0xa3} \ } #define NS_BUFFEREDOUTPUTSTREAM_CLASSNAME "Buffered Output Stream" #define NS_BUFFEREDOUTPUTSTREAM_CONTRACTID "@mozilla.org/network/buffered-output-stream;1" #define NS_BUFFEREDOUTPUTSTREAM_CID \ { /* 9868b4ce-da08-11d3-8cda-0060b0fc14a3 */ \ 0x9868b4ce, \ 0xda08, \ 0x11d3, \ {0x8c, 0xda, 0x00, 0x60, 0xb0, 0xfc, 0x14, 0xa3} \ } //////////////////////////////////////////////////////////////////////////////// // move to nsNetUtil.h later... #include "nsCOMPtr.h" #include "nsIComponentManager.h" #include "nsIFileChannel.h" #include "nsIInputStream.h" #include "nsIOutputStream.h" #include "prio.h" // for read/write flags, permissions, etc. // This will QI the file argument to an nsILocalFile in the Init method. inline nsresult NS_NewLocalFileChannel(nsIFileChannel** aResult, nsIFile* aFile, PRInt32 aIOFlags = -1, PRInt32 aPerm = -1) { nsresult rv; nsCOMPtr channel; static NS_DEFINE_CID(kLocalFileChannelCID, NS_LOCALFILECHANNEL_CID); rv = nsComponentManager::CreateInstance(kLocalFileChannelCID, nsnull, NS_GET_IID(nsIFileChannel), getter_AddRefs(channel)); if (NS_FAILED(rv)) return rv; rv = channel->Init(aFile, aIOFlags, aPerm); if (NS_FAILED(rv)) return rv; *aResult = channel; NS_ADDREF(*aResult); return NS_OK; } // This will QI the file argument to an nsILocalFile in the Init method. inline nsresult NS_NewLocalFileInputStream(nsIInputStream** aResult, nsIFile* aFile, PRInt32 aIOFlags = -1, PRInt32 aPerm = -1, PRInt32 aBehaviorFlags = 0) { nsresult rv; nsCOMPtr in; static NS_DEFINE_CID(kLocalFileInputStreamCID, NS_LOCALFILEINPUTSTREAM_CID); rv = nsComponentManager::CreateInstance(kLocalFileInputStreamCID, nsnull, NS_GET_IID(nsIFileInputStream), getter_AddRefs(in)); if (NS_FAILED(rv)) return rv; rv = in->Init(aFile, aIOFlags, aPerm, aBehaviorFlags); if (NS_FAILED(rv)) return rv; *aResult = in; NS_ADDREF(*aResult); return NS_OK; } // This will QI the file argument to an nsILocalFile in the Init method. inline nsresult NS_NewLocalFileOutputStream(nsIOutputStream** aResult, nsIFile* aFile, PRInt32 aIOFlags = -1, PRInt32 aPerm = -1, PRInt32 aBehaviorFlags = 0) { nsresult rv; nsCOMPtr out; static NS_DEFINE_CID(kLocalFileOutputStreamCID, NS_LOCALFILEOUTPUTSTREAM_CID); rv = nsComponentManager::CreateInstance(kLocalFileOutputStreamCID, nsnull, NS_GET_IID(nsIFileOutputStream), getter_AddRefs(out)); if (NS_FAILED(rv)) return rv; rv = out->Init(aFile, aIOFlags, aPerm, aBehaviorFlags); if (NS_FAILED(rv)) return rv; *aResult = out; NS_ADDREF(*aResult); return NS_OK; } //////////////////////////////////////////////////////////////////////////////// inline nsresult NS_NewBufferedInputStream(nsIInputStream** aResult, nsIInputStream* aStr, PRUint32 aBufferSize) { nsresult rv; nsCOMPtr in; static NS_DEFINE_CID(kBufferedInputStreamCID, NS_BUFFEREDINPUTSTREAM_CID); rv = nsComponentManager::CreateInstance(kBufferedInputStreamCID, nsnull, NS_GET_IID(nsIBufferedInputStream), getter_AddRefs(in)); if (NS_FAILED(rv)) return rv; rv = in->Init(aStr, aBufferSize); if (NS_FAILED(rv)) return rv; *aResult = in; NS_ADDREF(*aResult); return NS_OK; } inline nsresult NS_NewBufferedOutputStream(nsIOutputStream** aResult, nsIOutputStream* aStr, PRUint32 aBufferSize) { nsresult rv; nsCOMPtr out; static NS_DEFINE_CID(kBufferedOutputStreamCID, NS_BUFFEREDOUTPUTSTREAM_CID); rv = nsComponentManager::CreateInstance(kBufferedOutputStreamCID, nsnull, NS_GET_IID(nsIBufferedOutputStream), getter_AddRefs(out)); if (NS_FAILED(rv)) return rv; rv = out->Init(aStr, aBufferSize); if (NS_FAILED(rv)) return rv; *aResult = out; NS_ADDREF(*aResult); return NS_OK; } %}