Modify:Goahead open source code.
This commit is contained in:
parent
480d5ee9c7
commit
08031ed4fa
3546
external/goahead-5.2.0/modify/http.c
vendored
Normal file
3546
external/goahead-5.2.0/modify/http.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -9,6 +9,7 @@ include_directories(
|
||||||
${UTILS_SOURCE_PATH}/StatusCode/include
|
${UTILS_SOURCE_PATH}/StatusCode/include
|
||||||
${UTILS_SOURCE_PATH}/Log/include
|
${UTILS_SOURCE_PATH}/Log/include
|
||||||
${UTILS_SOURCE_PATH}/FxHttpServer/include
|
${UTILS_SOURCE_PATH}/FxHttpServer/include
|
||||||
|
${UTILS_SOURCE_PATH}/WebServer/include
|
||||||
${HAL_SOURCE_PATH}/include
|
${HAL_SOURCE_PATH}/include
|
||||||
)
|
)
|
||||||
#do not rely on any other library
|
#do not rely on any other library
|
||||||
|
@ -21,7 +22,7 @@ aux_source_directory(./src/Protocol/SixFrame SRC_FILES)
|
||||||
set(TARGET_NAME AppManager)
|
set(TARGET_NAME AppManager)
|
||||||
add_library(${TARGET_NAME} STATIC ${SRC_FILES})
|
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")
|
if ("${CLANG_TIDY_SUPPORT}" MATCHES "true")
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
|
|
|
@ -14,8 +14,9 @@
|
||||||
*/
|
*/
|
||||||
#include "AppManager.h"
|
#include "AppManager.h"
|
||||||
#include "AppManagerMakePtr.h"
|
#include "AppManagerMakePtr.h"
|
||||||
#include "FxHttpServer.h"
|
// #include "FxHttpServer.h"
|
||||||
#include "ILog.h"
|
#include "ILog.h"
|
||||||
|
#include "WebServer.h"
|
||||||
AppManager::AppManager()
|
AppManager::AppManager()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
@ -49,7 +50,8 @@ void AppManager::HttpServerStart(void)
|
||||||
}
|
}
|
||||||
void AppManager::HttpServerStop(void)
|
void AppManager::HttpServerStop(void)
|
||||||
{
|
{
|
||||||
FxHttpServerExit();
|
// FxHttpServerExit();
|
||||||
|
WebServerExit();
|
||||||
if (mHttpSever.joinable()) {
|
if (mHttpSever.joinable()) {
|
||||||
mHttpSever.join();
|
mHttpSever.join();
|
||||||
}
|
}
|
||||||
|
@ -66,6 +68,9 @@ void AppManager::HttpServerThread(void)
|
||||||
appImpl->AppRequestHandle(url, urlLength, responseHandle, context);
|
appImpl->AppRequestHandle(url, urlLength, responseHandle, context);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
FxHttpServerInit(httpHandle, 8080);
|
// FxHttpServerInit(httpHandle, 8080);
|
||||||
FxHttpServerUnInit();
|
// FxHttpServerUnInit();
|
||||||
|
WebServerParam web = {.mIp = "192.168.1.29", .mPort = 8888, .mHttpRequestHandle = httpHandle};
|
||||||
|
WebServerInit(web);
|
||||||
|
WebServerUnInit();
|
||||||
}
|
}
|
|
@ -31,7 +31,6 @@ bool CreateAppManagerModule(void)
|
||||||
bool DestroyAppManagerModule(void)
|
bool DestroyAppManagerModule(void)
|
||||||
{
|
{
|
||||||
auto instance = std::make_shared<IAppManager>();
|
auto instance = std::make_shared<IAppManager>();
|
||||||
IAppManager::GetInstance()->UnInit();
|
|
||||||
IAppManager::GetInstance(&instance);
|
IAppManager::GetInstance(&instance);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ include_directories(
|
||||||
./tool/include
|
./tool/include
|
||||||
${UTILS_SOURCE_PATH}/Log/include
|
${UTILS_SOURCE_PATH}/Log/include
|
||||||
${UTILS_SOURCE_PATH}/StatusCode/include
|
${UTILS_SOURCE_PATH}/StatusCode/include
|
||||||
# ${UTILS_SOURCE_PATH}/UartDevice/include
|
# ${UTILS_SOURCE_PATH}/WebServer/include
|
||||||
# ${UTILS_SOURCE_PATH}/McuProtocol/include
|
# ${UTILS_SOURCE_PATH}/McuProtocol/include
|
||||||
${UTILS_SOURCE_PATH}/KeyControl/include
|
${UTILS_SOURCE_PATH}/KeyControl/include
|
||||||
${UTILS_SOURCE_PATH}/LedControl/include
|
${UTILS_SOURCE_PATH}/LedControl/include
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
*/
|
*/
|
||||||
#include "IAppManager.h"
|
#include "IAppManager.h"
|
||||||
#include "ILog.h"
|
#include "ILog.h"
|
||||||
|
// #include "WebServer.h"
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
|
@ -24,7 +24,8 @@ TEST(WebServerTest, Demo)
|
||||||
{
|
{
|
||||||
CreateLogModule();
|
CreateLogModule();
|
||||||
ILogInit(LOG_INSTANCE_TYPE_END);
|
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));
|
// std::this_thread::sleep_for(std::chrono::milliseconds(1000 * 10));
|
||||||
ILogUnInit();
|
ILogUnInit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,6 @@ include_directories(
|
||||||
# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs
|
# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs
|
||||||
# )
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (NOT DEFINED GOAHEAD_DOCUMENTS_PATH)
|
if (NOT DEFINED GOAHEAD_DOCUMENTS_PATH)
|
||||||
set(GOAHEAD_DOCUMENTS_PATH "web")
|
set(GOAHEAD_DOCUMENTS_PATH "web")
|
||||||
endif()
|
endif()
|
||||||
|
@ -68,6 +66,7 @@ add_custom_command(
|
||||||
OUTPUT ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/Makefile
|
OUTPUT ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/GoAhead/Makefile
|
||||||
COMMAND echo "tar zxvf goahead-5.2.0.tar.gz"
|
COMMAND echo "tar zxvf goahead-5.2.0.tar.gz"
|
||||||
COMMAND 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/
|
WORKING_DIRECTORY ${EXTERNAL_SOURCE_PATH}/goahead-5.2.0/
|
||||||
)
|
)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
|
|
|
@ -37,3 +37,37 @@ add_custom_target(
|
||||||
|
|
||||||
1. 拷贝self.crt,self.key两个到运行目录;
|
1. 拷贝self.crt,self.key两个到运行目录;
|
||||||
2. 配置文件两个:route.txt,auth.txt;
|
2. 配置文件两个:route.txt,auth.txt;
|
||||||
|
|
||||||
|
## 1.4. 代码整改
|
||||||
|
|
||||||
|
   由于官方源码是不超时阻塞,为了方便自动化测试,把官方源码的不超时阻塞改成超时阻塞。
|
||||||
|
```
|
||||||
|
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 ===================== //
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
|
@ -18,7 +18,16 @@
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#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);
|
StatusCode WebServerUnInit(void);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,10 @@ static void logHeader(void)
|
||||||
{
|
{
|
||||||
char home[ME_GOAHEAD_LIMIT_STRING];
|
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, "Configuration for %s", ME_TITLE);
|
||||||
logmsg(2, "---------------------------------------------");
|
logmsg(2, "---------------------------------------------");
|
||||||
logmsg(2, "Version: %s", ME_VERSION);
|
logmsg(2, "Version: %s", ME_VERSION);
|
||||||
|
@ -47,7 +50,30 @@ void initPlatform(void)
|
||||||
signal(SIGKILL, sigHandler);
|
signal(SIGKILL, sigHandler);
|
||||||
signal(SIGPIPE, SIG_IGN);
|
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);
|
websSetDebug(1);
|
||||||
logSetPath("stdout:2");
|
logSetPath("stdout:2");
|
||||||
|
@ -55,8 +81,10 @@ StatusCode WebServerInit(void)
|
||||||
constexpr int BUF_LENGTH = 128;
|
constexpr int BUF_LENGTH = 128;
|
||||||
char routePath[BUF_LENGTH] = {0};
|
char routePath[BUF_LENGTH] = {0};
|
||||||
char authPath[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(routePath, BUF_LENGTH, "%s/route.txt", GOAHEAD_CONFIG_FILE_PATH);
|
||||||
snprintf(authPath, BUF_LENGTH, "%s/auth.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();
|
initPlatform();
|
||||||
if (websOpen(documents, routePath) < 0) {
|
if (websOpen(documents, routePath) < 0) {
|
||||||
LogError("Cannot initialize server. Exiting.\n");
|
LogError("Cannot initialize server. Exiting.\n");
|
||||||
|
@ -67,12 +95,24 @@ StatusCode WebServerInit(void)
|
||||||
LogError("Cannot load %s", authPath);
|
LogError("Cannot load %s", authPath);
|
||||||
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
||||||
}
|
}
|
||||||
if (websListen("192.168.1.189:8080") < 0) {
|
if (websListen(listen) < 0) {
|
||||||
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
||||||
}
|
}
|
||||||
|
websDefineHandler("test", 0, testHandler, 0, 0);
|
||||||
|
websAddRoute("/test", "test", 0);
|
||||||
websServiceEvents(&finished);
|
websServiceEvents(&finished);
|
||||||
logmsg(1, "Instructed to exit\n");
|
logmsg(1, "Instructed to exit\n");
|
||||||
websClose();
|
websClose();
|
||||||
return CreateStatusCode(STATUS_CODE_OK);
|
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);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user