diff --git a/libs/src/lighttpd-1.4.51/src/mod_webm.c b/libs/src/lighttpd-1.4.51/src/mod_webm.c index 46883944d..0940ba952 100644 --- a/libs/src/lighttpd-1.4.51/src/mod_webm.c +++ b/libs/src/lighttpd-1.4.51/src/mod_webm.c @@ -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 (string) - { - return_info = buffer_init_string(string); + if (config_svr->cfg_cb) + { + config_svr->cfg_cb(srv, config_svr->confg_id, content_buffer->ptr, return_info, p); + } + chunkqueue_append_buffer(con->write_queue, return_info); buffer_free(return_info); - free(string); } buffer_free(content_buffer); }