hsa: http cli client ho session cleanup

Type: improvement

Change-Id: I9266dac18ad3ee57fc8ecca3614b51b2345e9c48
Signed-off-by: Matus Fabian <matfabia@cisco.com>
This commit is contained in:
Matus Fabian
2024-10-24 14:59:56 +02:00
committed by Florin Coras
parent 841672258a
commit 26be76cc3e

View File

@ -98,6 +98,13 @@ hcc_session_get (u32 hs_index, u32 thread_index)
return pool_elt_at_index (wrk->sessions, hs_index);
}
static void
hcc_ho_session_free (u32 hs_index)
{
hcc_worker_t *wrk = hcc_worker_get (0);
pool_put_index (wrk->sessions, hs_index);
}
static int
hcc_ts_accept_callback (session_t *ts)
{
@ -125,9 +132,10 @@ hcc_ts_connected_callback (u32 app_index, u32 hc_index, session_t *as,
hcc_worker_t *wrk;
http_msg_t msg;
u8 *headers_buf;
u32 new_hs_index;
int rv;
HCC_DBG ("hc_index: %d", hc_index);
HCC_DBG ("ho hc_index: %d", hc_index);
if (err)
{
@ -138,19 +146,22 @@ hcc_ts_connected_callback (u32 app_index, u32 hc_index, session_t *as,
return -1;
}
/* TODO delete half open session once the support is added in http layer */
hs = hcc_session_get (hc_index, 0);
wrk = hcc_worker_get (as->thread_index);
new_hs = hcc_session_alloc (wrk);
new_hs_index = new_hs->session_index;
clib_memcpy_fast (new_hs, hs, sizeof (*hs));
new_hs->session_index = new_hs_index;
new_hs->thread_index = as->thread_index;
new_hs->vpp_session_index = as->session_index;
HCC_DBG ("new hc_index: %d", new_hs->session_index);
as->opaque = new_hs_index;
hs->vpp_session_index = as->session_index;
http_add_header (&hs->req_headers,
http_add_header (&new_hs->req_headers,
http_header_name_token (HTTP_HEADER_ACCEPT),
http_content_type_token (HTTP_CONTENT_TEXT_HTML));
headers_buf = http_serialize_headers (hs->req_headers);
vec_free (hs->req_headers);
headers_buf = http_serialize_headers (new_hs->req_headers);
vec_free (new_hs->req_headers);
msg.type = HTTP_MSG_REQUEST;
msg.method_type = HTTP_REQ_GET;
@ -300,6 +311,13 @@ hcc_ts_transport_closed (session_t *s)
HCC_TRANSPORT_CLOSED, 0);
}
static void
hcc_ho_cleanup_callback (session_t *ts)
{
HCC_DBG ("ho hc_index: %d:", ts->opaque);
hcc_ho_session_free (ts->opaque);
}
static session_cb_vft_t hcc_session_cb_vft = {
.session_accept_callback = hcc_ts_accept_callback,
.session_disconnect_callback = hcc_ts_disconnect_callback,
@ -308,6 +326,7 @@ static session_cb_vft_t hcc_session_cb_vft = {
.builtin_app_tx_callback = hcc_ts_tx_callback,
.session_reset_callback = hcc_ts_reset_callback,
.session_transport_closed_callback = hcc_ts_transport_closed,
.half_open_cleanup_callback = hcc_ho_cleanup_callback,
};
static clib_error_t *
@ -413,7 +432,7 @@ hcc_run (vlib_main_t *vm, int print_output)
hcc_worker_t *wrk;
num_threads = 1 /* main thread */ + vtm->n_threads;
vec_validate (hcm->wrk, num_threads);
vec_validate (hcm->wrk, num_threads - 1);
vec_foreach (wrk, hcm->wrk)
{
wrk->thread_index = wrk - hcm->wrk;