static inline int
tls_add_app_q_evt (app_worker_t * app, stream_session_t * app_session)
{
- return application_send_event (app, app_session, FIFO_EVENT_APP_RX);
+ return app_worker_send_event (app, app_session, FIFO_EVENT_APP_RX);
}
u32
{
clib_rwlock_writer_lock (&tm->half_open_rwlock);
pool_get (tm->half_open_ctx_pool, ctx);
- memset (ctx, 0, sizeof (*ctx));
- ctx_index = ctx - tm->half_open_ctx_pool;
clib_rwlock_writer_unlock (&tm->half_open_rwlock);
}
else
{
+ /* reader lock assumption: only main thread will call pool_get */
+ clib_rwlock_reader_lock (&tm->half_open_rwlock);
pool_get (tm->half_open_ctx_pool, ctx);
- memset (ctx, 0, sizeof (*ctx));
- ctx_index = ctx - tm->half_open_ctx_pool;
+ clib_rwlock_reader_unlock (&tm->half_open_rwlock);
}
+ memset (ctx, 0, sizeof (*ctx));
+ ctx_index = ctx - tm->half_open_ctx_pool;
return ctx_index;
}
app_session->session_type = app_listener->session_type;
app_session->listener_index = app_listener->session_index;
sm = app_worker_get_listen_segment_manager (app_wrk, app_listener);
- app_session->opaque = tls_main.app_index;
+ app_session->t_app_index = tls_main.app_index;
if ((rv = session_alloc_fifos (sm, app_session)))
{
app_session->connection_index = ctx->tls_ctx_handle;
app_session->session_type =
session_type_from_proto_and_ip (TRANSPORT_PROTO_TLS, ctx->tcp_is_ip4);
- app_session->opaque = tls_main.app_index;
+ app_session->t_app_index = tls_main.app_index;
if (session_alloc_fifos (sm, app_session))
goto failed;
tls_session_connected_callback (u32 tls_app_index, u32 ho_ctx_index,
stream_session_t * tls_session, u8 is_fail)
{
- int (*cb_fn) (u32, u32, stream_session_t *, u8);
tls_ctx_t *ho_ctx, *ctx;
- app_worker_t *app_wrk;
- application_t *app;
u32 ctx_handle;
ho_ctx = tls_ctx_half_open_get (ho_ctx_index);
- app_wrk = app_worker_get (ho_ctx->parent_app_index);
- app = application_get (app_wrk->app_index);
- cb_fn = app->cb_fns.session_connected_callback;
if (is_fail)
{
+ int (*cb_fn) (u32, u32, stream_session_t *, u8);
+ u32 wrk_index, api_context;
+ app_worker_t *app_wrk;
+ application_t *app;
+
+ wrk_index = ho_ctx->parent_app_index;
+ api_context = ho_ctx->c_s_index;
tls_ctx_half_open_reader_unlock ();
tls_ctx_half_open_free (ho_ctx_index);
- return cb_fn (ho_ctx->parent_app_index, ho_ctx->c_s_index, 0,
- 1 /* failed */ );
+ app_wrk = app_worker_get (ho_ctx->parent_app_index);
+ app = application_get (app_wrk->app_index);
+ cb_fn = app->cb_fns.session_connected_callback;
+ return cb_fn (wrk_index, api_context, 0, 1 /* failed */ );
}
ctx_handle = tls_ctx_alloc (ho_ctx->tls_ctx_engine);
u32
tls_start_listen (u32 app_listener_index, transport_endpoint_t * tep)
{
- app_worker_t *tls_app_wrk, *app_wrk;
+ vnet_bind_args_t _bargs, *args = &_bargs;
+ app_worker_t *app_wrk;
tls_main_t *tm = &tls_main;
session_handle_t tls_handle;
session_endpoint_extended_t *sep;
stream_session_t *tls_listener;
stream_session_t *app_listener;
tls_engine_type_t engine_type;
- application_t *app, *tls_app;
+ application_t *app;
tls_ctx_t *lctx;
u32 lctx_index;
return -1;
}
- lctx_index = tls_listener_ctx_alloc ();
-
- /* TODO hide this by calling vnet_bind() */
- tls_app = application_get (tm->app_index);
- tls_app_wrk = application_get_default_worker (tls_app);
sep->transport_proto = TRANSPORT_PROTO_TCP;
- if (app_worker_start_listen (tls_app_wrk, (session_endpoint_t *) sep,
- &tls_handle))
- return ~0;
+ memset (args, 0, sizeof (*args));
+ args->app_index = tm->app_index;
+ args->sep_ext = *sep;
+ if (vnet_bind (args))
+ return -1;
+ tls_handle = args->handle;
+ lctx_index = tls_listener_ctx_alloc ();
tls_listener = listen_session_get_from_handle (tls_handle);
tls_listener->opaque = lctx_index;
tls_engine_type_t engine_type;
lctx = tls_listener_ctx_get (lctx_index);
- app_worker_stop_listen (lctx->tls_session_handle, tm->app_index);
+ /* TODO use unbind */
+ application_stop_listen (tm->app_index, 0, lctx->tls_session_handle);
engine_type = lctx->tls_ctx_engine;
tls_vfts[engine_type].ctx_stop_listen (lctx);