}
static void
-hcpc_http_connection_closed ()
+hcpc_http_stop_listeners_rpc (void *args)
{
+ vlib_main_t *vm = vlib_get_main ();
hcpc_main_t *hcpcm = &hcpc_main;
hcpc_listener_t *l;
- hcpc_session_t *ps;
- pool_foreach (ps, hcpcm->sessions)
- {
- ps->state = HCPC_SESSION_CLOSED;
- ps->intercept_diconnected = 1;
- ps->http_disconnected = 1;
- }
+ vlib_worker_thread_barrier_sync (vm);
pool_foreach (l, hcpcm->listeners)
{
vnet_unlisten (&a);
}
}
+
+ vlib_worker_thread_barrier_release (vm);
+}
+
+static void
+hcpc_http_connection_closed ()
+{
+ hcpc_main_t *hcpcm = &hcpc_main;
+ hcpc_session_t *ps;
+
+ pool_foreach (ps, hcpcm->sessions)
+ {
+ ps->state = HCPC_SESSION_CLOSED;
+ ps->intercept_diconnected = 1;
+ ps->http_disconnected = 1;
+ }
+
+ session_send_rpc_evt_to_thread (0, hcpc_http_stop_listeners_rpc, 0);
}
static void
/* http connection went down */
if (ps->flags & HCPC_SESSION_F_IS_PARENT)
{
+ hcpc_session_close_http (ps);
ps->state = HCPC_SESSION_CLOSED;
hcpcm->http_connection_handle = SESSION_INVALID_HANDLE;
hcpc_http_connection_closed ();
/* http side vft callbacks */
/***************************/
+static int
+hcpc_http_session_accept_callback (session_t *s)
+{
+ clib_warning ("http proxy client app should not get accept events");
+ return -1;
+}
+
static int
hcpc_http_session_connected_callback (u32 app_index, u32 session_index,
session_t *s, session_error_t err)
}
static session_cb_vft_t http_session_cb_vft = {
+ .session_accept_callback = hcpc_http_session_accept_callback,
.session_connected_callback = hcpc_http_session_connected_callback,
.session_disconnect_callback = hcpc_http_session_disconnect_callback,
.session_transport_closed_callback =
return 0;
}
+static int
+hcpc_intercept_connected_callback (u32 app_index, u32 session_index,
+ session_t *s, session_error_t err)
+{
+ clib_warning ("intercept app should not get connected events");
+ return -1;
+}
+
static void
hcpc_intercept_session_disconnect_callback (session_t *s)
{
static session_cb_vft_t listener_session_cb_vft = {
.session_accept_callback = hcpc_intercept_accept_callback,
+ .session_connected_callback = hcpc_intercept_connected_callback,
.session_disconnect_callback = hcpc_intercept_session_disconnect_callback,
.session_transport_closed_callback =
hcpc_intercept_session_transport_closed_callback,