diff --git a/attachments/kong/plugins/open-appsec-waf-kong-plugin/handler.lua b/attachments/kong/plugins/open-appsec-waf-kong-plugin/handler.lua index 3f31f17..dd746e8 100755 --- a/attachments/kong/plugins/open-appsec-waf-kong-plugin/handler.lua +++ b/attachments/kong/plugins/open-appsec-waf-kong-plugin/handler.lua @@ -14,6 +14,7 @@ NanoHandler.processed_requests = {} -- per-worker state local pending = {} -- sid -> { semaphore, verdict } +local verdict_listener_started = false local function drain_queue() kong.log.debug("drain_queue: Starting to drain queue") @@ -38,10 +39,16 @@ local function drain_queue() end local function start_verdict_listener() + if verdict_listener_started then + kong.log.debug("Verdict listener already started, skipping") + return true + end + local socket_fd = nano.get_attachment_socket() if not socket_fd or socket_fd < 0 then kong.log.err("Failed to get attachment socket") - return + verdict_listener_started = false + return false end kong.log.info("Starting verdict listener on socket fd: ", socket_fd) @@ -58,10 +65,12 @@ local function start_verdict_listener() local ok, err = sock:setfd(socket_fd) if not ok then kong.log.err("Failed to set socket fd: ", err) + verdict_listener_started = false return end kong.log.info("Listening on verdict socket") + verdict_listener_started = true while true do -- Use socket as a doorbell - wait for any data @@ -71,8 +80,9 @@ local function start_verdict_listener() -- Continue waiting goto continue else - kong.log.err("verdict_listener: Error receiving from verdict socket: ", err) - goto continue + kong.log.err("verdict_listener: Fatal error receiving from verdict socket: ", err, " - marking listener as stopped") + verdict_listener_started = false + break end end @@ -95,6 +105,12 @@ end -- **Handles Request Headers (DecodeHeaders Equivalent)** function NanoHandler.access(conf) + -- Ensure verdict listener is running + if not verdict_listener_started then + kong.log.info("access: Verdict listener not started, attempting to start") + start_verdict_listener() + end + kong.log.debug("access: Starting access phase") local headers = kong.request.get_headers() local session_id = nano.generate_session_id() diff --git a/core/shmem_ipc_2/shared_ring_queue.h b/core/shmem_ipc_2/shared_ring_queue.h index 69579ab..ecb7911 100755 --- a/core/shmem_ipc_2/shared_ring_queue.h +++ b/core/shmem_ipc_2/shared_ring_queue.h @@ -23,7 +23,7 @@ extern "C" { #endif // __cplusplus -#define SHARED_MEMORY_SEGMENT_ENTRY_SIZE 1024 +#define SHARED_MEMORY_SEGMENT_ENTRY_SIZE 4096 #define MAX_ONE_WAY_QUEUE_NAME_LENGTH 64 #define CORRUPTED_SHMEM_ERROR -2