class documentation

class H2Stream: (source)

Implements interfaces: twisted.internet.interfaces.IConsumer, twisted.internet.interfaces.IPushProducer, twisted.internet.interfaces.ITransport

View In Hierarchy

A class representing a single HTTP/2 stream.

This class works hand-in-hand with H2Connection. It acts to provide an implementation of ITransport, IConsumer, and IProducer that work for a single HTTP/2 connection, while tightly cleaving to the interface provided by those interfaces. It does this by having a tight coupling to H2Connection, which allows associating many of the functions of ITransport, IConsumer, and IProducer to objects on a stream-specific level.

Method __init__ Initialize this HTTP/2 stream.
Method abort​Connection Forcefully abort the connection by sending a RstStream frame.
Method connection​Lost Called by the H2Connection when a connection is lost or a stream is reset.
Method flow​Control​Blocked Called by the H2Connection when this stream's flow control window has been exhausted.
Method get​Host Similar to getPeer, but for this side of the connection.
Method get​Peer Get information about the peer.
Method is​Secure Returns True if this channel is using a secure transport.
Method lose​Connection Close the connection after writing all pending data.
Method pause​Producing
Method receive​Data​Chunk No summary
Method register​Producer Register to receive data from a producer.
Method request​Complete No summary
Method request​Done Called by a consumer to clean up whatever permanent state is in use.
Method resume​Producing
Method stop​Producing
Method unregister​Producer
Method window​Updated Called by the H2Connection when this stream's flow control window has been opened.
Method write Write a single chunk of data into a data frame.
Method write​Headers Called by the consumer to write headers to the stream.
Method write​Sequence Write a sequence of chunks of data into data frames.
Class Variable transport Undocumented
Instance Variable command The HTTP verb used on the request.
Instance Variable factory The twisted.web.http.HTTPFactory object that constructed this stream's parent connection.
Instance Variable has​Streaming​Producer Undocumented
Instance Variable path The HTTP path used on the request.
Instance Variable producer The object producing the response, if any.
Instance Variable producing Whether this stream is currently allowed to produce data to its consumer.
Instance Variable site The twisted.web.server.Site object this stream belongs to, if any.
Instance Variable stream​ID The numerical stream ID that this object corresponds to.
Method _convert​Headers This method converts the HTTP/2 header set into something that looks like HTTP/1.1. In particular, it strips the 'special' headers and adds a Host: header.
Method _respond​To​Bad​Request​And​Disconnect This is a quick and dirty way of responding to bad requests.
Method _send100​Continue Sends a 100 Continue response, used to signal to clients that further processing will be performed.
Instance Variable _buffer A buffer containing data produced by the producer that could not be sent on the network at this time.
Instance Variable _conn A reference to the connection this stream belongs to.
Instance Variable _has​Streaming​Producer Undocumented
Instance Variable _inbound​Data​Buffer Any data that has been received from the network but has not yet been received by the consumer.
Instance Variable _producer​Producing Whether the producer stored in producer is currently producing data.
Instance Variable _request A request object that this stream corresponds to.
def __init__(self, streamID, connection, headers, requestFactory, site, factory): (source)
Initialize this HTTP/2 stream.
Parameters
stream​ID:intThe numerical stream ID that this object corresponds to.
connection:H2ConnectionThe HTTP/2 connection this stream belongs to.
headers:A list of tuples of header name and header value, both as bytes.The HTTP/2 request headers.
request​Factory:A callable that returns a twisted.web.iweb.IRequest.A function that builds appropriate request request objects.
site:twisted.web.server.SiteThe twisted.web.server.Site object this stream belongs to, if any.
factory:twisted.web.http.HTTPFactoryThe twisted.web.http.HTTPFactory object that constructed this stream's parent connection.
def abortConnection(self): (source)
Forcefully abort the connection by sending a RstStream frame.
def connectionLost(self, reason): (source)
Called by the H2Connection when a connection is lost or a stream is reset.
Parameters
reason:strThe reason the connection was lost.
def flowControlBlocked(self): (source)
Called by the H2Connection when this stream's flow control window has been exhausted.
def getHost(self): (source)
Similar to getPeer, but for this side of the connection.
def getPeer(self): (source)
Get information about the peer.
def isSecure(self): (source)
Returns True if this channel is using a secure transport.
Returns
boolTrue if this channel is secure.
def loseConnection(self): (source)
Close the connection after writing all pending data.
def receiveDataChunk(self, data, flowControlledLength): (source)
Called when the connection has received a chunk of data from the underlying transport. If the stream has been registered with a consumer, and is currently able to push data, immediately passes it through. Otherwise, buffers the chunk until we can start producing.
Parameters
data:bytesThe chunk of data that was received.
flow​Controlled​Length:intThe total flow controlled length of this chunk, which is used when we want to re-open the window. May be different to len(data).
def registerProducer(self, producer, streaming): (source)

Register to receive data from a producer.

This sets self to be a consumer for a producer. When this object runs out of data (as when a send(2) call on a socket succeeds in moving the last data from a userspace buffer into a kernelspace buffer), it will ask the producer to resumeProducing().

For IPullProducer providers, resumeProducing will be called once each time data is required.

For IPushProducer providers, pauseProducing will be called whenever the write buffer fills up and resumeProducing will only be called when it empties.

Parameters
producer:IProducer providerThe producer to register.
streaming:boolTrue if producer provides IPushProducer, False if producer provides IPullProducer.
Returns
None
Raises
RuntimeErrorIf a producer is already registered.
def requestComplete(self): (source)
Called by the H2Connection when the all data for a request has been received. Currently, with the legacy twisted.web.http.Request object, just calls requestReceived unless the producer wants us to be quiet.
def requestDone(self, request): (source)
Called by a consumer to clean up whatever permanent state is in use.
Parameters
request:twisted.web.iweb.IRequestThe request calling the method.
def windowUpdated(self): (source)
Called by the H2Connection when this stream's flow control window has been opened.
def write(self, data): (source)
Write a single chunk of data into a data frame.
Parameters
data:bytesThe data chunk to send.
def writeHeaders(self, version, code, reason, headers): (source)
Called by the consumer to write headers to the stream.
Parameters
version:bytesThe HTTP version.
code:intThe status code.
reason:bytesThe reason phrase. Ignored in HTTP/2.
headers:Any iterable of two-tuples of bytes, representing header names and header values.The HTTP response headers.
def writeSequence(self, iovec): (source)
Write a sequence of chunks of data into data frames.
Parameters
iovec:An iterable of bytes chunks.A sequence of chunks to send.
transport = (source)

Undocumented

command: unicode = (source)
The HTTP verb used on the request.
The twisted.web.http.HTTPFactory object that constructed this stream's parent connection.
hasStreamingProducer = (source)

Undocumented

The HTTP path used on the request.
producer: IProducer = (source)
The object producing the response, if any.
producing: bool = (source)
Whether this stream is currently allowed to produce data to its consumer.
The twisted.web.server.Site object this stream belongs to, if any.
streamID: int = (source)
The numerical stream ID that this object corresponds to.
def _convertHeaders(self, headers): (source)
This method converts the HTTP/2 header set into something that looks like HTTP/1.1. In particular, it strips the 'special' headers and adds a Host: header.
Parameters
headers:A list of tuples of header name and header value, both as bytes.The HTTP/2 header set.
def _respondToBadRequestAndDisconnect(self): (source)

This is a quick and dirty way of responding to bad requests.

As described by HTTP standard we should be patient and accept the whole request from the client before sending a polite bad request response, even in the case when clients send tons of data.

Unlike in the HTTP/1.1 case, this does not actually disconnect the underlying transport: there's no need. This instead just sends a 400 response and terminates the stream.

def _send100Continue(self): (source)
Sends a 100 Continue response, used to signal to clients that further processing will be performed.
A buffer containing data produced by the producer that could not be sent on the network at this time.
A reference to the connection this stream belongs to.
_hasStreamingProducer = (source)

Undocumented

_inboundDataBuffer: A collections.deque containing bytes = (source)
Any data that has been received from the network but has not yet been received by the consumer.
_producerProducing: bool = (source)
Whether the producer stored in producer is currently producing data.
A request object that this stream corresponds to.