hunting/utils/WebServer/README.md
2024-03-05 06:02:19 -08:00

109 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1. Goahead开发文档
## 1.1. Goahead版本
5.2.0
## 1.2. 编译脚本
```
# build goahead before make libgo.a
add_custom_command(
OUTPUT ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/Makefile
COMMAND echo "tar zxvf goahead-5.2.0.tar.gz"
COMMAND tar zxvf goahead-5.2.0.tar.gz // 解压源码包
WORKING_DIRECTORY ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/
)
add_custom_command(
OUTPUT ${EXTERNAL_LIBS_OUTPUT_PATH}/libgo.a
DEPENDS ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/Makefile
COMMAND make CC=${CMAKE_C_COMPILER} ARCH=${SET_ARCH} PROFILE=${LIB_TYPE}
COMMAND mv ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/build/${GOAHEAD_INCLUDE_PATH}/bin/libgo.a ${EXTERNAL_LIBS_OUTPUT_PATH}/libgo.a // 拷贝静态库到output目录
COMMAND mv ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/build/${GOAHEAD_INCLUDE_PATH}/bin/libmbedtls.a ${EXTERNAL_LIBS_OUTPUT_PATH}/libmbedtls.a // 拷贝静态库到output目录
COMMAND mv ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/build/${GOAHEAD_INCLUDE_PATH}/bin/libgoahead-mbedtls.a ${EXTERNAL_LIBS_OUTPUT_PATH}/libgoahead-mbedtls.a // 拷贝静态库到output目录
COMMAND cp ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/build/${GOAHEAD_INCLUDE_PATH}/bin/self.crt ${PLATFORM_PATH}/cmake-shell/ // 拷贝self.crt,self.key两个到运行目录
COMMAND cp ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/build/${GOAHEAD_INCLUDE_PATH}/bin/self.key ${PLATFORM_PATH}/cmake-shell/ // 拷贝self.crt,self.key两个到运行目录
COMMAND cp ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/test/route.txt ${GOAHEAD_CONFIG_FILE_PATH} // 配置文件两个route.txtauth.txt
COMMAND cp ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/test/auth.txt ${GOAHEAD_CONFIG_FILE_PATH} // 配置文件两个route.txtauth.txt
WORKING_DIRECTORY ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead
)
add_custom_target(
libgo.a // 创建goahead目标
DEPENDS ${EXTERNAL_LIBS_OUTPUT_PATH}/libgo.a
)
```
## 1.3. 环境配置
1. 拷贝self.crt,self.key两个到运行目录
2. 配置文件两个route.txtauth.txt
## 1.4. 代码整改
### 1.4.1. web服务安全退出
   由于官方源码是不超时阻塞,为了方便自动化测试,把官方源码的不超时阻塞改成超时阻塞。
```
PUBLIC void websServiceEvents(int *finished)
{
int delay, nextEvent;
if (finished) {
*finished = 0;
}
// ===================== added by xiao ===================== //
// delay = 0; // open source code
#define TIME_OUT_MS 1000
delay = TIME_OUT_MS; // modifed by xiao, time out 1000 ms
// ===================== added by xiao end ===================== //
while (!finished || !*finished) {
if (socketSelect(-1, delay)) {
socketProcess();
}
#if ME_GOAHEAD_CGI
delay = websCgiPoll();
#else
delay = MAXINT;
#endif
nextEvent = websRunEvents();
delay = min(delay, nextEvent);
// ===================== added by xiao ===================== //
delay = (delay <= 0 || delay >= TIME_OUT_MS) ? TIME_OUT_MS : delay;
// ===================== added by xiao end ===================== //
}
}
```
### 1.4.2. HTTP POST 文件限制
&emsp;&emsp; 源码限制POST文件大小太小这里修改为32M。
```
```
## 1.5. goahead的bug
&emsp;&emsp; 当goahead使用无效的ip进行listen时asan工具会报内存泄漏问题目前暂时忽略该bug
```
=================================================================
==1420508==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 17 byte(s) in 1 object(s) allocated from:
#0 0x7f3f4325d808 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:144
#1 0x55bc16b87490 in walloc src/alloc.c:280
#2 0x55bc16b991ae in sclone src/runtime.c:2430
#3 0x55bc16b9be26 in socketParseAddress src/socket.c:1334
#4 0x55bc16b891bf in websListen src/http.c:646
#5 0x55bc16b86f59 in WebServerInit /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/utils/WebServer/src/WebServer.cpp:152
#6 0x55bc16b81f4a in AppManager::HttpServerThread(app_param const&) /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/middleware/AppManager/src/AppManager.cpp:79
#7 0x55bc16b829f0 in operator() /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/middleware/AppManager/src/AppManager.cpp:52
#8 0x55bc16b829f0 in __invoke_impl<void, AppManager::HttpServerStart(const AppParam&)::<lambda(std::shared_ptr<AppManager>)>, std::shared_ptr<AppManager> > /usr/include/c++/9/bits/invoke.h:60
#9 0x55bc16b829f0 in __invoke<AppManager::HttpServerStart(const AppParam&)::<lambda(std::shared_ptr<AppManager>)>, std::shared_ptr<AppManager> > /usr/include/c++/9/bits/invoke.h:95
#10 0x55bc16b829f0 in _M_invoke<0, 1> /usr/include/c++/9/thread:244
#11 0x55bc16b829f0 in operator() /usr/include/c++/9/thread:251
#12 0x55bc16b829f0 in _M_run /usr/include/c++/9/thread:195
#13 0x7f3f4301bdf3 (/lib/x86_64-linux-gnu/libstdc++.so.6+0xd6df3)
SUMMARY: AddressSanitizer: 17 byte(s) leaked in 1 allocation(s).
```