/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * 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 Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ #include "nsIStreamObserver.idl" interface nsIChannel; interface nsIInputStream; interface nsIOutputStream; interface nsIEventQueue; /** * The nsIChannel::AsyncWrite notification handler. It provides * data to the channel, when the channel is ready to accept it. */ [scriptable, uuid(d10ef7a9-b728-43d4-9c49-74172186d691)] interface nsIStreamProvider : nsIStreamObserver { /** * Called when data may be written to the channel. * * @param request - the request returned by AsyncWrite * @param ctxt - opaque parameter passed to AsyncWrite * @param output - output stream for writing data chunk * @param offset - current stream position (informational) * @param count - number of bytes that can be written without blocking * * @return NS_OK - if successfully wrote something. * @return NS_BASE_STREAM_CLOSED - if done writing data. NOTE: this is * NOT equivalent to writing zero bytes and returning NS_OK. * @return NS_BASE_STREAM_WOULD_BLOCK - if no data can be written at * this time. This implicitly calls Suspend on the channel. Call * Resume on the channel to continue the AsyncWrite when more data * becomes available. * @return - if failure. */ void onDataWritable(in nsIRequest request, in nsISupports ctxt, in nsIOutputStream output, in unsigned long offset, in unsigned long count); }; /** * A stream provider proxy is used to ship data over to another thread specified * by the thread's event queue. The "true" stream provider's methods are * invoked on the other thread. * * This interface only provides the initialization needed after construction. * Otherwise, these objects may be used as a nsIStreamProvider. */ [scriptable, uuid(5c3b0bac-605a-49ac-880e-5c8b993f7d2b)] interface nsIStreamProviderProxy : nsIStreamProvider { /** * Initializes an nsIStreamProviderProxy. * * @param provider - receives provider notifications on the other thread. * @param eventQ - may be NULL indicating the calling thread's event queue. */ void init(in nsIStreamProvider provider, in nsIEventQueue eventQ, in unsigned long bufferSegmentSize, in unsigned long bufferMaxSize); }; /** * A simple stream provider can be used with AsyncWrite to supply data from * an existing input stream. */ [scriptable, uuid(c20bb3b9-0755-4eff-9222-3537f9e89082)] interface nsISimpleStreamProvider : nsIStreamProvider { /** * Initialize the simple stream provider. * * @param - data will be read from this input stream to the channel * @param - optional stream observer (can be NULL) */ void init(in nsIInputStream source, in nsIStreamObserver observer); };