From ae5e6a11191a019c61d5e11d2b9e399fd94095df Mon Sep 17 00:00:00 2001 From: liuxiyao223 Date: Wed, 8 Nov 2023 16:22:01 +0800 Subject: [PATCH] add websocket client ndk api Signed-off-by: liuxiyao223 --- .../websocketclient/native_websocket_api.h | 137 ++++++++++++++ .../websocketclient/native_websocket_type.h | 177 ++++++++++++++++++ 2 files changed, 314 insertions(+) create mode 100755 zh-cn/native_sdk/websocketclient/native_websocket_api.h create mode 100755 zh-cn/native_sdk/websocketclient/native_websocket_type.h diff --git a/zh-cn/native_sdk/websocketclient/native_websocket_api.h b/zh-cn/native_sdk/websocketclient/native_websocket_api.h new file mode 100755 index 00000000..7a50001a --- /dev/null +++ b/zh-cn/native_sdk/websocketclient/native_websocket_api.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_WEBSOCKET_API_H +#define NATIVE_WEBSOCKET_API_H + +#include +#include +#include + +/** + * @addtogroup netstack + * @{ + * + * @brief 为websocket客户端模块提供C接口 + * + * @since 11 + * @version 1.0 + */ + +/** + * @file native_websocket_api.h + * + * @brief 为websocket客户端模块定义C接口 + * + * @syscap SystemCapability.Communication.Netstack + * @since 11 + * @version 1.0 + */ + +#include "native_websocket_type.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief OH_NetStack_WebsocketClient客户端的构造函数 + * @param onMessage 客户端定义的接收消息的回调函数 + * @param onClose 客户端定义的关闭消息的回调函数 + * @param onError 客户端定义的错误消息的回调函数 + * @param onOpen 客户端定义的建立连接消息的回调函数 + * @since 11 + * @version 1.0 + */ +struct OH_NetStack_WebsocketClient *OH_NetStack_WebsocketClient_Construct( + OH_NetStack_WebsocketClient_OnOpenCallback OnOpen, OH_NetStack_WebsocketClient_OnMessageCallback onMessage, + OH_NetStack_WebsocketClient_OnErrorCallback OnError, OH_NetStack_WebsocketClient_OnCloseCallback onclose); + +/** + * @brief 将header头信息添加到client客户端request中 + * + * @param client 客户端指针 + * @param header header头信息 + * @return 0 - 成功. + * @return 1001 - 客户端client为空 + * @since 11 + * @version 1.0 + */ +int OH_NetStack_WebSocketClient_AddHeader(struct OH_NetStack_WebsocketClient *client, + struct OH_NetStack_WebsocketClient_Slist header); + +/** + * @brief 客户端连接服务端 + * + * @param client 客户端指针 + * @param url 客户端要连接到服务端的地址 + * @param options 发起连接的可选参数 + * @return 0 - 成功. + * @return 1001 - 客户端client为空 + * @return 1004 - 参数解析错误. + * @return 1005 - 创建连接上下文时候内存不够. + * @return 1006 - 连接错误. + * @return 1016 - Head长度超过8k. + * @since 11 + * @version 1.0 + */ +int OH_NetStack_WebSocketClient_Connet(struct OH_NetStack_WebsocketClient *client, const char *url, + struct OH_NetStack_WebsocketClient_RequestOptions options); + +/** + * @brief 客户端向服务端发送数据 + * + * @param client 客户端 + * @param data 客户端发送的数据 + * @param length 客户端发送的数据长度 + * @return 0 - 成功. + * @return 1001 - 客户端client为空 + * @return 1011 - data为空. + * @return 1012 - 长度超过限制. + * @since 11 + * @version 1.0 + */ +int OH_NetStack_WebSocketClient_Send(struct OH_NetStack_WebsocketClient *client, char *data, size_t length); + +/** + * @brief 客户端主动关闭websocket连接 + * + * @param client 客户端 + * @param url 客户端要连接到服务端的地址 + * @param options 发起关闭连接的可选参数 + * @return 0 - 成功. + * @return 1001 - 客户端client为空 + * @since 11 + * @version 1.0 + */ +int OH_NetStack_WebSocketClient_Close(struct OH_NetStack_WebsocketClient *client, + struct OH_NetStack_WebsocketClient_CloseOption options); + +/** + * @brief 释放websocket连接上下文和资源 + * @param client 客户端 + * @return 0 - 成功. + * @return 1001 - 客户端client为空 + * @return 1016 - 连接上下文为空. + * @since 11 + * @version 1.0 + */ +int OH_NetStack_WebsocketClient_Destroy(struct OH_NetStack_WebsocketClient *client); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_WEBSOCKET_API_H diff --git a/zh-cn/native_sdk/websocketclient/native_websocket_type.h b/zh-cn/native_sdk/websocketclient/native_websocket_type.h new file mode 100755 index 00000000..8986203b --- /dev/null +++ b/zh-cn/native_sdk/websocketclient/native_websocket_type.h @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_WEBSOCKET_TYPE_H +#define NATIVE_WEBSOCKET_TYPE_H + +/** + * @addtogroup netstack + * @{ + * + * @brief 为websocket客户端模块的C接口提供数据结构 + * + * @since 11 + * @version 1.0 + */ + +/** + * @file native_websocket_type.h + * @brief 定义websocket客户端模块的C接口需要的数据结构 + * + * @syscap SystemCapability.Communication.Netstack + * @since 11 + * @version 1.0 + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief websocket客户端来自服务端关闭的参数 + * @since 11 + * @version 1.0 + */ +struct OH_NetStack_WebsocketClient_CloseResult { + /** 关闭的错误码 */ + uint32_t code; + /** 关闭的错误原因 */ + const char *reason; +}; + +/** + * @brief websocket客户端主动关闭的参数 + * @since 11 + * @version 1.0 + */ +struct OH_NetStack_WebsocketClient_CloseOption { + /** 关闭的错误码 */ + uint32_t code; + /** 关闭的错误原因 */ + const char *reason; +}; + +/** + * @brief websocket客户端来自服务端连接错误的参数 + * @since 11 + * @version 1.0 + */ +struct OH_NetStack_WebsocketClient_ErrorResult { + /** 错误码 */ + uint32_t errorCode; + /** 错误的消息 */ + const char *errorMessage; +}; + +/** + * @brief websocket客户端来自服务端连接成功的参数 + * @since 11 + * @version 1.0 + */ +struct OH_NetStack_WebsocketClient_OpenResult { + /** websocket客户端连接成功码 */ + uint32_t code; + /** websocket客户端连接原因 */ + const char *reason; +}; + +/** + * @brief websocket客户端接收open消息的回调函数原型 + * @param client websocket客户端 + * @param openResult websocket客户端接收建立连接消息的内容 + * @since 11 + * @version 1.0 + */ +typedef void (*OH_NetStack_WebsocketClient_OnOpenCallback)(struct OH_NetStack_WebsocketClient *client, + OH_NetStack_WebsocketClient_OpenResult openResult); + +/** + * @brief websocket客户端接收数据的回调函数原型 + * @param client websocket客户端 + * @param data websocket客户端接收的数据 + * @param length websocket客户端接收的数据长度 + * @since 11 + * @version 1.0 + */ +typedef void (*OH_NetStack_WebsocketClient_OnMessageCallback)(struct OH_NetStack_WebsocketClient *client, char *data, + uint32_t length); + +/** + * @brief websocket客户端接收error错误消息的回调函数原型 + * @param client websocket客户端 + * @param errorResult websocket客户端接收连接错误消息的内容 + * @since 11 + * @version 1.0 + */ +typedef void (*OH_NetStack_WebsocketClient_OnErrorCallback)(struct OH_NetStack_WebsocketClient *client, + OH_NetStack_WebsocketClient_ErrorResult errorResult); + +/** + * @brief websocket客户端接收close消息的回调函数原型 + * @param client websocket客户端 + * @param closeResult websocket客户端接收关闭消息的内容 + * @since 11 + * @version 1.0 + */ +typedef void (*OH_NetStack_WebsocketClient_OnCloseCallback)(struct OH_NetStack_WebsocketClient *client, + OH_NetStack_WebsocketClient_CloseResult closeResult); + +/** + * @brief websocket客户端增加header头的链表节点 + * @param FieldName header头的字段名 + * @param FieldValue header头的字段内容 + * @param next header头链表的next指针 + * @since 11 + * @version 1.0 + */ +struct OH_NetStack_WebsocketClient_Slist { + const char *FieldName; + const char *FieldValue; + struct OH_NetStack_WebsocketClient_Slist *next; +}; + +/** + *@brief websocket客户端和服务端建立连接的参数 + * @param headers header头信息 + * @since 11 + * @version 1.0 + */ +struct OH_NetStack_WebsocketClient_RequestOptions { + struct OH_NetStack_WebsocketClient_Slist *headers; +}; + +/** + * @brief websocket客户端结构体 + * @param onOpen 客户端接收打开消息的回调指针 + * @param onMessage 客户端接收消息的回调指针 + * @param onError 客户端接收错误消息的回调指针 + * @param onClose 客户端接收关闭消息的回调指针 + * @param RequestOptions 客户端建立连接请求内容 + * @since 11 + * @version 1.0 + */ +struct OH_NetStack_WebsocketClient { + OH_NetStack_WebsocketClient_OnOpenCallback onOpen; + OH_NetStack_WebsocketClient_OnMessageCallback onMessage; + OH_NetStack_WebsocketClient_OnErrorCallback onError; + OH_NetStack_WebsocketClient_OnCloseCallback onClose; + OH_NetStack_WebsocketClient_RequestOptions RequestOptions; +}; + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_WEBSOCKET_API_H -- Gitee