class H2Stream: (source)
Constructor: H2Stream(streamID, connection, headers, requestFactory, ...)
Implements interfaces: twisted.internet.interfaces.IConsumer
, twisted.internet.interfaces.IPushProducer
, twisted.internet.interfaces.ITransport
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 |
Forcefully abort the connection by sending a RstStream frame. |
Method | connection |
Called by the H2Connection when a connection is lost or a stream is reset. |
Method | flow |
Called by the H2Connection when this stream's flow control window has been exhausted. |
Method | get |
Similar to getPeer, but for this side of the connection. |
Method | get |
Get information about the peer. |
Method | is |
Returns True if this channel is using a secure transport. |
Method | lose |
Close the connection after writing all pending data. |
Method | pause |
No summary |
Method | receive |
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... |
Method | register |
Register to receive data from a producer. |
Method | request |
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. |
Method | request |
Called by a consumer to clean up whatever permanent state is in use. |
Method | resume |
No summary |
Method | stop |
No summary |
Method | unregister |
No summary |
Method | window |
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 |
Called by the consumer to write headers to the stream. |
Method | write |
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 |
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 |
The numerical stream ID that this object corresponds to. |
Method | _convert |
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 |
This is a quick and dirty way of responding to bad requests. |
Method | _send100 |
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 |
Undocumented |
Instance Variable | _inbound |
Any data that has been received from the network but has not yet been received by the consumer. |
Instance Variable | _producer |
Whether the producer stored in producer is currently producing data. |
Instance Variable | _request |
A request object that this stream corresponds to. |
Initialize this HTTP/2 stream.
Parameters | |
streamint | The numerical stream ID that this object corresponds to. |
connection:H2Connection | The HTTP/2 connection this stream belongs to. |
headers:A list of tuple s of header name and header value, both as bytes . | The HTTP/2 request headers. |
requesttwisted.web.iweb.IRequest . | A function that builds appropriate request request objects. |
site:twisted.web.server.Site | The twisted.web.server.Site object this stream belongs to, if any. |
factory:twisted.web.http.HTTPFactory | The twisted.web.http.HTTPFactory object that constructed this stream's parent connection. |
Called by the H2Connection
when a connection is lost or a stream is reset.
Parameters | |
reason:str | The reason the connection was lost. |
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:bytes | The chunk of data that was received. |
flowint | The total flow controlled length of this chunk, which is used when we want to re-open the window. May be different to len(data). |
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 provider | The producer to register. |
streaming:bool | True if producer provides IPushProducer , False if producer provides IPullProducer . |
Returns | |
None | |
Raises | |
RuntimeError | If a producer is already registered. |
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.
Called by a consumer to clean up whatever permanent state is in use.
Parameters | |
request:twisted.web.iweb.IRequest | The request calling the method. |
Called by the consumer to write headers to the stream.
Parameters | |
version:bytes | The HTTP version. |
code:int | The status code. |
reason:bytes | The reason phrase. Ignored in HTTP/2. |
headers:twisted.web.http_headers.Headers | The HTTP response headers. |
Write a sequence of chunks of data into data frames.
Parameters | |
iovec:An iterable of bytes chunks. | A sequence of chunks to send. |
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.
A buffer containing data produced by the producer that could not be sent on the network at this time.