mirror of
				https://github.com/bytecodealliance/wasm-micro-runtime.git
				synced 2025-10-31 05:11:19 +00:00 
			
		
		
		
	 32242988ed
			
		
	
	
		32242988ed
		
			
		
	
	
	
	
		
			
			Apply clang-format for C source files in folder core/app-mgr, core/app-framework, and test-tools. And rename folder component_test to component-test, update zephyr build document. Signed-off-by: Wenyong Huang <wenyong.huang@intel.com>
		
			
				
	
	
		
			119 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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;
 | |
|     }
 | |
| }
 |