session: remove session logic from io rx evt sender
[vpp.git] / src / vnet / session / application_worker.c
index 85a6fed..a8edad3 100644 (file)
@@ -321,6 +321,30 @@ app_worker_connect_notify (app_worker_t * app_wrk, session_t * s, u32 opaque)
                                                 s, s == 0 /* is_fail */ );
 }
 
+int
+app_worker_close_notify (app_worker_t * app_wrk, session_t * s)
+{
+  application_t *app = application_get (app_wrk->app_index);
+  app->cb_fns.session_disconnect_callback (s);
+  return 0;
+}
+
+int
+app_worker_reset_notify (app_worker_t * app_wrk, session_t * s)
+{
+  application_t *app = application_get (app_wrk->app_index);
+  app->cb_fns.session_reset_callback (s);
+  return 0;
+}
+
+int
+app_worker_builtin_rx (app_worker_t * app_wrk, session_t * s)
+{
+  application_t *app = application_get (app_wrk->app_index);
+  app->cb_fns.builtin_app_rx_callback (s);
+  return 0;
+}
+
 int
 app_worker_own_session (app_worker_t * app_wrk, session_t * s)
 {
@@ -437,7 +461,7 @@ app_worker_first_listener (app_worker_t * app_wrk, u8 fib_proto,
    hash_foreach (handle, sm_index, app_wrk->listeners_table, ({
      listener = listen_session_get_from_handle (handle);
      if (listener->session_type == sst
-        && listener->enqueue_epoch != SESSION_PROXY_LISTENER_INDEX)
+        && !(listener->flags & SESSION_F_PROXY))
        return listener;
    }));
   /* *INDENT-ON* */
@@ -460,8 +484,7 @@ app_worker_proxy_listener (app_worker_t * app_wrk, u8 fib_proto,
   /* *INDENT-OFF* */
    hash_foreach (handle, sm_index, app_wrk->listeners_table, ({
      listener = listen_session_get_from_handle (handle);
-     if (listener->session_type == sst
-        && listener->enqueue_epoch == SESSION_PROXY_LISTENER_INDEX)
+     if (listener->session_type == sst && (listener->flags & SESSION_F_PROXY))
        return listener;
    }));
   /* *INDENT-ON* */
@@ -530,18 +553,10 @@ app_send_io_evt_rx (app_worker_t * app_wrk, session_t * s, u8 lock)
 
   if (PREDICT_FALSE (s->session_state != SESSION_STATE_READY
                     && s->session_state != SESSION_STATE_LISTENING))
-    {
-      /* Session is closed so app will never clean up. Flush rx fifo */
-      if (s->session_state == SESSION_STATE_CLOSED)
-       svm_fifo_dequeue_drop_all (s->rx_fifo);
-      return 0;
-    }
+    return 0;
 
   if (app_worker_application_is_builtin (app_wrk))
-    {
-      application_t *app = application_get (app_wrk->app_index);
-      return app->cb_fns.builtin_app_rx_callback (s);
-    }
+    return app_worker_builtin_rx (app_wrk, s);
 
   if (svm_fifo_has_event (s->rx_fifo))
     return 0;