/* 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/. */
class nsIAsyncInputStream; class nsIAsyncOutputStream; class nsISocketTransport; class nsITLSSocketControl;
namespace mozilla { namespace net {
class nsHttpConnectionInfo; class HttpConnectionBase; class nsHttpRequestHead; class nsHttpResponseHead;
//----------------------------------------------------------------------------- // Abstract base class for a HTTP connection //-----------------------------------------------------------------------------
class nsAHttpConnection : public nsISupports { public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_AHTTPCONNECTION_IID)
//------------------------------------------------------------------------- // NOTE: these methods may only be called on the socket thread. //-------------------------------------------------------------------------
// // called by a transaction when the response headers have all been read. // the connection can force the transaction to reset it's response headers, // and prepare for a new set of response headers, by setting |*reset=TRUE|. // // @return failure code to close the transaction. //
[[nodiscard]] virtual nsresult OnHeadersAvailable(nsAHttpTransaction*,
nsHttpRequestHead*,
nsHttpResponseHead*, bool* reset) = 0;
// // called by a transaction to resume either sending or receiving data // after a transaction returned NS_BASE_STREAM_WOULD_BLOCK from its // ReadSegments/WriteSegments methods. //
[[nodiscard]] virtual nsresult ResumeSend() = 0;
[[nodiscard]] virtual nsresult ResumeRecv() = 0;
// called by a transaction to force a "send/recv from network" iteration // even if not scheduled by socket associated with connection
[[nodiscard]] virtual nsresult ForceSend() = 0;
[[nodiscard]] virtual nsresult ForceRecv() = 0;
// After a connection has had ResumeSend() called by a transaction, // and it is ready to write to the network it may need to know the // transaction that has data to write. This is only an issue for // multiplexed protocols like SPDY - h1 // implicitly has this information in a 1:1 relationship with the // transaction(s) they manage. virtualvoid TransactionHasDataToWrite(nsAHttpTransaction*) { // by default do nothing - only multiplexed protocols need to overload
}
// This is the companion to *HasDataToWrite() for the case // when a gecko caller has called ResumeRecv() after being paused virtualvoid TransactionHasDataToRecv(nsAHttpTransaction*) { // by default do nothing - only multiplexed protocols need to overload
}
// called by the connection manager to close a transaction being processed // by this connection. // // @param transaction // the transaction being closed. // @param reason // the reason for closing the transaction. NS_BASE_STREAM_CLOSED // is equivalent to NS_OK. // virtualvoid CloseTransaction(nsAHttpTransaction* transaction,
nsresult reason) = 0;
// get a reference to the connection's connection info object. virtualvoid GetConnectionInfo(nsHttpConnectionInfo**) = 0;
// get the transport level information for this connection. This may fail // if it is in use.
[[nodiscard]] virtual nsresult TakeTransport(nsISocketTransport**,
nsIAsyncInputStream**,
nsIAsyncOutputStream**) = 0;
// called by a transaction to get the TLS socket control from the socket. virtualvoid GetTLSSocketControl(nsITLSSocketControl**) = 0;
// called by a transaction to determine whether or not the connection is // persistent... important in determining the end of a response. virtualbool IsPersistent() = 0;
// called to determine or set if a connection has been reused. virtualbool IsReused() = 0; virtualvoid DontReuse() = 0;
// called by a transaction when the transaction reads more from the socket // than it should have (eg. containing part of the next response).
[[nodiscard]] virtual nsresult PushBack(constchar* data,
uint32_t length) = 0;
// Used to determine if the connection wants read events even though // it has not written out a transaction. Used when a connection has issued // a preamble such as a proxy ssl CONNECT sequence. virtualbool IsProxyConnectInProgress() = 0;
// Used by a transaction to manage the state of previous response bodies on // the same connection and work around buggy servers. virtualbool LastTransactionExpectedNoContent() = 0; virtualvoid SetLastTransactionExpectedNoContent(bool) = 0;
// Transfer the base http connection object along with a // reference to it to the caller. virtual already_AddRefed<HttpConnectionBase> TakeHttpConnection() = 0;
// Like TakeHttpConnection() but do not drop our own ref virtual already_AddRefed<HttpConnectionBase> HttpConnection() = 0;
// Get the nsISocketTransport used by the connection without changing // references or ownership. virtual nsISocketTransport* Transport() = 0;
// The number of transaction bytes written out on this HTTP Connection, does // not count CONNECT tunnel setup virtual int64_t BytesWritten() = 0;
// Update the callbacks used to provide security info. May be called on // any thread. virtualvoid SetSecurityCallbacks(nsIInterfaceRequestor* aCallbacks) = 0;
// nsHttp.h version virtual HttpVersion Version() = 0;
// A notification of the current active tab id change. virtualvoid CurrentBrowserIdChanged(uint64_t id) = 0;
// categories set by nsHttpTransaction to identify how this connection is // being used. virtualvoid SetTrafficCategory(HttpTrafficCategory) = 0;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.