| least with some transport not de-initialized. We might thus need
| conn_xprt_close() when conn_xprt_init() fails.
|
-| The fd should be conditionned by ->ctrl only, and the transport layer by ->xprt.
+| The fd should be conditioned by ->ctrl only, and the transport layer by ->xprt.
|
| - conn_prepare_ctrl(conn, ctrl)
| - conn_prepare_xprt(conn, xprt)
- if a data-layer accept() has been performed
=> possibly 2 bits, to indicate the need to free()
-On the connect() side, we need to konw :
+On the connect() side, we need to know :
- the desire to send a header (eg: send-proxy)
- if this header has been sent
=> maybe both info might be combined
frame size minimum. That means slightly more than 16kB of buffer in each
direction to process any frame. It will definitely have an impact on the
deployed maxconn setting in places using less than this (4..8kB are common).
- Also, the header list is persistant per connection, so if we reach the same
+ Also, the header list is persistent per connection, so if we reach the same
size as the request, that's another 16kB in each direction, resulting in
about 48kB of memory where 8 were previously used. A more careful encoder
can work with a much smaller set even if that implies evicting entries
Thus :
- Tx buffers do not exist. We allocate a buffer on the fly when we're ready to
- send something that we need to build and that needs to be persistant in case
+ send something that we need to build and that needs to be persistent in case
of partial send. H1 headers are built on the fly from the header table to a
temporary buffer that is immediately sent and whose amount of sent bytes is
the only information kept (like for PROXY protocol). H2 headers are more
- 1 list of rule-based checkpoints per backend
- 1 list of rule-based checkpoints per server
-Each of these lists have a lot of rules conditionned by ACLs, just like the
+Each of these lists have a lot of rules conditioned by ACLs, just like the
use-backend rules, except that all rules are evaluated in turn.
Since we might sometimes just want to enable that without setting any limit and
msg.sol : start of line. Points to the beginning of the current header line
while parsing headers. It is cleared to zero in the BODY state,
- and contains exactly the number of bytes comprising the preceeding
+ and contains exactly the number of bytes comprising the preceding
chunk size in the DATA state (which can be zero), so that the sum of
msg.sov + msg.sol always points to the beginning of data for all
states starting with DATA. For chunked encoded messages, this sum
TRAILERS state, it contains the length of the last parsed part of
the trailer headers.
-msg.eoh : end of headers. Points to the CRLF (or LF) preceeding the body and
+msg.eoh : end of headers. Points to the CRLF (or LF) preceding the body and
marking the end of headers. It is where new headers are appended.
This offset is automatically adjusted when inserting/removing some
headers. It always contains the size of the headers excluding the
on versions and current connection header(s).
- both CLO and TUN modes work similarly, they need to set a close mode on the
- reponse. A 1.1 response will exclusively need the close header, while a 1.0
+ response. A 1.1 response will exclusively need the close header, while a 1.0
response will have it removed. Any keep-alive header is always removed when
found.
- if a data-layer accept() has been performed
=> possibly 2 bits, to indicate the need to free()
-On the connect() side, we need to konw :
+On the connect() side, we need to know :
- the desire to send a header (eg: send-proxy)
- if this header has been sent
=> maybe both info might be combined
Connector
---------
-A connector is the entity which permits to instanciate a connection to a known
+A connector is the entity which permits to instantiate a connection to a known
destination. It presents a connect() callback, and as such appears on the right
side of diagrams.
* If NULL, we start from the first filter.
* 0: request channel, 1: response channel */
unsigned short flags; /* STRM_FL_* */
- unsigned char nb_req_data_filters; /* Number of data filters registerd on the request channel */
- unsigned char nb_rsp_data_filters; /* Number of data filters registerd on the response channel */
+ unsigned char nb_req_data_filters; /* Number of data filters registered on the request channel */
+ unsigned char nb_rsp_data_filters; /* Number of data filters registered on the response channel */
};
3.4. HANDLING THE STREAMS ACTIVITY
-----------------------------------
-You may be interessted to handle streams activity. For now, there is three
+You may be interested to handle streams activity. For now, there is three
callbacks that you should define to do so:
* 'flt_ops.stream_start': It is called when a stream is started. This callback
available via conn_streams, sends data to the network
-The connection zone contains multiple layers which behave independantly in each
+The connection zone contains multiple layers which behave independently in each
direction. The Rx direction is activated upon callbacks from the lower layers.
The Tx direction is activated recursively from the upper layers. Between every
two layers there may be a buffer, in each direction. When a buffer is full
requested size, thus no need to re-enable receiving on the lower layers.
- RECV_ONE_SHOT : perform a single read without re-enabling reading on the
- lower layers, like we currently do when receving an HTTP/1 request. Like
+ lower layers, like we currently do when receiving an HTTP/1 request. Like
RECV_ENOUGH where any size is enough. Probably that the two could be merged
(eg: by having a MIN argument like RECV_MIN).
Both operations should return a composite status :
- - number of bytes transfered
+ - number of bytes transferred
- status flags (shutr, shutw, reset, empty, full, ...)
Other format accepted are a socket path like "/socket/path", it permits to
connect to a socket. Abstract namespaces are supported with the prefix
- "abns@", and finaly a file descriptor can be passed with the prefix "fd@".
+ "abns@", and finally a file descriptor can be passed with the prefix "fd@".
The prefix "ipv4@", "ipv6@" and "unix@" are also supported. The port can be
passed int the string. The syntax "127.0.0.1:1234" is valid. In this case, the
parameter *port* must not be set.