diff --git a/thirdparty/libwebsockets/HPKBUILD b/thirdparty/libwebsockets/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..d2ef76c5ac38ed76994e6e8f43c6eb67cb6a1979 --- /dev/null +++ b/thirdparty/libwebsockets/HPKBUILD @@ -0,0 +1,131 @@ +# Copyright (c) 2024, HiHope Community. +# 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. + +# Contributor: jiajiahao +# Maintainer: jiajiajiao + +pkgname=libwebsockets +pkgver=v4.3.3 +pkgrel=0 +pkgdesc="Libwebsockets (LWS) is a lightweight and pure C library that allows you to implement various network protocols easily with a nonblocking event loop. " +url="https://libwebsockets.org/" +archs=("armeabi-v7a" "arm64-v8a") +license=("MIT License" "BSD2" "BSD3" "ZLIB" "APACHE2" "CC0") +depends=("openssl_1_0_2u" "zlib" "sqlite" "libuv" "libevent") +makedepends=() + +# 官方下载地址https://github.com/libwebsockets/$pkgname/archive/refs/tags/$pkgver.zip受网络影响可能存在下载失败的情况,现使用gitee镜像可以与官方仓库保持同步 +source="https://gitee.com/mirrors/${pkgname}source/repository/archive/$pkgver.zip" + +downloadpackage=true +autounpack=true +builddir=${pkgname}source-${pkgver} +packagename=$builddir.zip + +prepare() { + mkdir -p $builddir/$ARCH-build +} + +# 编译armeabi-v7a添加openssl_1_0_2u依赖,编译arm64-v8a关闭openssl_1_0_2u依赖 +# -DLWS_OPENSSL_SUPPORT=1 支持openssl +# -DLWS_WITH_ZLIB=ON 添加zlib依赖 +# -DLWS_WITH_SQLITE3=ON 添加sqlite依赖 +# -DLWS_WITH_LIBUV=ON 添加libuv依赖 +# -DLWS_WITH_LIBEVENT=ON 添加libevent依赖 +# -DLWS_ROLE_MQTT=ON 添加MQTT client注释 +# -DLWS_IPV6=ON 添加IPV6的支持 +# -DLWS_WITH_LWSWS=ON 添加Libwebsockets Webserve的支持 +# -DLWS_WITH_HTTP_PROXY=ON 添加active HTTP proxying的支持 +# -DLWS_WITH_ZIP_FOPS=ON 添加serving pre-zipped files的支持 +# -DLWS_WITH_SOCKS5=ON 允许在客户端连接中使用SOCKS5代理 +# -DLWS_ROLE_RAW_PROXY=ON 添加Raw packet proxy的支持 +# -DLWS_WITH_PEER_LIMITS=ON 追踪对等方并限制单个对等方可以分配的资源 +# -DLWS_WITH_RANGES=ON 支持http ranges (RFC7233) +# -DLWS_WITH_THREADPOOL=ON 支持受控的工作线程池(依赖于pthread) +# -DLWS_WITH_HTTP_STREAM_COMPRESSION=ON 支持HTTP流压缩 +# -DLWS_WITH_ALSA=ON 启用alsa音频示例 +# -DLWS_WITH_GTK=ON 启用gtk示例 +# -DLWS_WITH_FTS=ON 支持全文搜索 +# -DLWS_WITH_SYS_ASYNC_DNS=ON 支持非阻塞的内部IPv4 + IPv6 DNS解析器 +# -DLWS_WITH_SYS_DHCP_CLIENT=ON 内置的小型ntp客户端适用于TLS日期验证并通过lws_system运行 +# -DLWS_WITH_SYS_FAULT_INJECTION=ON 支持内置的小型DHCP客户端 +# -DLWS_WITH_SYS_METRICS=ON 启用故障注入支持 +# -DLWS_WITH_SECURE_STREAMS=ON 支持Lws Metrics AP +# -DLWS_WITH_SECURE_STREAMS_PROXY_API=ON 支持 Secure Streams protocol-agnostic API +# -DLWS_WITH_SECURE_STREAMS_AUTH_SIGV4=ON 将 Secure Streams 支持扩展到跨进程工作 +# -DLWS_WITH_SECURE_STREAMS_BUFFER_DUMP=ON 将 Secure Streams Auth 支持扩展到 AWS Sigv4 +build() { + cd $builddir + if [ $ARCH == "armeabi-v7a" ] + then + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" \ + -DLWS_OPENSSL_SUPPORT=1 \ + -DLWS_OPENSSL_INCLUDE_DIRS="$LYCIUM_ROOT/usr/openssl_1_0_2u/$ARCH/include" \ + -DLWS_OPENSSL_LIBRARIES="$LYCIUM_ROOT/usr/openssl_1_0_2u/$ARCH/lib/libssl.a;$LYCIUM_ROOT/usr/openssl_1_0_2u/$ARCH/lib/libcrypto.a" \ + -DLWS_WITH_ZLIB=ON \ + -DLWS_ZLIB_LIBRARIES="$LYCIUM_ROOT/usr/zlib/$ARCH/lib/libz.a" \ + -DLWS_ZLIB_INCLUDE_DIRS="$LYCIUM_ROOT/usr/zlib/$ARCH/include" \ + -DLWS_WITH_SQLITE3=ON \ + -DLWS_SQLITE3_LIBRARIES="$LYCIUM_ROOT/usr/sqlite/$ARCH/lib/libsqlite3.a" \ + -DLWS_SQLITE3_INCLUDE_DIRS="$LYCIUM_ROOT/usr/sqlite/$ARCH/include" \ + -DLWS_WITH_LIBUV=ON \ + -DLWS_LIBUV_LIBRARIES="$LYCIUM_ROOT/usr/libuv/$ARCH/lib/libuv_a.a" \ + -DLWS_LIBUV_INCLUDE_DIRS="$LYCIUM_ROOT/libuv/$ARCH/include" \ + -DLWS_WITH_LIBEVENT=ON \ + -DLIBEVENT_LIBRARIES="$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_core.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_extra.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_openssl.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_pthreads.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent.a" \ + -DLIBEVENT_INCLUDE_DIRS="$LYCIUM_ROOT/usr/libevent/$ARCH/include" \ + -DLWS_ROLE_MQTT=ON -DLWS_IPV6=ON -DLWS_WITH_LWSWS=ON -DLWS_WITH_HTTP_PROXY=ON -DLWS_WITH_ZIP_FOPS=ON -DLWS_WITH_SOCKS5=ON -DLWS_ROLE_RAW_PROXY=ON -DLWS_WITH_PEER_LIMITS=ON -DLWS_WITH_RANGES=ON -DLWS_WITH_THREADPOOL=ON -DLWS_WITH_HTTP_STREAM_COMPRESSION=ON -DLWS_WITH_ALSA=ON -DLWS_WITH_GTK=ON -DLWS_WITH_FTS=ON -DLWS_WITH_SYS_ASYNC_DNS=ON -DLWS_WITH_SYS_DHCP_CLIENT=ON -DLWS_WITH_SYS_FAULT_INJECTION=ON -DLWS_WITH_SYS_METRICS=ON -DLWS_WITH_SECURE_STREAMS=ON -DLWS_WITH_SECURE_STREAMS_PROXY_API=ON -DLWS_WITH_SECURE_STREAMS_AUTH_SIGV4=ON -DLWS_WITH_SECURE_STREAMS_BUFFER_DUMP=ON \ + -DCMAKE_C_FLAGS="-Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-command-line-argument" \ + -B$ARCH-build -S./ > $buildlog 2>&1 + elif [ $ARCH == "arm64-v8a" ] + then + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" \ + -DLWS_WITH_SSL=OFF \ + -DLWS_WITH_ZLIB=ON \ + -DLWS_ZLIB_LIBRARIES="$LYCIUM_ROOT/usr/zlib/$ARCH/lib/libz.a" \ + -DLWS_ZLIB_INCLUDE_DIRS="$LYCIUM_ROOT/usr/zlib/$ARCH/include" \ + -DLWS_WITH_SQLITE3=ON \ + -DLWS_SQLITE3_LIBRARIES="$LYCIUM_ROOT/usr/sqlite/$ARCH/lib/libsqlite3.a" \ + -DLWS_SQLITE3_INCLUDE_DIRS="$LYCIUM_ROOT/usr/sqlite/$ARCH/include" \ + -DLWS_WITH_LIBUV=ON \ + -DLWS_LIBUV_LIBRARIES="$LYCIUM_ROOT/usr/libuv/$ARCH/lib/libuv_a.a" \ + -DLWS_LIBUV_INCLUDE_DIRS="$LYCIUM_ROOT/libuv/$ARCH/include" \ + -DLWS_WITH_LIBEVENT=ON \ + -DLIBEVENT_LIBRARIES="$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_core.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_extra.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_openssl.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_pthreads.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent.a" \ + -DLIBEVENT_INCLUDE_DIRS="$LYCIUM_ROOT/usr/libevent/$ARCH/include" \ + -DCMAKE_C_FLAGS="-Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-command-line-argument" \ + -B$ARCH-build -S./ > $buildlog 2>&1 + else + echo "${ARCH} not support" + fi + $MAKE VERBOSE=1 -C $ARCH-build >> $buildlog 2>&1 # 此处使用$MAKE,在lycium/build.sh中定义,变量值为make -j32。日志路径使用变量build.log + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir + make -C $ARCH-build install >> $buildlog 2>&1 # 日志路径使用变量build.log + cd $OLDPWD +} + +check() { + echo "The test must be on an OpenHarmony device!" + # TODO +} + +# 清理环境 +cleanbuild() { + rm -rf ${PWD}/$builddir #${PWD}/$packagename +} \ No newline at end of file diff --git a/thirdparty/libwebsockets/OAT.xml b/thirdparty/libwebsockets/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..5663c536ddecb545bb824af7a320605c8072e4f4 --- /dev/null +++ b/thirdparty/libwebsockets/OAT.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/thirdparty/libwebsockets/README.OpenSource b/thirdparty/libwebsockets/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..9f8819d4dc636f9a388dd9868c29f0eb233c8566 --- /dev/null +++ b/thirdparty/libwebsockets/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libwebsockets", + "License": "MIT License", + "License File": "LICENSE", + "Version Number": "v4.3.3", + "Owner": "jia_jiahao@runkaihong.com.cn", + "Upstream URL": "https://libwebsockets.org/", + "Description": "Libwebsockets (LWS) is a lightweight and pure C library that allows you to implement various network protocols easily with a nonblocking event loop" + } +] \ No newline at end of file diff --git a/thirdparty/libwebsockets/README_zh.md b/thirdparty/libwebsockets/README_zh.md new file mode 100644 index 0000000000000000000000000000000000000000..73a5d5ddd29852c90d75cee1ea967ff28432b24c --- /dev/null +++ b/thirdparty/libwebsockets/README_zh.md @@ -0,0 +1,12 @@ +# libwebsockets 三方库说明 +## 功能简介 + +libwebsockets是一款轻量级用来开发服务器和客户端的C库。 + +## 使用约束 +- IDE版本:DevEco Studio 4.1 Release +- SDK版本:ohos_sdk_public 4.1.7.8 (API Version 11 Release) +- 三方库版本:v4.3.3 + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) \ No newline at end of file diff --git a/thirdparty/libwebsockets/SHA512SUM b/thirdparty/libwebsockets/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..9189fd8e361523b3a1075721ca8e8d05303d2fb8 --- /dev/null +++ b/thirdparty/libwebsockets/SHA512SUM @@ -0,0 +1 @@ +fb9e8c139c8b32532fac8b36ef43b0a6cca64709d5653b427de04979c459e4261c7ec92780359a77c15d72db31b393d8f8e08ad2913f91e0ada5ebe30ae736fb libwebsocketssource-v4.3.3.zip \ No newline at end of file diff --git a/thirdparty/libwebsockets/docs/hap_integrate.md b/thirdparty/libwebsockets/docs/hap_integrate.md new file mode 100644 index 0000000000000000000000000000000000000000..1d71d329454b4381a0e17eaba1c8d760fb0dd11b --- /dev/null +++ b/thirdparty/libwebsockets/docs/hap_integrate.md @@ -0,0 +1,105 @@ +# libwebsockets在OpenHarHarmony上运行 + +本库是在RK3568开发板上基于OpenHarmony4.1 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- [开发环境准备](../../../docs/hap_integrate_environment.md) + +## 编译三方库 + +- 下载本仓库 + + ``` + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/libwebsockets #三方库libwebsockets的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── README_zh.md #libwebsockets说明文档 + ├── SHA512SUM #三方库校验文件 + ├── OAT.xml #OAT开源审查文本 + ``` + +- 在lycium目录下编译三方库 + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + + ``` + cd lycium + ./build.sh libwebsockets + ``` + +- 三方库头文件及生成的库 + + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件 + + ```shell + libwebsockets/arm64-v8a + libwebsockets/armeabi-v7a + ``` +- [测试三方库](#测试三方库) + + +## 应用中使用三方库 +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下 +   + +![alt text](./pic/thirdparty.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + +```shell +#将三方库加入工程中 +target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libwebsockets/${OHOS_ARCH}/lib/libwebsockets.a) +#将三方库的头文件加入工程中 +target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libwebsockets/${OHOS_ARCH}/include) +``` + +![alt text](./pic/target_link_libraries.png) + +## 测试三方库 + +三方库的测试使用原生库自带的测试样例来测试。 + +1.将编译生成的可执行文件准备好,`libwebsockets-test-client`、`libwebsockets-test-server`文件位于lycium/usr/libwebsockets/${OHOS_ARCH}/bin目录 + +2.将准备好的文件推送到开发板,进入到构建的目录添加执行文件权限 + +``` +# 将libwebsockets-test-client、libwebsockets-test-server可执行文件发送到开发板data目录 +hdc file send libwebsockets-test-client /data +hdc file send libwebsockets-test-server /data +``` + +3.hdc shell发起一个终端,运行libwebsockets服务端 + +``` +cd data +chmod 777 libwebsockets-test-server +./libwebsockets-test-server +``` +通过执行`netstat -ntlp`命令查看端口可以看到,libwebsockets-test-server 测试程序开启了服务器端口为7681 +![alt text](./pic/test.png) + +4.hdc shell发起另外一个终端运行客户端 + +``` +cd data +chmod 777 libwebsockets-test-client +./libwebsockets-test-client 127.0.0.1 --port=7681 +``` + +在 libwebsockets-test-server 中可以看到 libwebsockets-test-client 的多次连接信息,如下所示: + +![alt text](./pic/test1.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) +- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) diff --git a/thirdparty/libwebsockets/docs/pic/target_link_libraries.png b/thirdparty/libwebsockets/docs/pic/target_link_libraries.png new file mode 100644 index 0000000000000000000000000000000000000000..045ffd0ba3b8d012aa810d5393d1dc8336bae1a9 Binary files /dev/null and b/thirdparty/libwebsockets/docs/pic/target_link_libraries.png differ diff --git a/thirdparty/libwebsockets/docs/pic/test.png b/thirdparty/libwebsockets/docs/pic/test.png new file mode 100644 index 0000000000000000000000000000000000000000..32bfcc30c6f9055a3b45568be60ffed04b8a398e Binary files /dev/null and b/thirdparty/libwebsockets/docs/pic/test.png differ diff --git a/thirdparty/libwebsockets/docs/pic/test1.png b/thirdparty/libwebsockets/docs/pic/test1.png new file mode 100644 index 0000000000000000000000000000000000000000..85f97575c6c3039a96df580b57faab1b7f3af46e Binary files /dev/null and b/thirdparty/libwebsockets/docs/pic/test1.png differ diff --git a/thirdparty/libwebsockets/docs/pic/thirdparty.png b/thirdparty/libwebsockets/docs/pic/thirdparty.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe56f248a3b155f2b52b696294db517b8f0fea6 Binary files /dev/null and b/thirdparty/libwebsockets/docs/pic/thirdparty.png differ