Back to index

lightning-sunbird  0.9+nobinonly
nsAHttpTransaction.h
Go to the documentation of this file.
00001 /* ***** BEGIN LICENSE BLOCK *****
00002  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00003  *
00004  * The contents of this file are subject to the Mozilla Public License Version
00005  * 1.1 (the "License"); you may not use this file except in compliance with
00006  * the License. You may obtain a copy of the License at
00007  * http://www.mozilla.org/MPL/
00008  *
00009  * Software distributed under the License is distributed on an "AS IS" basis,
00010  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00011  * for the specific language governing rights and limitations under the
00012  * License.
00013  *
00014  * The Original Code is Mozilla.
00015  *
00016  * The Initial Developer of the Original Code is
00017  * Netscape Communications Corporation.
00018  * Portions created by the Initial Developer are Copyright (C) 2002
00019  * the Initial Developer. All Rights Reserved.
00020  *
00021  * Contributor(s):
00022  *   Darin Fisher <darin@netscape.com>
00023  *
00024  * Alternatively, the contents of this file may be used under the terms of
00025  * either the GNU General Public License Version 2 or later (the "GPL"), or
00026  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00027  * in which case the provisions of the GPL or the LGPL are applicable instead
00028  * of those above. If you wish to allow use of your version of this file only
00029  * under the terms of either the GPL or the LGPL, and not to allow others to
00030  * use your version of this file under the terms of the MPL, indicate your
00031  * decision by deleting the provisions above and replace them with the notice
00032  * and other provisions required by the GPL or the LGPL. If you do not delete
00033  * the provisions above, a recipient may use your version of this file under
00034  * the terms of any one of the MPL, the GPL or the LGPL.
00035  *
00036  * ***** END LICENSE BLOCK ***** */
00037 
00038 #ifndef nsAHttpTransaction_h__
00039 #define nsAHttpTransaction_h__
00040 
00041 #include "nsISupports.h"
00042 
00043 class nsAHttpConnection;
00044 class nsAHttpSegmentReader;
00045 class nsAHttpSegmentWriter;
00046 class nsIInterfaceRequestor;
00047 
00048 //----------------------------------------------------------------------------
00049 // Abstract base class for a HTTP transaction:
00050 //
00051 // A transaction is a "sink" for the response data.  The connection pushes
00052 // data to the transaction by writing to it.  The transaction supports
00053 // WriteSegments and may refuse to accept data if its buffers are full (its
00054 // write function returns NS_BASE_STREAM_WOULD_BLOCK in this case).
00055 //----------------------------------------------------------------------------
00056 
00057 class nsAHttpTransaction : public nsISupports
00058 {
00059 public:
00060     // called by the connection when it takes ownership of the transaction.
00061     virtual void SetConnection(nsAHttpConnection *) = 0;
00062 
00063     // called by the connection to get security callbacks to set on the 
00064     // socket transport.
00065     virtual void GetSecurityCallbacks(nsIInterfaceRequestor **) = 0;
00066 
00067     // called to report socket status (see nsITransportEventSink)
00068     virtual void OnTransportStatus(nsresult status, PRUint64 progress) = 0;
00069 
00070     // called to check the transaction status.
00071     virtual PRBool   IsDone() = 0;
00072     virtual nsresult Status() = 0;
00073 
00074     // called to find out how much request data is available for writing.
00075     virtual PRUint32 Available() = 0;
00076 
00077     // called to read request data from the transaction.
00078     virtual nsresult ReadSegments(nsAHttpSegmentReader *reader,
00079                                   PRUint32 count, PRUint32 *countRead) = 0;
00080 
00081     // called to write response data to the transaction.
00082     virtual nsresult WriteSegments(nsAHttpSegmentWriter *writer,
00083                                    PRUint32 count, PRUint32 *countWritten) = 0;
00084 
00085     // called to close the transaction
00086     virtual void Close(nsresult reason) = 0;
00087 };
00088 
00089 #define NS_DECL_NSAHTTPTRANSACTION \
00090     void SetConnection(nsAHttpConnection *); \
00091     void GetSecurityCallbacks(nsIInterfaceRequestor **); \
00092     void OnTransportStatus(nsresult status, PRUint64 progress); \
00093     PRBool   IsDone(); \
00094     nsresult Status(); \
00095     PRUint32 Available(); \
00096     nsresult ReadSegments(nsAHttpSegmentReader *, PRUint32, PRUint32 *); \
00097     nsresult WriteSegments(nsAHttpSegmentWriter *, PRUint32, PRUint32 *); \
00098     void     Close(nsresult reason);
00099 
00100 //-----------------------------------------------------------------------------
00101 // nsAHttpSegmentReader
00102 //-----------------------------------------------------------------------------
00103 
00104 class nsAHttpSegmentReader
00105 {
00106 public:
00107     // any returned failure code stops segment iteration
00108     virtual nsresult OnReadSegment(const char *segment,
00109                                    PRUint32 count,
00110                                    PRUint32 *countRead) = 0;
00111 };
00112 
00113 #define NS_DECL_NSAHTTPSEGMENTREADER \
00114     nsresult OnReadSegment(const char *, PRUint32, PRUint32 *);
00115 
00116 //-----------------------------------------------------------------------------
00117 // nsAHttpSegmentWriter
00118 //-----------------------------------------------------------------------------
00119 
00120 class nsAHttpSegmentWriter
00121 {
00122 public:
00123     // any returned failure code stops segment iteration
00124     virtual nsresult OnWriteSegment(char *segment,
00125                                     PRUint32 count,
00126                                     PRUint32 *countWritten) = 0;
00127 };
00128 
00129 #define NS_DECL_NSAHTTPSEGMENTWRITER \
00130     nsresult OnWriteSegment(char *, PRUint32, PRUint32 *);
00131 
00132 #endif // nsAHttpTransaction_h__