.. | ||
include | ||
src | ||
test | ||
CMakeLists.txt | ||
README.md |
1. 服务器协议接口
1.1. 概述
提供HTTP/FTP/SMTP协议的接口数据,使用curl+openssl开源库二次封装。
1.2. 开发过程记录
- 先编译openssl,再编译curl,curl的构建配置需要指定openssl的输出文件目录,否则curl将会构建失败;
- http协议,指定url,指定post数据,curl即可按照POST发送请求;
- ftp/ftps协议对应不同的服务器IP,必须一一对应;
- curl配置了忽略证书校验,未知有什么实际影响;
- 分别对openssl和curl进行了裁剪;
1.3. 关于MQTT
curl源码包里并未提供MQTT相关的example,网上搜索编码示例未找到。
1.4. Servers协议栈模块构建
使用SifarSDK的构建体系进行编译,编译curl时自动关联openssl进行编译。
- 配置文件(此处以/build/cmake/toolchain/linux.toolchain.cmake为示例):
# ------------ build curl + openssl ------------ start
# 工具链前缀
set(CROSS_COMPILE_PREFIX "")
# 是否启动动态库(预留,暂未支持)
set(CURL_OPENSSL_LIB_SHARED_ENABLE "false")
# ------------ build curl + openssl ------------ end
- 项目根目录编译
make cmake
cd cmake-shell-linux/
make curl // 由于curl属于三方构建的开源库,首次需要先编译curl + openssl
make Servers
1.5. Example
头文件:servser.h 链接库:libServers.a,libLog.a 三方依赖库(依次按序): libcurl.a,libssl.a,libcrypto.a
下述以FTP为例子:
TEST(ServersTest, FtpsUpload)
{
const char *url = "ftp://150.109.112.64/ServersTest";test/bin/ServersTest";
const char *uploadFile = "./ServersTest";
const char *user_password = "ftp_user:Sifar%123456";
ServerParam init = {
.logFlag = LOG_FLAG_ENABLE, // 开启curl日志
.sslVerifyFlag = SSL_VERIFY_DISABLE, //关闭ssl的证书校验功能
};
InitLog(LOG_EASYLOGGING, nullptr); // 初始化自研log库
ServersInit(init); // 初始化Servers模块
LogInfo("servers test start.\n");
ServerFtp *ftp = NewServersFtp(url, FTPS_FLAG_ENABLE); // 创建ftp的参数“句柄”
if (ftp)
{
ftp->user_password = (char *)user_password;
ftp->filePath = (char *)uploadFile;
FtpUpload(ftp); // 使用FTP上传文件
if (SERVERS_CODE_OK == ftp->code)
{
LogInfo("ftp succeed.\n");
}
else
{
LogError("ftp failed, code = %d.\n", static_cast<int>(ftp->code));
}
DeleteServersFtp(ftp); // 释放ftp“句柄”
}
UnInitLog();
}
注意:
- 必须调用servers_init()函数初始化Servers协议栈库;
- 必须使用模块接口创建对应的协议参数“句柄”,示例为new_servers_ftp();
- 必须释放协议参数“句柄”;
更多示例详见:/test/component/Servers/src/ServersTest.cpp
1.6. 测试
libServers.a自研代码通过asan测试,未存在内存安全相关漏洞。 测试用例详见:/test/component/Servers/src/ServersTest.cpp
- 测试用例编译
make cmake
cd cmake-shell-linux/
make ServersTest
1.7. 总结
- 实现http/https/ftp/ftps/smtp/smtps接口;
- 交叉编译测试ftp/ftps上传下载速率大概为1M/s(333DE芯片平台);
- 裁剪openssl和curl后编译的demo大小 < 1.2M;
1.8. S530项目配置
- 工具链
set(CMAKE_C_COMPILER /opt/arm-ca9-linux-uclibcgnueabihf-8.4.01/usr/bin/arm-linux-gcc)
set(CMAKE_CXX_COMPILER /opt/arm-ca9-linux-uclibcgnueabihf-8.4.01/usr/bin/arm-linux-g++)
- curl + openssl
# ------------ build curl + openssl ------------ start
set(CROSS_COMPILE_PREFIX "/opt/arm-ca9-linux-uclibcgnueabihf-8.4.01/usr/bin/arm-linux-")
set(CURL_OPENSSL_LIB_SHARED_ENABLE "false")
set(CURL_SHARED_LIBS_PATH "/mnt/mmc")
# ------------ build curl + openssl ------------ end