summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/app-framework/connection/app/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/app-framework/connection/app/connection.c')
-rw-r--r--fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/app-framework/connection/app/connection.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/app-framework/connection/app/connection.c b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/app-framework/connection/app/connection.c
new file mode 100644
index 000000000..b5b2bfc54
--- /dev/null
+++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/app-framework/connection/app/connection.c
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2019 Intel Corporation. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ */
+
+#include "wa-inc/connection.h"
+#include "connection_api.h"
+
+/* Raw connection structure */
+typedef struct _connection {
+ /* Next connection */
+ struct _connection *next;
+
+ /* Handle of the connection */
+ uint32 handle;
+
+ /* Callback function called when event on this connection occurs */
+ on_connection_event_f on_event;
+
+ /* User data */
+ void *user_data;
+} connection_t;
+
+/* Raw connections list */
+static connection_t *g_conns = NULL;
+
+connection_t *
+api_open_connection(const char *name, attr_container_t *args,
+ on_connection_event_f on_event, void *user_data)
+{
+ connection_t *conn;
+ char *args_buffer = (char *)args;
+ uint32 handle, args_len = attr_container_get_serialize_length(args);
+
+ handle = wasm_open_connection(name, args_buffer, args_len);
+ if (handle == -1)
+ return NULL;
+
+ conn = (connection_t *)malloc(sizeof(*conn));
+ if (conn == NULL) {
+ wasm_close_connection(handle);
+ return NULL;
+ }
+
+ memset(conn, 0, sizeof(*conn));
+ conn->handle = handle;
+ conn->on_event = on_event;
+ conn->user_data = user_data;
+
+ if (g_conns != NULL) {
+ conn->next = g_conns;
+ g_conns = conn;
+ }
+ else {
+ g_conns = conn;
+ }
+
+ return conn;
+}
+
+void
+api_close_connection(connection_t *c)
+{
+ connection_t *conn = g_conns, *prev = NULL;
+
+ while (conn) {
+ if (conn == c) {
+ wasm_close_connection(c->handle);
+ if (prev != NULL)
+ prev->next = conn->next;
+ else
+ g_conns = conn->next;
+ free(conn);
+ return;
+ }
+ else {
+ prev = conn;
+ conn = conn->next;
+ }
+ }
+}
+
+int
+api_send_on_connection(connection_t *conn, const char *data, uint32 len)
+{
+ return wasm_send_on_connection(conn->handle, data, len);
+}
+
+bool
+api_config_connection(connection_t *conn, attr_container_t *cfg)
+{
+ char *cfg_buffer = (char *)cfg;
+ uint32 cfg_len = attr_container_get_serialize_length(cfg);
+
+ return wasm_config_connection(conn->handle, cfg_buffer, cfg_len);
+}
+
+void
+on_connection_data(uint32 handle, char *buffer, uint32 len)
+{
+ connection_t *conn = g_conns;
+
+ while (conn != NULL) {
+ if (conn->handle == handle) {
+ if (len == 0) {
+ conn->on_event(conn, CONN_EVENT_TYPE_DISCONNECT, NULL, 0,
+ conn->user_data);
+ }
+ else {
+ conn->on_event(conn, CONN_EVENT_TYPE_DATA, buffer, len,
+ conn->user_data);
+ }
+
+ return;
+ }
+ conn = conn->next;
+ }
+}