session: return connect session handle to app

App transports not supported for now. Will have to be updated
individually.

Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I75cb6c4e1c5af008af72858a9ee573016812abd4
This commit is contained in:
Florin Coras
2021-05-11 11:55:07 -07:00
committed by Damjan Marion
parent 106e24bd91
commit 89a9f61dfc
6 changed files with 36 additions and 32 deletions

View File

@ -314,7 +314,7 @@ session_half_open_delete_notify (transport_connection_t *tc)
app_worker_t *app_wrk;
session_t *s;
s = session_get (tc->s_index, tc->thread_index);
s = ho_session_get (tc->s_index);
app_wrk = app_worker_get (s->app_wrk_index);
app_worker_del_half_open (app_wrk, s->ho_index);
session_free (s);
@ -1225,7 +1225,7 @@ session_dgram_accept (transport_connection_t * tc, u32 listener_index,
}
int
session_open_cl (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
session_open_cl (session_endpoint_cfg_t *rmt, session_handle_t *rsh)
{
transport_connection_t *tc;
transport_endpoint_cfg_t *tep;
@ -1245,7 +1245,7 @@ session_open_cl (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
tc = transport_get_half_open (rmt->transport_proto, (u32) rv);
/* For dgram type of service, allocate session and fifos now */
app_wrk = app_worker_get (app_wrk_index);
app_wrk = app_worker_get (rmt->app_wrk_index);
s = session_alloc_for_connection (tc);
s->app_wrk_index = app_wrk->wrk_index;
s->session_state = SESSION_STATE_OPENED;
@ -1256,17 +1256,19 @@ session_open_cl (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
}
sh = session_handle (s);
*rsh = sh;
session_lookup_add_connection (tc, sh);
return app_worker_connect_notify (app_wrk, s, SESSION_E_NONE, opaque);
return app_worker_connect_notify (app_wrk, s, SESSION_E_NONE, rmt->opaque);
}
int
session_open_vc (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
session_open_vc (session_endpoint_cfg_t *rmt, session_handle_t *rsh)
{
transport_connection_t *tc;
transport_endpoint_cfg_t *tep;
app_worker_t *app_wrk;
session_t *s;
session_t *ho;
int rv;
tep = session_endpoint_to_transport_cfg (rmt);
@ -1279,7 +1281,7 @@ session_open_vc (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
tc = transport_get_half_open (rmt->transport_proto, (u32) rv);
app_wrk = app_worker_get (app_wrk_index);
app_wrk = app_worker_get (rmt->app_wrk_index);
/* If transport offers a vc service, only allocate established
* session once the connection has been established.
@ -1289,10 +1291,11 @@ session_open_vc (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
* session on transport notification, and to cleanup the half-open
* session if the app detaches before connection establishment.
*/
s = session_alloc_for_half_open (tc);
s->app_wrk_index = app_wrk->wrk_index;
s->ho_index = app_worker_add_half_open (app_wrk, session_handle (s));
s->opaque = opaque;
ho = session_alloc_for_half_open (tc);
ho->app_wrk_index = app_wrk->wrk_index;
ho->ho_index = app_worker_add_half_open (app_wrk, session_handle (ho));
ho->opaque = rmt->opaque;
*rsh = session_handle (ho);
session_lookup_add_half_open (tc, tc->c_index);
@ -1300,18 +1303,17 @@ session_open_vc (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
}
int
session_open_app (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
session_open_app (session_endpoint_cfg_t *rmt, session_handle_t *rsh)
{
session_endpoint_cfg_t *sep = (session_endpoint_cfg_t *) rmt;
transport_endpoint_cfg_t *tep_cfg = session_endpoint_to_transport_cfg (sep);
sep->app_wrk_index = app_wrk_index;
sep->opaque = opaque;
transport_endpoint_cfg_t *tep_cfg = session_endpoint_to_transport_cfg (rmt);
/* Not supported for now */
*rsh = SESSION_INVALID_HANDLE;
return transport_connect (rmt->transport_proto, tep_cfg);
}
typedef int (*session_open_service_fn) (u32, session_endpoint_t *, u32);
typedef int (*session_open_service_fn) (session_endpoint_cfg_t *,
session_handle_t *);
/* *INDENT-OFF* */
static session_open_service_fn session_open_srv_fns[TRANSPORT_N_SERVICES] = {
@ -1335,11 +1337,11 @@ static session_open_service_fn session_open_srv_fns[TRANSPORT_N_SERVICES] = {
* on open completion.
*/
int
session_open (u32 app_wrk_index, session_endpoint_t * rmt, u32 opaque)
session_open (session_endpoint_cfg_t *rmt, session_handle_t *rsh)
{
transport_service_type_t tst;
tst = transport_protocol_service_type (rmt->transport_proto);
return session_open_srv_fns[tst] (app_wrk_index, rmt, opaque);
return session_open_srv_fns[tst](rmt, rsh);
}
/**