Mod aaa-12 add lighttpd

RCA:
SOL:
修改人:zhouwuqing
检视人:zhouwuqing
This commit is contained in:
zhouwuqing 2019-08-20 05:01:25 -07:00
parent 292ea84bd2
commit 52c16b45e7
1 changed files with 82 additions and 76 deletions

View File

@ -1,6 +1,7 @@
#include "first.h" #include "first.h"
#include "base.h" #include "base.h"
#include "buffer.h"
#include "plugin.h" #include "plugin.h"
#include "log.h" #include "log.h"
#include "response.h" #include "response.h"
@ -15,17 +16,19 @@
#include "json.h" #include "json.h"
#include "../../../../Common/config_manager.h" #include "../../../../Common/config_manager.h"
typedef int (*mod_web_cfg_proc)(server *srv, uint64 confg_id, char *data_in, char **data_out, void *point); typedef int (*mod_web_cfg_proc)(server *srv, uint64 confg_id, char *data_in, buffer *data_out, void *point);
typedef int (*mod_web_cfg_exec_sync)(uint32_t config_type, uint64 config_id, char* config_data, int config_len, char**output, int *output_len); typedef int (*mod_web_cfg_exec_sync)(uint32_t config_type, uint64 config_id, char* config_data, int config_len, char**output, int *output_len);
typedef enum { WEBM_HANDLE_INVALID_INDEX = -1, typedef enum { WEBM_HANDLE_INVALID_INDEX = -1,
WEBM_HANDLE_LOGIN, WEBM_HANDLE_LOGIN,
WEBM_HANDLE_HOMEPAGE, WEBM_HANDLE_HOMEPAGE,
/* WEBM_HANDLE_CFG_GET_MAX, */ /* 以下是页面取数展示的case后续提升性能可能通过数据库查询所以先放到一起 */
WEBM_HANDLE_CONFIG_LIST_GROUP,
/* 所有配置下发的处理使用下面同一个handle,上面是针对取数显示添加 */ /* 以下是配置操作相关的case */
WEBM_HANDLE_CONFIG, WEBM_HANDLE_CONFIG_ADD_GROUP,
WEBM_HANDLE_CONFIG_IPV4,
WEBM_HANDLE_MAX WEBM_HANDLE_MAX
} webm_handle_index; } webm_handle_index;
@ -33,6 +36,7 @@ typedef struct _webm_config_st
{ {
webm_handle_index index; webm_handle_index index;
char *config_name; char *config_name;
uint32_t confg_type;
uint64 confg_id; uint64 confg_id;
mod_web_cfg_proc cfg_cb; mod_web_cfg_proc cfg_cb;
}webm_config_t; }webm_config_t;
@ -56,9 +60,9 @@ typedef struct {
extern int webm_login_proc(server *srv, uint64 confg_id, char *data_in, char **data_out, void *point); extern int webm_login_proc(server *srv, uint64 confg_id, char *data_in, buffer *data_out, void *point);
extern int webm_homepage_ifstatus_proc(server *srv, uint64 confg_id, char *data_in, char **data_out, void *point); extern int webm_homepage_ifstatus_proc(server *srv, uint64 confg_id, char *data_in, buffer *data_out, void *point);
extern int webm_config_send_proc(server *srv, uint64 confg_id, char *data_in, char **data_out, void *point); extern int webm_config_set_proc(server *srv, uint64 confg_id, char *data_in, buffer *data_out, void *point);
#define CONFIG_SERVICE_ARRAY \ #define CONFIG_SERVICE_ARRAY \
{ \ { \
@ -66,6 +70,7 @@ extern int webm_config_send_proc(server *srv, uint64 confg_id, char *data_in, ch
WEBM_HANDLE_LOGIN, \ WEBM_HANDLE_LOGIN, \
"/login-ISG", \ "/login-ISG", \
-1, \ -1, \
-1, \
webm_login_proc \ webm_login_proc \
},\ },\
\ \
@ -73,33 +78,38 @@ extern int webm_config_send_proc(server *srv, uint64 confg_id, char *data_in, ch
WEBM_HANDLE_HOMEPAGE, \ WEBM_HANDLE_HOMEPAGE, \
"/ISG-home-ifnetstatus", \ "/ISG-home-ifnetstatus", \
-1, \ -1, \
-1, \
webm_homepage_ifstatus_proc \ webm_homepage_ifstatus_proc \
},\ },\
\ \
{\ {\
WEBM_HANDLE_CONFIG, \ WEBM_HANDLE_CONFIG_LIST_GROUP, \
"/FSG-CF/um-group-add", \ "/FSG-CF/um-group-showlist", \
4, \
USER_MANAGER_CONFIG_GROUP, \ USER_MANAGER_CONFIG_GROUP, \
webm_config_send_proc \ webm_config_set_proc \
},\ },\
\ \
{\ {\
WEBM_HANDLE_CONFIG, \ WEBM_HANDLE_CONFIG_ADD_GROUP, \
"/FSG-CF/um-group-add", \
3, \
USER_MANAGER_CONFIG_GROUP, \
webm_config_set_proc \
},\
\
{\
WEBM_HANDLE_CONFIG_IPV4, \
"/ISG-CF/ipv4", \ "/ISG-CF/ipv4", \
3, \
IPCONFIG_V4, \ IPCONFIG_V4, \
webm_config_send_proc \ webm_config_set_proc \
} \ } \
\ \
} }
webm_config_t g_webn_config_service[] = CONFIG_SERVICE_ARRAY; webm_config_t g_webn_config_service[] = CONFIG_SERVICE_ARRAY;
char *err_string[WEBM_ERR_MAX] = { "0",
"1"
};
/** /**
* the basic and digest auth framework * the basic and digest auth framework
* *
@ -147,26 +157,11 @@ FREE_FUNC(mod_webm_free) {
return HANDLER_GO_ON; return HANDLER_GO_ON;
} }
int webm_config_set_proc(server *srv, uint64 confg_id, char *data_in, buffer *data_out, void *point)
char *webm_get_errcode_string(int code)
{
char *string = NULL;
if (WEBM_ERR_MAX > code)
{
string = err_string[code];
}
return string;
}
int webm_config_send_proc(server *srv, uint64 confg_id, char *data_in, char **data_out, void *point)
{ {
char *out; char *out;
cJSON *root; cJSON *root = NULL;
char *ret_str; char *mess_str = NULL;
char *mess_str;
int mess_len = 0; int mess_len = 0;
int ret = 1; int ret = 1;
mod_webm_plugin_data *p_d = point; mod_webm_plugin_data *p_d = point;
@ -181,12 +176,12 @@ int webm_config_send_proc(server *srv, uint64 confg_id, char *data_in, char **da
ret = p_d->web_cfg_exec(3, confg_id, data_in, strlen(data_in), &mess_str, &mess_len); ret = p_d->web_cfg_exec(3, confg_id, data_in, strlen(data_in), &mess_str, &mess_len);
} }
if (0 != ret)
{
/* create root node and array */ /* create root node and array */
root = cJSON_CreateObject(); root = cJSON_CreateObject();
ret_str = webm_get_errcode_string(ret); if (NULL == cJSON_AddStringToObject(root,"resultCode","1"))
if (NULL == cJSON_AddStringToObject(root,"resultCode",ret_str))
{ {
log_error_write(srv, __FILE__, __LINE__, "s", "json fail"); log_error_write(srv, __FILE__, __LINE__, "s", "json fail");
goto end; goto end;
@ -197,7 +192,7 @@ int webm_config_send_proc(server *srv, uint64 confg_id, char *data_in, char **da
mess_str = ""; mess_str = "";
} }
if (NULL == cJSON_AddStringToObject(root,"message",mess_str)) if (NULL == cJSON_AddStringToObject(root,"message","系统错误"))
{ {
log_error_write(srv, __FILE__, __LINE__, "s", "json fail"); log_error_write(srv, __FILE__, __LINE__, "s", "json fail");
goto end; goto end;
@ -205,11 +200,21 @@ int webm_config_send_proc(server *srv, uint64 confg_id, char *data_in, char **da
/* print everything */ /* print everything */
out = cJSON_PrintUnformatted(root); out = cJSON_PrintUnformatted(root);
*data_out = out; buffer_copy_string(data_out, out);
free(out);
}
else
{
buffer_copy_string(data_out, mess_str);
}
ret = 0; ret = 0;
end: end:
/* free all objects under root and root itself */ /* free all objects under root and root itself */
if (root)
{
cJSON_Delete(root); cJSON_Delete(root);
}
return ret; return ret;
} }
@ -264,7 +269,7 @@ end:
} }
int webm_login_proc(server *srv, uint64 confg_id, char *data_in, char **data_out, void *point) int webm_login_proc(server *srv, uint64 confg_id, char *data_in, buffer *data_out, void *point)
{ {
char acount[WEBM_ACOUNT_NAME_MAX + 1] = {0}; char acount[WEBM_ACOUNT_NAME_MAX + 1] = {0};
char pwd[WEBM_PWD_MAX + 1] = {0}; char pwd[WEBM_PWD_MAX + 1] = {0};
@ -318,7 +323,9 @@ int webm_login_proc(server *srv, uint64 confg_id, char *data_in, char **data_out
/* print everything */ /* print everything */
out = cJSON_PrintUnformatted(root); out = cJSON_PrintUnformatted(root);
*data_out = out;
buffer_copy_string(data_out, out);
free(out);
ret = 0; ret = 0;
end: end:
/* free all objects under root and root itself */ /* free all objects under root and root itself */
@ -327,7 +334,7 @@ end:
return ret; return ret;
} }
int webm_homepage_ifstatus_proc(server *srv, uint64 confg_id, char *data_in, char **data_out, void *point) int webm_homepage_ifstatus_proc(server *srv, uint64 confg_id, char *data_in, buffer *data_out, void *point)
{ {
char *out; char *out;
cJSON *root; cJSON *root;
@ -422,7 +429,8 @@ int webm_homepage_ifstatus_proc(server *srv, uint64 confg_id, char *data_in, cha
/* print everything */ /* print everything */
out = cJSON_PrintUnformatted(root); out = cJSON_PrintUnformatted(root);
*data_out = out; buffer_copy_string(data_out, out);
free(out);
ret = 0; ret = 0;
end: end:
/* free all objects under root and root itself */ /* free all objects under root and root itself */
@ -476,8 +484,7 @@ static handler_t mod_webm_uri_handler(server *srv, connection *con, void *p_d)
{ {
chunkqueue *cq = con->request_content_queue; chunkqueue *cq = con->request_content_queue;
char *string = NULL; buffer *return_info = NULL;
buffer *return_info;
int func_index; int func_index;
webm_config_t *config_svr; webm_config_t *config_svr;
chunk *c; chunk *c;
@ -500,17 +507,16 @@ static handler_t mod_webm_uri_handler(server *srv, connection *con, void *p_d)
buffer_append_string_len(content_buffer, c->mem->ptr + c->offset, len); buffer_append_string_len(content_buffer, c->mem->ptr + c->offset, len);
} }
return_info = buffer_init();
if (return_info)
{
if (config_svr->cfg_cb) if (config_svr->cfg_cb)
{ {
config_svr->cfg_cb(srv, config_svr->confg_id, content_buffer->ptr, &string, p); config_svr->cfg_cb(srv, config_svr->confg_id, content_buffer->ptr, return_info, p);
} }
if (string)
{
return_info = buffer_init_string(string);
chunkqueue_append_buffer(con->write_queue, return_info); chunkqueue_append_buffer(con->write_queue, return_info);
buffer_free(return_info); buffer_free(return_info);
free(string);
} }
buffer_free(content_buffer); buffer_free(content_buffer);
} }