Modify:Goahead open source code.

This commit is contained in:
Fancy code 2024-02-29 23:29:35 -08:00
parent 480d5ee9c7
commit 08031ed4fa
11 changed files with 3652 additions and 17 deletions

3546
external/goahead-5.2.0/modify/http.c vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -9,6 +9,7 @@ include_directories(
${UTILS_SOURCE_PATH}/StatusCode/include
${UTILS_SOURCE_PATH}/Log/include
${UTILS_SOURCE_PATH}/FxHttpServer/include
${UTILS_SOURCE_PATH}/WebServer/include
${HAL_SOURCE_PATH}/include
)
#do not rely on any other library
@ -21,7 +22,7 @@ aux_source_directory(./src/Protocol/SixFrame SRC_FILES)
set(TARGET_NAME AppManager)
add_library(${TARGET_NAME} STATIC ${SRC_FILES})
target_link_libraries(${TARGET_NAME} FxHttpServer StatusCode Log)
target_link_libraries(${TARGET_NAME} WebServer StatusCode Log)
if ("${CLANG_TIDY_SUPPORT}" MATCHES "true")
add_custom_target(

View File

@ -14,8 +14,9 @@
*/
#include "AppManager.h"
#include "AppManagerMakePtr.h"
#include "FxHttpServer.h"
// #include "FxHttpServer.h"
#include "ILog.h"
#include "WebServer.h"
AppManager::AppManager()
{
//
@ -49,7 +50,8 @@ void AppManager::HttpServerStart(void)
}
void AppManager::HttpServerStop(void)
{
FxHttpServerExit();
// FxHttpServerExit();
WebServerExit();
if (mHttpSever.joinable()) {
mHttpSever.join();
}
@ -66,6 +68,9 @@ void AppManager::HttpServerThread(void)
appImpl->AppRequestHandle(url, urlLength, responseHandle, context);
}
};
FxHttpServerInit(httpHandle, 8080);
FxHttpServerUnInit();
}
// FxHttpServerInit(httpHandle, 8080);
// FxHttpServerUnInit();
WebServerParam web = {.mIp = "192.168.1.29", .mPort = 8888, .mHttpRequestHandle = httpHandle};
WebServerInit(web);
WebServerUnInit();
}

View File

@ -31,7 +31,6 @@ bool CreateAppManagerModule(void)
bool DestroyAppManagerModule(void)
{
auto instance = std::make_shared<IAppManager>();
IAppManager::GetInstance()->UnInit();
IAppManager::GetInstance(&instance);
return true;
}

View File

@ -8,7 +8,7 @@ include_directories(
./tool/include
${UTILS_SOURCE_PATH}/Log/include
${UTILS_SOURCE_PATH}/StatusCode/include
# ${UTILS_SOURCE_PATH}/UartDevice/include
# ${UTILS_SOURCE_PATH}/WebServer/include
# ${UTILS_SOURCE_PATH}/McuProtocol/include
${UTILS_SOURCE_PATH}/KeyControl/include
${UTILS_SOURCE_PATH}/LedControl/include

View File

@ -14,6 +14,7 @@
*/
#include "IAppManager.h"
#include "ILog.h"
// #include "WebServer.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <thread>

View File

@ -24,7 +24,8 @@ TEST(WebServerTest, Demo)
{
CreateLogModule();
ILogInit(LOG_INSTANCE_TYPE_END);
WebServerInit();
WebServerParam web = {.mIp = "192.168.1.29", .mPort = 8080};
WebServerInit(web);
// std::this_thread::sleep_for(std::chrono::milliseconds(1000 * 10));
ILogUnInit();
}

View File

@ -15,8 +15,6 @@ include_directories(
# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs
# )
if (NOT DEFINED GOAHEAD_DOCUMENTS_PATH)
set(GOAHEAD_DOCUMENTS_PATH "web")
endif()
@ -68,6 +66,7 @@ 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
COMMAND cp ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/modify/http.c ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/src
WORKING_DIRECTORY ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/
)
add_custom_command(

View File

@ -36,4 +36,38 @@ add_custom_target(
## 1.3. 环境配置
1. 拷贝self.crt,self.key两个到运行目录
2. 配置文件两个route.txtauth.txt
2. 配置文件两个route.txtauth.txt
## 1.4. 代码整改
&emsp;&emsp; 由于官方源码是不超时阻塞,为了方便自动化测试,把官方源码的不超时阻塞改成超时阻塞。
```
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 ===================== //
}
}
```

View File

@ -18,7 +18,16 @@
#ifdef __cplusplus
extern "C" {
#endif
StatusCode WebServerInit(void);
typedef void (*ResponseHandle)(const char *, void *);
typedef void (*HttpHandleCallback)(const char *, const unsigned int, ResponseHandle, void *);
typedef struct web_server_param
{
const char *mIp;
int mPort;
HttpHandleCallback mHttpRequestHandle;
} WebServerParam;
StatusCode WebServerInit(const WebServerParam webParam);
StatusCode WebServerExit(void);
StatusCode WebServerUnInit(void);
#ifdef __cplusplus
}

View File

@ -27,7 +27,10 @@ static void logHeader(void)
{
char home[ME_GOAHEAD_LIMIT_STRING];
getcwd(home, sizeof(home));
char *result = getcwd(home, sizeof(home));
if (nullptr == result) {
LogWarning("Can't get path.\n");
}
logmsg(2, "Configuration for %s", ME_TITLE);
logmsg(2, "---------------------------------------------");
logmsg(2, "Version: %s", ME_VERSION);
@ -47,7 +50,30 @@ void initPlatform(void)
signal(SIGKILL, sigHandler);
signal(SIGPIPE, SIG_IGN);
}
StatusCode WebServerInit(void)
static bool testHandler(Webs *wp)
{
if (smatch(wp->path, "/")) {
// websRewriteRequest(wp, "/home.html");
/* Fall through */
}
LogInfo("sssssssssssssssssssssssssssss url = %s\n", wp->url);
// websSetStatus(wp, HTTP_CODE_OK);
// websWriteHeaders(wp, 0, 0);
// websWriteEndHeaders(wp);
// websWrite(wp, "<html><body><h2>");
// websWrite(wp, "sssssssssssssssssssssss");
// websWrite(wp, "</h2></body></html>\n");
// websDone(wp);
websSetStatus(wp, 200);
websWriteHeaders(wp, -1, 0);
websWriteHeader(wp, "Content-Type", "text/plain");
websWriteEndHeaders(wp);
websWrite(wp, "Hello Legacy World\n");
websDone(wp);
return 1;
return 1;
}
StatusCode WebServerInit(const WebServerParam webParam)
{
websSetDebug(1);
logSetPath("stdout:2");
@ -55,8 +81,10 @@ StatusCode WebServerInit(void)
constexpr int BUF_LENGTH = 128;
char routePath[BUF_LENGTH] = {0};
char authPath[BUF_LENGTH] = {0};
char listen[BUF_LENGTH] = {0};
snprintf(routePath, BUF_LENGTH, "%s/route.txt", GOAHEAD_CONFIG_FILE_PATH);
snprintf(authPath, BUF_LENGTH, "%s/auth.txt", GOAHEAD_CONFIG_FILE_PATH);
snprintf(listen, BUF_LENGTH, "%s:%d", webParam.mIp, webParam.mPort);
initPlatform();
if (websOpen(documents, routePath) < 0) {
LogError("Cannot initialize server. Exiting.\n");
@ -67,12 +95,24 @@ StatusCode WebServerInit(void)
LogError("Cannot load %s", authPath);
return CreateStatusCode(STATUS_CODE_NOT_OK);
}
if (websListen("192.168.1.189:8080") < 0) {
if (websListen(listen) < 0) {
return CreateStatusCode(STATUS_CODE_NOT_OK);
}
websDefineHandler("test", 0, testHandler, 0, 0);
websAddRoute("/test", "test", 0);
websServiceEvents(&finished);
logmsg(1, "Instructed to exit\n");
websClose();
return CreateStatusCode(STATUS_CODE_OK);
}
StatusCode WebServerUnInit(void) { return CreateStatusCode(STATUS_CODE_OK); }
StatusCode WebServerExit(void)
{
LogInfo("Stop goahead web server.\n");
finished = 1;
return CreateStatusCode(STATUS_CODE_OK);
}
StatusCode WebServerUnInit(void)
{
LogInfo("WebServerUnInit.\n");
return CreateStatusCode(STATUS_CODE_OK);
}