int htx_process_request(struct stream *s, struct channel *req, int an_bit);
int htx_process_tarpit(struct stream *s, struct channel *req, int an_bit);
int htx_wait_for_request_body(struct stream *s, struct channel *req, int an_bit);
-int htx_send_name_header(struct http_txn *txn, struct proxy* be, const char* svr_name);
int htx_wait_for_response(struct stream *s, struct channel *rep, int an_bit);
int htx_process_res_common(struct stream *s, struct channel *rep, int an_bit, struct proxy *px);
int htx_request_forward_body(struct stream *s, struct channel *req, int an_bit);
void htx_res_set_status(unsigned int status, const char *reason, struct stream *s);
void htx_check_request_for_cacheability(struct stream *s, struct channel *req);
void htx_check_response_for_cacheability(struct stream *s, struct channel *res);
+int htx_send_name_header(struct stream *s, struct proxy *be, const char *srv_name);
void htx_server_error(struct stream *s, struct stream_interface *si, int err, int finst, const struct buffer *msg);
void htx_reply_and_close(struct stream *s, short status, struct buffer *msg);
}
}
+/* send a server's name with an outgoing request over an established connection.
+ * Note: this function is designed to be called once the request has been
+ * scheduled for being forwarded. This is the reason why the number of forwarded
+ * bytes have to be adjusted.
+ */
+int htx_send_name_header(struct stream *s, struct proxy *be, const char *srv_name)
+{
+ struct htx *htx;
+ struct http_hdr_ctx ctx;
+ struct ist hdr;
+ uint32_t data;
+
+ hdr = ist2(be->server_id_hdr_name, be->server_id_hdr_len);
+ htx = htx_from_buf(&s->req.buf);
+ data = htx->data;
+
+ ctx.blk = NULL;
+ while (http_find_header(htx, hdr, &ctx, 1))
+ http_remove_header(htx, &ctx);
+ http_add_header(htx, hdr, ist2(srv_name, strlen(srv_name)));
+
+ if (co_data(&s->req)) {
+ if (data >= htx->data)
+ c_rew(&s->req, data - htx->data);
+ else
+ c_adv(&s->req, htx->data - data);
+ }
+ return 0;
+}
+
/* This function terminates the request because it was completly analyzed or
* because an error was triggered during the body forwarding.
*/