add env FALLBACK, for the sake of easy debug in different mode
This commit is contained in:
parent
93cb6386df
commit
7c434d6108
|
@ -242,6 +242,8 @@ typedef struct HttpServer {
|
||||||
pthread_mutex_t serverMutex;
|
pthread_mutex_t serverMutex;
|
||||||
HttpDecodeMethod *methodScanner[HTTP_METHOD_SCANNER_SIZE];
|
HttpDecodeMethod *methodScanner[HTTP_METHOD_SCANNER_SIZE];
|
||||||
bool (*processData)(HttpContext *pContext);
|
bool (*processData)(HttpContext *pContext);
|
||||||
|
|
||||||
|
int fallback:2;
|
||||||
} HttpServer;
|
} HttpServer;
|
||||||
|
|
||||||
extern const char *httpKeepAliveStr[];
|
extern const char *httpKeepAliveStr[];
|
||||||
|
|
|
@ -72,6 +72,13 @@ static void httpDestroyContext(void *data) {
|
||||||
httpFreeJsonBuf(pContext);
|
httpFreeJsonBuf(pContext);
|
||||||
httpFreeMultiCmds(pContext);
|
httpFreeMultiCmds(pContext);
|
||||||
|
|
||||||
|
if (!tsHttpServer.fallback) {
|
||||||
|
if (pContext->parser.parser) {
|
||||||
|
ehttp_parser_destroy(pContext->parser.parser);
|
||||||
|
pContext->parser.parser = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tfree(pContext);
|
tfree(pContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,11 +176,6 @@ void httpReleaseContext(HttpContext *pContext) {
|
||||||
httpDebug("context:%p, won't be destroyed for cache is already released", pContext);
|
httpDebug("context:%p, won't be destroyed for cache is already released", pContext);
|
||||||
// httpDestroyContext((void **)(&ppContext));
|
// httpDestroyContext((void **)(&ppContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pContext->parser.parser) {
|
|
||||||
ehttp_parser_destroy(pContext->parser.parser);
|
|
||||||
pContext->parser.parser = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool httpInitContext(HttpContext *pContext) {
|
bool httpInitContext(HttpContext *pContext) {
|
||||||
|
@ -193,19 +195,21 @@ bool httpInitContext(HttpContext *pContext) {
|
||||||
memset(pParser, 0, sizeof(HttpParser));
|
memset(pParser, 0, sizeof(HttpParser));
|
||||||
pParser->pCur = pParser->pLast = pParser->buffer;
|
pParser->pCur = pParser->pLast = pParser->buffer;
|
||||||
|
|
||||||
ehttp_parser_callbacks_t callbacks = {
|
if (!tsHttpServer.fallback) {
|
||||||
on_request_line,
|
ehttp_parser_callbacks_t callbacks = {
|
||||||
on_status_line,
|
on_request_line,
|
||||||
on_header_field,
|
on_status_line,
|
||||||
on_body,
|
on_header_field,
|
||||||
on_end,
|
on_body,
|
||||||
on_error
|
on_end,
|
||||||
};
|
on_error
|
||||||
ehttp_parser_conf_t conf = {
|
};
|
||||||
.flush_block_size = 0
|
ehttp_parser_conf_t conf = {
|
||||||
};
|
.flush_block_size = 0
|
||||||
pParser->parser = ehttp_parser_create(callbacks, conf, pContext);
|
};
|
||||||
pParser->inited = 1;
|
pParser->parser = ehttp_parser_create(callbacks, conf, pContext);
|
||||||
|
pParser->inited = 1;
|
||||||
|
}
|
||||||
|
|
||||||
httpDebug("context:%p, fd:%d, ip:%s, thread:%s, accessTimes:%d, parsed:%d",
|
httpDebug("context:%p, fd:%d, ip:%s, thread:%s, accessTimes:%d, parsed:%d",
|
||||||
pContext, pContext->fd, pContext->ipstr, pContext->pThread->label, pContext->accessTimes, pContext->parsed);
|
pContext, pContext->fd, pContext->ipstr, pContext->pThread->label, pContext->accessTimes, pContext->parsed);
|
||||||
|
|
|
@ -138,7 +138,7 @@ static bool httpDecompressData(HttpContext *pContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool httpReadData(HttpContext *pContext) {
|
static bool httpReadData(HttpContext *pContext) {
|
||||||
if (1) return ehttpReadData(pContext);
|
if (!tsHttpServer.fallback) return ehttpReadData(pContext);
|
||||||
|
|
||||||
if (!pContext->parsed) {
|
if (!pContext->parsed) {
|
||||||
httpInitContext(pContext);
|
httpInitContext(pContext);
|
||||||
|
@ -437,11 +437,13 @@ static bool ehttpReadData(HttpContext *pContext) {
|
||||||
if (strstr(buf, "GET ")==buf && !strchr(buf, '\r') && !strchr(buf, '\n')) {
|
if (strstr(buf, "GET ")==buf && !strchr(buf, '\r') && !strchr(buf, '\n')) {
|
||||||
D("==half of request line received:\n%s\n==", buf);
|
D("==half of request line received:\n%s\n==", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ehttp_parser_parse(pParser->parser, buf, nread)) {
|
if (ehttp_parser_parse(pParser->parser, buf, nread)) {
|
||||||
D("==parsing failed==");
|
D("==parsing failed==");
|
||||||
httpCloseContextByServer(pContext);
|
httpCloseContextByServer(pContext);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pContext->parser.failed) {
|
if (pContext->parser.failed) {
|
||||||
D("==parsing failed: [0x%x]==", pContext->parser.failed);
|
D("==parsing failed: [0x%x]==", pContext->parser.failed);
|
||||||
httpNotifyContextClose(pContext);
|
httpNotifyContextClose(pContext);
|
||||||
|
@ -450,7 +452,7 @@ static bool ehttpReadData(HttpContext *pContext) {
|
||||||
if (pContext->parsed) {
|
if (pContext->parsed) {
|
||||||
// int ret = httpCheckReadCompleted(pContext);
|
// int ret = httpCheckReadCompleted(pContext);
|
||||||
// already done in ehttp_parser
|
// already done in ehttp_parser
|
||||||
int ret = HTTP_CHECK_BODY_SUCCESS;
|
int ret = HTTP_CHECK_BODY_SUCCESS;
|
||||||
if (ret == HTTP_CHECK_BODY_CONTINUE) {
|
if (ret == HTTP_CHECK_BODY_CONTINUE) {
|
||||||
//httpDebug("context:%p, fd:%d, ip:%s, not finished yet, wait another event", pContext, pContext->fd, pContext->ipstr);
|
//httpDebug("context:%p, fd:%d, ip:%s, not finished yet, wait another event", pContext, pContext->fd, pContext->ipstr);
|
||||||
httpReleaseContext(pContext);
|
httpReleaseContext(pContext);
|
||||||
|
|
|
@ -39,6 +39,12 @@ HttpServer tsHttpServer;
|
||||||
void taosInitNote(int numOfNoteLines, int maxNotes, char* lable);
|
void taosInitNote(int numOfNoteLines, int maxNotes, char* lable);
|
||||||
|
|
||||||
int httpInitSystem() {
|
int httpInitSystem() {
|
||||||
|
tsHttpServer.fallback = 0;
|
||||||
|
const char *v = getenv("FALLBACK");
|
||||||
|
if (v) {
|
||||||
|
tsHttpServer.fallback = 1;
|
||||||
|
}
|
||||||
|
|
||||||
strcpy(tsHttpServer.label, "rest");
|
strcpy(tsHttpServer.label, "rest");
|
||||||
tsHttpServer.serverIp = 0;
|
tsHttpServer.serverIp = 0;
|
||||||
tsHttpServer.serverPort = tsHttpPort;
|
tsHttpServer.serverPort = tsHttpPort;
|
||||||
|
|
Loading…
Reference in New Issue