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 "base.h"
#include "buffer.h"
#include "plugin.h"
#include "log.h"
#include "response.h"
@ -15,17 +16,19 @@
#include "json.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 enum { WEBM_HANDLE_INVALID_INDEX = -1,
WEBM_HANDLE_LOGIN,
WEBM_HANDLE_HOMEPAGE,
/* WEBM_HANDLE_CFG_GET_MAX, */
/* 以下是页面取数展示的case后续提升性能可能通过数据库查询所以先放到一起 */
WEBM_HANDLE_CONFIG_LIST_GROUP,
/* 所有配置下发的处理使用下面同一个handle,上面是针对取数显示添加 */
WEBM_HANDLE_CONFIG,
/* 以下是配置操作相关的case */
WEBM_HANDLE_CONFIG_ADD_GROUP,
WEBM_HANDLE_CONFIG_IPV4,
WEBM_HANDLE_MAX
} webm_handle_index;
@ -33,6 +36,7 @@ typedef struct _webm_config_st
{
webm_handle_index index;
char *config_name;
uint32_t confg_type;
uint64 confg_id;
mod_web_cfg_proc cfg_cb;
}webm_config_t;
@ -56,50 +60,56 @@ typedef struct {
extern int webm_login_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, char **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_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, buffer *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 \
{ \
{\
WEBM_HANDLE_LOGIN, \
"/login-ISG", \
-1, \
webm_login_proc \
WEBM_HANDLE_LOGIN, \
"/login-ISG", \
-1, \
-1, \
webm_login_proc \
},\
\
{\
WEBM_HANDLE_HOMEPAGE, \
"/ISG-home-ifnetstatus", \
-1, \
-1, \
webm_homepage_ifstatus_proc \
},\
\
{\
WEBM_HANDLE_CONFIG, \
WEBM_HANDLE_CONFIG_LIST_GROUP, \
"/FSG-CF/um-group-showlist", \
4, \
USER_MANAGER_CONFIG_GROUP, \
webm_config_set_proc \
},\
\
{\
WEBM_HANDLE_CONFIG_ADD_GROUP, \
"/FSG-CF/um-group-add", \
3, \
USER_MANAGER_CONFIG_GROUP, \
webm_config_send_proc \
webm_config_set_proc \
},\
\
{\
WEBM_HANDLE_CONFIG, \
WEBM_HANDLE_CONFIG_IPV4, \
"/ISG-CF/ipv4", \
3, \
IPCONFIG_V4, \
webm_config_send_proc \
webm_config_set_proc \
} \
\
}
webm_config_t g_webn_config_service[] = CONFIG_SERVICE_ARRAY;
char *err_string[WEBM_ERR_MAX] = { "0",
"1"
};
/**
* the basic and digest auth framework
*
@ -147,26 +157,11 @@ FREE_FUNC(mod_webm_free) {
return HANDLER_GO_ON;
}
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)
int webm_config_set_proc(server *srv, uint64 confg_id, char *data_in, buffer *data_out, void *point)
{
char *out;
cJSON *root;
char *ret_str;
char *mess_str;
cJSON *root = NULL;
char *mess_str = NULL;
int mess_len = 0;
int ret = 1;
mod_webm_plugin_data *p_d = point;
@ -181,35 +176,45 @@ 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);
}
/* create root node and array */
root = cJSON_CreateObject();
ret_str = webm_get_errcode_string(ret);
if (NULL == cJSON_AddStringToObject(root,"resultCode",ret_str))
if (0 != ret)
{
log_error_write(srv, __FILE__, __LINE__, "s", "json fail");
goto end;
/* create root node and array */
root = cJSON_CreateObject();
if (NULL == cJSON_AddStringToObject(root,"resultCode","1"))
{
log_error_write(srv, __FILE__, __LINE__, "s", "json fail");
goto end;
}
if (NULL == mess_str)
{
mess_str = "";
}
if (NULL == cJSON_AddStringToObject(root,"message","系统错误"))
{
log_error_write(srv, __FILE__, __LINE__, "s", "json fail");
goto end;
}
/* print everything */
out = cJSON_PrintUnformatted(root);
buffer_copy_string(data_out, out);
free(out);
}
else
{
buffer_copy_string(data_out, mess_str);
}
if (NULL == mess_str)
{
mess_str = "";
}
if (NULL == cJSON_AddStringToObject(root,"message",mess_str))
{
log_error_write(srv, __FILE__, __LINE__, "s", "json fail");
goto end;
}
/* print everything */
out = cJSON_PrintUnformatted(root);
*data_out = out;
ret = 0;
end:
/* free all objects under root and root itself */
cJSON_Delete(root);
if (root)
{
cJSON_Delete(root);
}
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 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 */
out = cJSON_PrintUnformatted(root);
*data_out = out;
buffer_copy_string(data_out, out);
free(out);
ret = 0;
end:
/* free all objects under root and root itself */
@ -327,7 +334,7 @@ end:
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;
cJSON *root;
@ -422,7 +429,8 @@ int webm_homepage_ifstatus_proc(server *srv, uint64 confg_id, char *data_in, cha
/* print everything */
out = cJSON_PrintUnformatted(root);
*data_out = out;
buffer_copy_string(data_out, out);
free(out);
ret = 0;
end:
/* 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;
char *string = NULL;
buffer *return_info;
buffer *return_info = NULL;
int func_index;
webm_config_t *config_svr;
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);
}
if (config_svr->cfg_cb)
return_info = buffer_init();
if (return_info)
{
config_svr->cfg_cb(srv, config_svr->confg_id, content_buffer->ptr, &string, p);
}
if (config_svr->cfg_cb)
{
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);
buffer_free(return_info);
free(string);
}
buffer_free(content_buffer);
}