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 84845f9ce..de4f8c0eb 100755 --- a/libs/src/lighttpd-1.4.51/src/mod_webm.c +++ b/libs/src/lighttpd-1.4.51/src/mod_webm.c @@ -16,10 +16,11 @@ #include #include "http_header.h" #include "json.h" +#include "web_interface.h" +#include "mod_webm.h" #include "../../../../Common/config_manager.h" typedef int (*mod_web_cfg_proc)(server *srv, uint32_t config_type, 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, @@ -41,9 +42,15 @@ typedef enum { WEBM_HANDLE_INVALID_INDEX = -1, WEBM_HANDLE_CONFIG_UUID_USER, WEBM_HANDLE_CONFIG_DETAIL_USER, WEBM_HANDLE_CONFIG_DEL_USER, - WEBM_HANDLE_CONFIG_IPV4, + //接口模块 + WEBM_HANDLE_CONFIG_IPV4_SET, + WEBM_HANDLE_CONFIG_IPV4_DEL, WEBM_HANDLE_CONFIG_VLAN_SET, - WEBM_HANDLE_CONFIG_VLAN_GET, + WEBM_HANDLE_CONFIG_VLAN_DEL, + WEBM_HANDLE_INTERFACE_LIST, + WEBM_HANDLE_INTERFACE_VLAN_LIST, + WEBM_HANDLE_INTERFACE_CONIP_LIST, + WEBM_HANDLE_INTERFACE_ENIP_LIST, WEBM_HANDLE_CONFIG_HOST_SET, WEBM_HANDLE_CONFIG_HOST_GET, @@ -87,13 +94,6 @@ enum { WEBM_OK = 0, }; -typedef struct { - PLUGIN_DATA; - void *cfgm_lib; - mod_web_cfg_exec_sync web_cfg_exec; -} mod_webm_plugin_data; - - #define WEBM_ACOUNT_NAME_MAX 31 #define WEBM_PWD_MAX 31 @@ -103,6 +103,11 @@ typedef struct { extern int webm_login_proc(server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point); extern int webm_homepage_ifstatus_proc(server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point); extern int webm_config_send_proc(server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point); +extern int webm_interface_showlist (server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point); +extern int webm_interface_vlan_showlist (server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point); +extern int webm_interface_conip_showlist (server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point); +extern int webm_interface_enip_showlist (server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point); + #define CONFIG_SERVICE_ARRAY \ { \ @@ -210,26 +215,61 @@ extern int webm_config_send_proc(server *srv, uint32_t config_type, uint64 confg webm_config_send_proc \ },\ {\ - WEBM_HANDLE_CONFIG_IPV4, \ - "/ISG-CF/ipv4", \ + WEBM_HANDLE_CONFIG_IPV4_SET, \ + "/FSG-CF/interface-br-mod", \ CM_CONFIG_SET, \ IPCONFIG_V4, \ webm_config_send_proc \ + }, \ + {\ + WEBM_HANDLE_CONFIG_IPV4_DEL, \ + "/FSG-CF/interface-br-delete", \ + CM_CONFIG_DEL, \ + IPCONFIG_V4, \ + webm_config_send_proc \ }, \ {\ WEBM_HANDLE_CONFIG_VLAN_SET, \ - "/FSG-CF/setvlan", \ - CM_CONFIG_SET, \ + "/FSG-CF/interface-vlan-add", \ + CM_CONFIG_ADD, \ VLAN_CONFIG, \ webm_config_send_proc \ }, \ {\ - WEBM_HANDLE_CONFIG_VLAN_GET, \ - "/FSG-GF/getvlan", \ - CM_CONFIG_GET, \ + WEBM_HANDLE_CONFIG_VLAN_DEL, \ + "/FSG-CF/interface-vlan-delete", \ + CM_CONFIG_DEL, \ VLAN_CONFIG, \ webm_config_send_proc \ }, \ + {\ + WEBM_HANDLE_INTERFACE_LIST, \ + "/FSG-GF/interface-mac-showlist", \ + -1, \ + -1, \ + webm_interface_showlist \ + }, \ + {\ + WEBM_HANDLE_INTERFACE_VLAN_LIST, \ + "/FSG-GF/interface-vlan-showlist", \ + -1, \ + -1, \ + webm_interface_vlan_showlist \ + }, \ + {\ + WEBM_HANDLE_INTERFACE_CONIP_LIST, \ + "/FSG-GF/interface-br-showlist", \ + -1, \ + -1, \ + webm_interface_conip_showlist \ + }, \ + {\ + WEBM_HANDLE_INTERFACE_ENIP_LIST, \ + "/FSG-GF/interface-un-br-showlist", \ + -1, \ + -1, \ + webm_interface_enip_showlist \ + }, \ {\ WEBM_HANDLE_CONFIG_HOST_SET, \ "/FSG-CF/host-set", \ @@ -446,27 +486,22 @@ int webm_config_send_proc(server *srv, uint32_t config_type, uint64 confg_id, ch int mess_len = 0; int ret = 1; mod_webm_plugin_data *p_d = point; - if (NULL == data_out) - { + { return ret; } - if (p_d && p_d->web_cfg_exec) { ret = p_d->web_cfg_exec(config_type, confg_id, data_in, strlen(data_in), &mess_str, &mess_len); - } - log_error_write(srv, __FILE__, __LINE__, "s", "ret:", ret); + } if (0 != ret) { - log_error_write(srv, __FILE__, __LINE__, "s", "ret:", ret); + log_error_write(srv, __FILE__, __LINE__, "s", mess_str); /* 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; } @@ -475,9 +510,8 @@ int webm_config_send_proc(server *srv, uint32_t config_type, uint64 confg_id, ch mess_str = ""; } - if (NULL == cJSON_AddStringToObject(root,"message","ϵͳ����")) + if (NULL == cJSON_AddStringToObject(root,"message","失败")) { - log_error_write(srv, __FILE__, __LINE__, "s", "json fail"); goto end; } @@ -485,14 +519,23 @@ int webm_config_send_proc(server *srv, uint32_t config_type, uint64 confg_id, ch out = cJSON_PrintUnformatted(root); buffer_copy_string(data_out, out); free(out); + } else { - log_error_write(srv, __FILE__, __LINE__, "s", "ret:", ret); - buffer_copy_string(data_out, mess_str); + //int ss = strlen(mess_str); + //log_error_write(srv, __FILE__, __LINE__, "d",ss); + if(strlen(mess_str) != 0){buffer_copy_string(data_out, mess_str);} + else{ + root = cJSON_CreateObject(); + if (NULL == cJSON_AddStringToObject(root,"resultCode","0")){goto end;} + if (NULL == cJSON_AddStringToObject(root,"message","成功")){goto end;} + out = cJSON_PrintUnformatted(root); + buffer_copy_string(data_out, out); + free(out); + } + } - log_error_write(srv, __FILE__, __LINE__, "s", "ret:", ret); - ret = 0; end: /* free all objects under root and root itself */ @@ -726,8 +769,75 @@ end: return ret; } +int webm_interface_showlist (server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point) +{ + mod_webm_plugin_data *p_d = point; + + confg_id = confg_id;//�������澯�� + config_type = config_type;//�������澯�� + char *out; + out = interface_process(srv,data_in,p_d); //放回数据结构 + if (NULL == data_out){ return 1;} + if(out == NULL){ + out = interface_failure(); //返回失败数据结构 + } + buffer_copy_string(data_out, out); + free(out); + return 0; +} +int webm_interface_vlan_showlist (server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point) +{ + mod_webm_plugin_data *p_d = point; + + confg_id = confg_id;//�������澯�� + config_type = config_type;//�������澯�� + + char *out; + out = interface_vlan_process(srv,data_in,p_d); //放回数据结构 + if (NULL == data_out){ return 1;} + if(out == NULL){ + out = interface_failure(); //返回失败数据结构 + } + buffer_copy_string(data_out, out); + free(out); + return 0; +} +int webm_interface_conip_showlist (server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point) +{ + mod_webm_plugin_data *p_d = point; + + confg_id = confg_id;//�������澯�� + config_type = config_type;//�������澯�� + + char *out; + out = interface_conip_process(srv,data_in,p_d); //放回数据结构 + if (NULL == data_out){ return 1;} + if(out == NULL){ + out = interface_failure(); //返回失败数据结构 + } + buffer_copy_string(data_out, out); + free(out); + return 0; +} +int webm_interface_enip_showlist (server *srv, uint32_t config_type, uint64 confg_id, char *data_in, buffer *data_out, void *point) +{ + mod_webm_plugin_data *p_d = point; + + confg_id = confg_id;//�������澯�� + config_type = config_type;//�������澯�� + + char *out; + out = interface_conipenable_process(srv,data_in,p_d); //放回数据结构 + if (NULL == data_out){ return 1;} + if(out == NULL){ + out = interface_failure(); //返回失败数据结构 + } + buffer_copy_string(data_out, out); + free(out); + return 0; +} int webm_get_func_index(char *post_uri) { int len = sizeof(g_webn_config_service) / sizeof(webm_config_t); @@ -805,7 +915,6 @@ static handler_t mod_webm_uri_handler(server *srv, connection *con, void *p_d) { config_svr->cfg_cb(srv, config_svr->confg_type, config_svr->confg_id, content_buffer->ptr, return_info, p); } - chunkqueue_append_buffer(con->write_queue, return_info); buffer_free(return_info); } diff --git a/libs/src/lighttpd-1.4.51/src/mod_webm.h b/libs/src/lighttpd-1.4.51/src/mod_webm.h new file mode 100644 index 000000000..5708a1822 --- /dev/null +++ b/libs/src/lighttpd-1.4.51/src/mod_webm.h @@ -0,0 +1,13 @@ +#ifndef MOD_WEBM_H +#define MOD_WEBM_H + +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 struct { + PLUGIN_DATA; + void *cfgm_lib; + mod_web_cfg_exec_sync web_cfg_exec; +} mod_webm_plugin_data; + + +# endif \ No newline at end of file diff --git a/libs/src/lighttpd-1.4.51/src/web_interface.c b/libs/src/lighttpd-1.4.51/src/web_interface.c new file mode 100644 index 000000000..40a7b6a86 --- /dev/null +++ b/libs/src/lighttpd-1.4.51/src/web_interface.c @@ -0,0 +1,949 @@ +#include "first.h" + +#include "base.h" +#include "buffer.h" +#include "plugin.h" +#include "log.h" +#include "response.h" +#include "connections.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "http_header.h" +#include "json.h" +#include "../../../../Common/config_manager.h" +# include"mod_webm.h" +#include "web_interface_def.h" +#include "web_interface_stuc.h" +#include "web_interface.h" + + + +/** +输入1:待结构化数据 +返回: json字符串 +**/ +char * interface_send_server(interface_ss *data_in){ + cJSON * json; + json = cJSON_CreateObject(); //创建对象 + if(NULL == json) {goto end;} + cJSON_AddNumberToObject(json, "config_type", data_in->config_type); + cJSON_AddStringToObject(json, "ifname", data_in->ifname); + //char* szOut = (char*)(sizeof(char)); + char *out_string = cJSON_PrintUnformatted(json); + if(out_string == NULL) {goto end;} + int len = strlen(out_string); + char* szOut = (char*)malloc(sizeof(char)*len); + strcpy(szOut,out_string); + cJSON_Delete(json); + return szOut; + +end: + cJSON_Delete(json); + return NULL; + +} +/** +输入1:json字符串 +输入2:结构化数据 +返回: 成功-失败 +**/ +int interface_get_server(char *data_in,interface_sg *data_out){ + cJSON *json; + + //interface_sg *data_struct; + //data_struct = (interface_sg*)malloc(sizeof(interface_sg )); + json = cJSON_Parse(data_in); + + if(!json){goto end;} + //char * operate = cJSON_GetObjectItem(json, "operate")->valuestring; + cJSON *json_data = cJSON_GetObjectItem(json, "resultCode"); + if(json_data == NULL){data_out->resultCode ="";} + else{data_out->resultCode = json_data->valuestring;} + json_data = cJSON_GetObjectItem(json, "message"); + if(json_data == NULL){data_out->message ="";} + else{data_out->message =json_data ->valuestring;} + if(strcmp(data_out->resultCode , "0")) {goto end;} //返回0,直接跳出 + + cJSON * Array = cJSON_GetObjectItem(json, "data"); //从root中获得jsonarray + if(Array == NULL){goto end;} + int size = cJSON_GetArraySize(Array ); //读取数组大小 + + data_out->_datalen = size; //指定数组大小 + + // data_out->data = (interface_data*)malloc(sizeof(interface_data)*size); //给interface_data分配空间 + + //printf("adress:%p\n", data_struct->data); + // strcpy(ins.ifname,"kob"); + //printf("size:%d\n",size); + for(int i=0;idata[i].ifname = json_data->valuestring; + + json_data = cJSON_GetObjectItem(ArrayItem, "ipenable"); + if(json_data == NULL){goto end;} + data_out->data[i].ipenable = json_data->valuestring; + + json_data = cJSON_GetObjectItem(ArrayItem, "v4protocol"); + if(json_data == NULL){goto end;} + data_out->data[i].v4protocol = json_data->valuestring; + + json_data = cJSON_GetObjectItem(ArrayItem, "v6protocol"); + if(json_data == NULL){goto end;} + data_out->data[i].v6protocol = json_data->valuestring; + + json_data = cJSON_GetObjectItem(ArrayItem, "role"); + if(json_data == NULL){data_out->data[i].role = ""; } + else{data_out->data[i].role = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ArrayItem, "maxspeed"); + if(json_data == NULL){data_out->data[i].maxspeed = ""; } + else{data_out->data[i].maxspeed = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ArrayItem, "state"); + if(json_data == NULL){data_out->data[i].state = ""; } + else{data_out->data[i].state = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ArrayItem, "hwaddr"); + if(json_data == NULL){data_out->data[i].hwaddr=""; } + else{data_out->data[i].hwaddr = json_data->valuestring;} + + cJSON *statistics_data = cJSON_GetObjectItem(ArrayItem, "statistics"); + if(statistics_data == NULL){ + data_out->data[i].rcv_packets = ""; + data_out->data[i].rcv_bytes = ""; + data_out->data[i].snd_packets = ""; + data_out->data[i].snd_bytes = ""; + } + else{ + json_data = cJSON_GetObjectItem(statistics_data, "rcv_packets"); + if(json_data == NULL){data_out->data[i].rcv_packets = "";;} + else{data_out->data[i].rcv_packets = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(statistics_data, "rcv_bytes"); + if(json_data == NULL){data_out->data[i].rcv_bytes = "";;} + else{data_out->data[i].rcv_bytes = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(statistics_data, "snd_packets"); + if(json_data == NULL){data_out->data[i].snd_packets = "";;} + else{data_out->data[i].snd_packets = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(statistics_data, "snd_bytes"); + if(json_data == NULL){data_out->data[i].snd_bytes = "";;} + else{data_out->data[i].snd_bytes = json_data->valuestring;} + + } + + cJSON *ipv4array = cJSON_GetObjectItem(ArrayItem, "ipv4"); + cJSON *ipv4data = cJSON_GetArrayItem(ipv4array,0); //去除数组 + if(ipv4data == NULL){ + data_out->data[i].ipv4_ipaddr = ""; + data_out->data[i].ipv4_prefixlen = ""; + } //跳过 + else{ + json_data = cJSON_GetObjectItem(ipv4data, "addr"); + if(json_data == NULL){data_out->data[i].ipv4_ipaddr = "";;} + else{data_out->data[i].ipv4_ipaddr = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ipv4data, "prefixlen"); + if(json_data == NULL){data_out->data[i].ipv4_prefixlen = "";;} + else{data_out->data[i].ipv4_prefixlen = json_data->valuestring;} + } + + //cJSON *ipv6data = cJSON_GetObjectItem(ArrayItem, "ipv6"); + cJSON * ipv6Array = cJSON_GetObjectItem(ArrayItem, "ipv6"); //从root中获得jsonarray + if(ipv6Array == NULL){ + data_out->data[i]._arripv6 = 0; //ipv6数组不存在 + } + else{ + int ipv6_size = cJSON_GetArraySize(ipv6Array); //读取数组大小 + data_out->data[i]._arripv6 = ipv6_size; + for(int j=0;jdata[i].ipv6_data[j].ipv6_ipaddr = "";} + else {data_out->data[i].ipv6_data[j].ipv6_ipaddr = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ArrayItem, "prefixlen"); + if(json_data == NULL){data_out->data[i].ipv6_data[j].ipv6_prefixlen ="";} + else{data_out->data[i].ipv6_data[j].ipv6_prefixlen = json_data->valuestring;} + + } + } + if(data_out->data[i]._arripv6 == 0){ //初始为空,防止野指针 + data_out->data[i].ipv6_data[0].ipv6_ipaddr = ""; + data_out->data[i].ipv6_data[0].ipv6_prefixlen =""; + } + + } + //printf("adress:%p\n",data_struct); + + return 0; +end: + return 1; +} + +int temp_interface_get_server(char *data_in,interface_sg *data_out){ + cJSON *json; + + //interface_sg *data_struct; + //data_struct = (interface_sg*)malloc(sizeof(interface_sg )); + json = cJSON_Parse(data_in); + + if(!json){ goto end;} + //char * operate = cJSON_GetObjectItem(json, "operate")->valuestring; + cJSON *json_data = cJSON_GetObjectItem(json, "resultCode"); + if(json_data == NULL){data_out->resultCode ="";} + else{data_out->resultCode = json_data->valuestring;} + json_data = cJSON_GetObjectItem(json, "message"); + if(json_data == NULL){data_out->message ="";} + else{data_out->message =json_data ->valuestring;} + if(strcmp(data_out->resultCode , "0")) {goto end;} //返回0,直接跳出 + + cJSON * ArrayItem = cJSON_GetObjectItem(json, "data"); //从root中获得jsonarray + if(ArrayItem == NULL){goto end;} + //cJSON *ArrayItem = cJSON_GetArrayItem(Array,i); //分别读取数组中每一个object对象。 + int i=0; + json_data = cJSON_GetObjectItem(ArrayItem, "ifname"); + if(json_data == NULL){goto end;} + data_out->data[i].ifname = json_data->valuestring; + + json_data = cJSON_GetObjectItem(ArrayItem, "ipenable"); + if(json_data == NULL){goto end;} + data_out->data[i].ipenable = json_data->valuestring; + + json_data = cJSON_GetObjectItem(ArrayItem, "v4protocol"); + if(json_data == NULL){goto end;} + data_out->data[i].v4protocol = json_data->valuestring; + + json_data = cJSON_GetObjectItem(ArrayItem, "v6protocol"); + if(json_data == NULL){goto end;} + data_out->data[i].v6protocol = json_data->valuestring; + + json_data = cJSON_GetObjectItem(ArrayItem, "role"); + if(json_data == NULL){data_out->data[i].role = ""; } + else{data_out->data[i].role = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ArrayItem, "maxspeed"); + if(json_data == NULL){data_out->data[i].maxspeed = ""; } + else{data_out->data[i].maxspeed = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ArrayItem, "state"); + if(json_data == NULL){data_out->data[i].state = ""; } + else{data_out->data[i].state = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ArrayItem, "hwaddr"); + if(json_data == NULL){data_out->data[i].hwaddr=""; } + else{data_out->data[i].hwaddr = json_data->valuestring;} + + cJSON *statistics_data = cJSON_GetObjectItem(ArrayItem, "statistics"); + if(statistics_data == NULL){ + data_out->data[i].rcv_packets = ""; + data_out->data[i].rcv_bytes = ""; + data_out->data[i].snd_packets = ""; + data_out->data[i].snd_bytes = ""; + } + else{ + json_data = cJSON_GetObjectItem(statistics_data, "rcv_packets"); + if(json_data == NULL){data_out->data[i].rcv_packets = "";;} + else{data_out->data[i].rcv_packets = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(statistics_data, "rcv_bytes"); + if(json_data == NULL){data_out->data[i].rcv_bytes = "";;} + else{data_out->data[i].rcv_bytes = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(statistics_data, "snd_packets"); + if(json_data == NULL){data_out->data[i].snd_packets = "";;} + else{data_out->data[i].snd_packets = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(statistics_data, "snd_bytes"); + if(json_data == NULL){data_out->data[i].snd_bytes = "";;} + else{data_out->data[i].snd_bytes = json_data->valuestring;} + + } + + cJSON *ipv4array = cJSON_GetObjectItem(ArrayItem, "ipv4"); + cJSON *ipv4data = cJSON_GetArrayItem(ipv4array,0); //去除数组 + if(ipv4data == NULL){ + data_out->data[i].ipv4_ipaddr = ""; + data_out->data[i].ipv4_prefixlen = ""; + } //跳过 + else{ + json_data = cJSON_GetObjectItem(ipv4data, "addr"); + if(json_data == NULL){data_out->data[i].ipv4_ipaddr = "";;} + else{data_out->data[i].ipv4_ipaddr = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ipv4data, "prefixlen"); + if(json_data == NULL){data_out->data[i].ipv4_prefixlen = "";;} + else{data_out->data[i].ipv4_prefixlen = json_data->valuestring;} + } + + //cJSON *ipv6data = cJSON_GetObjectItem(ArrayItem, "ipv6"); + cJSON * ipv6Array = cJSON_GetObjectItem(ArrayItem, "ipv6"); //从root中获得jsonarray + if(ipv6Array == NULL){ + data_out->data[i]._arripv6 = 0; //ipv6数组不存在 + } + else{ + int ipv6_size = cJSON_GetArraySize(ipv6Array); //读取数组大小 + data_out->data[i]._arripv6 = ipv6_size; + for(int j=0;jdata[i].ipv6_data[j].ipv6_ipaddr = "";} + else {data_out->data[i].ipv6_data[j].ipv6_ipaddr = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(ArrayItem, "prefixlen"); + if(json_data == NULL){data_out->data[i].ipv6_data[j].ipv6_prefixlen ="";} + else{data_out->data[i].ipv6_data[j].ipv6_prefixlen = json_data->valuestring;} + + } + + if(data_out->data[i]._arripv6 == 0){ //初始为空,防止野指针 + data_out->data[i].ipv6_data[0].ipv6_ipaddr = ""; + data_out->data[i].ipv6_data[0].ipv6_prefixlen =""; + } + + } + //printf("adress:%p\n",data_struct); + + return 0; +end: + return 1; +} +/** +输入1:json字符串 +输入2:结构化数据 +返回: 成功-失败 +**/ + +int interface_get_web(char *data_in,interface_wg *data_out){ + cJSON *json; + + json = cJSON_Parse(data_in); + if(!json){ goto end;} + //char * operate = cJSON_GetObjectItem(json, "operate")->valuestring; + cJSON * json_data = cJSON_GetObjectItem(json, "type"); + if(json_data == NULL){data_out->type ="";} + else{data_out->type = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(json, "data"); + if(json_data == NULL){ + data_out->page_num =""; + data_out->page_count =""; + } + else{ + cJSON * item = cJSON_GetObjectItem(json, "data"); + json_data = cJSON_GetObjectItem(item, "page_num"); + if(json_data == NULL){data_out->page_num ="";} + else{data_out->page_num = json_data->valuestring;} + + json_data = cJSON_GetObjectItem(item, "page_count"); + if(json_data == NULL){data_out->page_count ="";} + else{data_out->page_count = json_data->valuestring;} + + } + + return 0; + +end: + return 1; + +} +//发送数据到WEB +char *interface_send_web(interface_ws *data_in){ + cJSON * json; + json = cJSON_CreateObject(); //创建对象 + if(NULL == json) {goto end;} + cJSON_AddStringToObject(json, "retcode", data_in->retcode); + cJSON_AddStringToObject(json, "message", data_in->message); + cJSON_AddStringToObject(json, "pages", data_in->pages); + + cJSON *JsonArray = cJSON_CreateArray(); //创建数组 + for(int i=0;i < data_in->_datalen;i++){ + cJSON *ArrayItem = cJSON_CreateObject(); //创建一个对象将对象 + cJSON_AddStringToObject(ArrayItem, "interface_type", data_in->data[i].interface_type); + cJSON_AddStringToObject(ArrayItem, "interface_name",data_in->data[i].interface_name ); + cJSON_AddStringToObject(ArrayItem, "mac", data_in->data[i].mac); + cJSON_AddStringToObject(ArrayItem, "rate",data_in->data[i].rate ); + cJSON_AddStringToObject(ArrayItem, "input_flow", data_in->data[i].input_flow); + cJSON_AddStringToObject(ArrayItem, "output_flow",data_in->data[i].output_flow ); + cJSON_AddStringToObject(ArrayItem, "status", data_in->data[i].status); + cJSON_AddStringToObject(ArrayItem, "vlan_flag", data_in->data[i].vlan_flag); + cJSON_AddStringToObject(ArrayItem, "attr", data_in->data[i].attr); + cJSON *vlanArray = cJSON_CreateArray(); //创建数组 + for(int j=0;jdata[i]._arrlen;j++){ + int vid = data_in->data[i].vlan_id[j]; + cJSON_AddItemToArray(vlanArray, cJSON_CreateNumber(vid)); + } + cJSON_AddItemToObject(ArrayItem, "vlan_id", vlanArray); //将jason数组添加到ArrayItem对象中 + cJSON_AddItemToArray(JsonArray, ArrayItem);//将该对象依次添加到数组里 + + } + cJSON_AddItemToObject(json, "data", JsonArray); //将jason数组添加到root对象中 + + char * out_string = cJSON_PrintUnformatted(json); + if(out_string == NULL) {cJSON_Delete(json);goto end;} + int out_len = strlen(out_string); + char* szOut = (char*)malloc(sizeof(char)*out_len); + strcpy(szOut,out_string); + cJSON_Delete(json); + return szOut; +end: + cJSON_Delete(json); + return NULL; + } + +char *interface_vlan_send_server(interface_vlan_ss * data_in){ + cJSON * json; + json = cJSON_CreateObject(); //创建对象 + if(NULL == json) {goto end;} + cJSON_AddStringToObject(json, "operate", data_in->operate); + cJSON *JsonArray = cJSON_CreateArray(); //创建数组 + cJSON *ArrayItem = cJSON_CreateObject(); //创建一个对象 + if(NULL == ArrayItem) {goto end;} + cJSON_AddStringToObject(ArrayItem, "if_name", data_in->if_name); + cJSON_AddItemToArray(JsonArray, ArrayItem);//将该对象依次添加到数组里 + cJSON_AddItemToObject(json, "get_ifvlan", JsonArray); //将jason数组添加到root对象中 + + //char* szOut = (char*)(sizeof(char)); + char *out_string = cJSON_PrintUnformatted(json); + if(out_string == NULL) {goto end;} + int len = strlen(out_string); + char* szOut = (char*)malloc(sizeof(char)*len); + strcpy(szOut,out_string); + cJSON_Delete(json); + return szOut; +end: + cJSON_Delete(json); + return NULL; + +} + +//VLAN数据解析 +int interface_vlan_get_server(char *data_in, interface_vlan_sg *data_out){ + cJSON *json; + + json = cJSON_Parse(data_in); + if(!json){goto end;} + cJSON * Array = cJSON_GetObjectItem(json, "if_vlan"); //从json中获得jsonarray + if(Array == NULL){goto end;}//初始话出错 + int size = cJSON_GetArraySize( Array ); //读取数组大小 + if(size == 0){ + data_out->data[0].if_name = ""; + data_out->data[0].if_attr =""; + data_out->data[0]._vlan_flag = "0"; + data_out->data[0]._arrlen = 0; + } //数组为空,赋空值 + else{ + data_out->_datalen = size; //数据个数 + for(int i = 0;i< size;i++){ + cJSON *ArrayItem = cJSON_GetArrayItem(Array,i); + cJSON * json_data = cJSON_GetObjectItem(ArrayItem, "if_name"); + if(json_data == NULL){goto end;} //关键值丢失出错 + data_out->data[i].if_name = json_data->valuestring; + + json_data = cJSON_GetObjectItem(ArrayItem, "if_attr"); + if(json_data == NULL){goto end; } + data_out->data[i].if_attr = json_data->valuestring; + + cJSON *Array_vid = cJSON_GetObjectItem(ArrayItem, "vid"); + if(Array_vid == NULL){ data_out->data[i]._vlan_flag = "0"; } //vlan数组不存在,标志为0,未开启。 + else{ + int size_arr = cJSON_GetArraySize(Array_vid ); //读取数组大小 + data_out->data[i]._arrlen = size_arr; + if(size_arr == 0){data_out->data[i]._vlan_flag = "0";} //vlan数组为空,标志为0,未开启。 + else{ + data_out->data[i]._vlan_flag = "1"; //不为空,开启VLAN + for(int j =0;jdata[i].vlan_id[j] = json_data->valueint; //取数 + + } + + } + } + } + + } + + + return 0; +end: + return 1; +} +char * interface_vlan_send_web(interface_vlan_ws *data_in){ + cJSON * json; + json = cJSON_CreateObject(); //创建对象 + if(NULL == json) {goto end;} + cJSON_AddStringToObject(json, "retcode", data_in->retcode); + cJSON_AddStringToObject(json, "message", data_in->message); + cJSON * page_json = cJSON_CreateObject(); //创建对象 + cJSON_AddStringToObject(page_json, "total", data_in->total); + cJSON_AddStringToObject(page_json, "page_num", data_in->page_num); + cJSON_AddStringToObject(page_json, "page_count", data_in->page_count); + cJSON_AddItemToObject(json, "pages", page_json); + + cJSON *JsonArray = cJSON_CreateArray(); //创建数组 + for(int i=0;i < data_in->_datalen;i++){ + cJSON *ArrayItem = cJSON_CreateObject(); //创建一个对象将对象 + cJSON_AddStringToObject(ArrayItem, "vlan_id", data_in->data[i].vlan_id); + cJSON_AddStringToObject(ArrayItem, "ipv4",data_in->data[i].ipv4); + cJSON_AddStringToObject(ArrayItem, "ipv6", data_in->data[i].ipv6); + cJSON_AddStringToObject(ArrayItem, "submask_ipv4",data_in->data[i].submask_ipv4 ); + cJSON_AddStringToObject(ArrayItem, "submask_ipv6", data_in->data[i].submask_ipv6); + + cJSON_AddItemToArray(JsonArray, ArrayItem);//将该对象依次添加到数组里 + } + cJSON_AddItemToObject(json, "data", JsonArray); //将jason数组添加到root对象中 + + char * out_string = cJSON_PrintUnformatted(json); + if(out_string == NULL) {goto end;} + int out_len = strlen(out_string); + char* szOut = (char*)malloc(sizeof(char)*out_len); + strcpy(szOut,out_string); + cJSON_Delete(json); + return szOut; +end: + cJSON_Delete(json); + return NULL; + } + //配置IP +char * interface_conip_send_web(interface_conip_ws *data_in){ + cJSON * json; + json = cJSON_CreateObject(); //创建对象 + if(NULL == json) {goto end;} + cJSON_AddStringToObject(json, "retcode", data_in->retcode); + cJSON_AddStringToObject(json, "message", data_in->message); + cJSON * page_json = cJSON_CreateObject(); //创建对象 + cJSON_AddStringToObject(page_json, "total", data_in->total); + cJSON_AddStringToObject(page_json, "page_num", data_in->page_num); + cJSON_AddStringToObject(page_json, "page_count", data_in->page_count); + cJSON_AddItemToObject(json, "pages", page_json); + + // printf("len:%d\n",data_in->_datalen); + cJSON *JsonArray = cJSON_CreateArray(); //创建数组 + for(int i=0;i < data_in->_datalen;i++){ + cJSON *ArrayItem = cJSON_CreateObject(); //创建一个对象将对象 + cJSON_AddStringToObject(ArrayItem, "interface_type", data_in->data[i].interface_type); + cJSON_AddStringToObject(ArrayItem, "ifname",data_in->data[i].ifname ); + cJSON *iptypeArray = cJSON_CreateArray(); //创建数组 + for(int j=0;jdata[i]._coniplen;j++){ + cJSON *Arrayconip = cJSON_CreateObject(); //创建一个对象将对象 + cJSON_AddNumberToObject(Arrayconip, "family", data_in->data[i].condata[j].family); + cJSON_AddStringToObject(Arrayconip, "ipaddr",data_in->data[i].condata[j].ipaddr); + cJSON_AddStringToObject(Arrayconip, "prefixlen",data_in->data[i].condata[j].prefixlen); + //printf("prefixlen:%s\n",data_in->data[i].condata[j].prefixlen); + cJSON_AddItemToArray(iptypeArray, Arrayconip);//将该对象依次添加到数组里 + } + cJSON_AddItemToObject(ArrayItem, "ip_type", iptypeArray); //将数组添加到ArrayItem对象中 + cJSON_AddItemToArray(JsonArray, ArrayItem);//将该对象依次添加到数组里 + + } + cJSON_AddItemToObject(json, "data", JsonArray); //将jason数组添加到root对象中 + + char * out_string = cJSON_PrintUnformatted(json); + if(out_string == NULL) {goto end;} + int out_len = strlen(out_string); + char* szOut = (char*)malloc(sizeof(char)*out_len); + strcpy(szOut,out_string); + cJSON_Delete(json); + return szOut; +end: + cJSON_Delete(json); + return NULL; + } + +//查询可配置IP的接口 +char * interface_conipenable_send_web(interface_conipenable_ws *data_in){ + cJSON * json; + json = cJSON_CreateObject(); //创建对象 + if(NULL == json) {goto end;} + cJSON_AddStringToObject(json, "retcode", data_in->retcode); + cJSON_AddStringToObject(json, "message", data_in->message); + cJSON_AddStringToObject(json, "pages", ""); + cJSON *JsonArray = cJSON_CreateArray(); //创建数组 + for(int i=0;i < data_in->_datalen;i++){ + char * name = data_in->data[i]; + cJSON_AddItemToArray(JsonArray, cJSON_CreateString(name)); + } + cJSON_AddItemToObject(json, "data", JsonArray); //将jason数组添加到root对象中 + + char * out_string = cJSON_PrintUnformatted(json); + if(out_string == NULL) {goto end;} + int out_len = strlen(out_string); + char* szOut = (char*)malloc(sizeof(char)*out_len); + strcpy(szOut,out_string); + cJSON_Delete(json); + return szOut; +end: + cJSON_Delete(json); + return NULL; + } + +//查询接口信息 + + +char * interface_process(server *srv,char * data_in,void *point){ + //处理web请求 + //从WEB端解析数据 + char *mess_str = NULL; + int mess_len = 0; + mod_webm_plugin_data *p_d = point; + int flag =1; + + interface_wg data_web; + flag = interface_get_web(data_in,&data_web); // + if(flag == 1){log_error_write(srv, __FILE__, __LINE__, "s", "WEB Parsing data error-interface"); return NULL;} + + interface_ss server_send_data; + server_send_data.config_type = 5; //获取接口所有数据 + server_send_data.ifname = ""; + char * json_data = interface_send_server(&server_send_data);//向服务端发送请求 + if( json_data ==NULL){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER Serialized data error-interface");return NULL; } + if (p_d && p_d->web_cfg_exec) + { + flag = p_d->web_cfg_exec(CM_CONFIG_GET_ALL, IPCONFIG_V4, json_data, strlen(json_data), &mess_str, &mess_len); //获取所有物理口 + if(flag != 0){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER send data error-interface"); return NULL;} + } + else {log_error_write(srv, __FILE__, __LINE__, "s", "CFG lod error-interface");return NULL;} + free( json_data); + + interface_sg server_get_data ; //定义获取到的SERVER端数据结构 + flag = interface_get_server(mess_str,&server_get_data);//从服务端解析数据 + if(flag){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER Parsing data error-interface");return NULL; } + + interface_ws websend_data; //定义发送WEB端的数据结构 + websend_data.retcode=server_get_data.resultCode; + websend_data.message=server_get_data.message; + websend_data.pages=""; + int index = 0; //发送端数据结构索引 + for(int i=0;i1024 && flow<=1048576) {sprintf(temp, "%.2fk", (flow/1024));} + else if(flow>1048576 && flow<=1048576000) {sprintf(temp, "%.2fM", (flow/1048576));} + else if(flow>1048576000 ) {sprintf(temp, "%.2fG", (flow/1048576000));} + strcpy(websend_data.data[index].input_flow,temp); + //strcat( websend_data.data[index].input_flow, packets); //包个数 + + char *sndbytes = server_get_data.data[i].snd_bytes; + //char *sndpackets = server_get_data.data[i].snd_packets; + flow =atoi(sndbytes); + if(flow>1024 && flow<=1048576) {sprintf(temp, "%.2fk", (flow/1024));} + else if(flow>1048576 && flow<=1048576000) {sprintf(temp, "%.2fM", (flow/1048576));} + else if(flow>1048576000 ) {sprintf(temp, "%.2fG", (flow/1048576000));} + strcpy(websend_data.data[index].output_flow,temp); + //strcat( websend_data.data[index].output_flow, sndpackets); //包个数 + + websend_data.data[index].status = server_get_data.data[i].state; + websend_data.data[index].rate = server_get_data.data[i].maxspeed; + + //查询VALN请求 + interface_vlan_ss svlan_send_data; //定义vlan 服务发送数据 + svlan_send_data.operate = "get"; //单个获取 + svlan_send_data.if_name =server_get_data.data[i].ifname; + char * ss_data = interface_vlan_send_server(&svlan_send_data);//向服务端发送请求 + if(ss_data==NULL){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER Serialized data error-interface"); return NULL;} + if (p_d && p_d->web_cfg_exec){ + flag = p_d->web_cfg_exec(CM_CONFIG_GET, VLAN_CONFIG, ss_data, strlen(ss_data), &mess_str, &mess_len); //获取对应接口VLAN信息 + if(flag != 0){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER send data error-interface"); return NULL;} + } + else {log_error_write(srv, __FILE__, __LINE__, "s", "CFG load error");return NULL;} + free(ss_data); + + interface_vlan_sg svlan_get_data; //定义VLAN数据解析的结构体 + flag = interface_vlan_get_server(mess_str,& svlan_get_data);//从VLAN服务端解析数据 + if(flag != 0){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER parsing data error-interface");return NULL;} + websend_data.data[index].vlan_flag = svlan_get_data.data[0]._vlan_flag; //每次取一条 + websend_data.data[index]._arrlen = svlan_get_data.data[0]._arrlen; + websend_data.data[index].attr = svlan_get_data.data[0].if_attr; + for(int j=0;jweb_cfg_exec){ + flag = p_d->web_cfg_exec(CM_CONFIG_GET_ALL, VLAN_CONFIG, vlanget, strlen(vlanget), &mess_str, &mess_len); //获取所有配置VLAN接口 + if(flag != 0){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端发送数据出错-VLAN"); return NULL;} + } + else {log_error_write(srv, __FILE__, __LINE__, "s", "配置函数加载出错-VLAN");return NULL;} + //printf("生成vlan_get_json:\n%s\n",vlanget); + free(vlanget); + //解析vlan返回数据。 + + + interface_vlan_sg vlandata; + flag = interface_vlan_get_server(mess_str,&vlandata);//从VLAN服务端解析数据 + if(flag == 1){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER数据解析出错-VLAN");return NULL;} + int index =0; + int vid_vector[VLAN_COUNT]={-1}; //存放VLAN数量 + for(int i = 0; i=index) break; + int id = vid_vector[page_index] ; + //printf("page:%d\n", id ); + sprintf(name[k], "br-vl%d", id); //利用vlan id拼接成一个key,用来取接口信息。 + //printf("%s\n", name); + //printf("发送服务端数据: \n"); + interface_ss server_send_data; // 发送数据结构 + server_send_data.config_type = 4; //获取接口 + server_send_data.ifname = name[k]; + char * json_data = interface_send_server(&server_send_data);//向服务端发送请求 + if( json_data ==NULL){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER数据打包出错-VLAN");return NULL; } + if (p_d && p_d->web_cfg_exec){ + flag = p_d->web_cfg_exec(CM_CONFIG_GET, IPCONFIG_V4, json_data, strlen(json_data), &mess_str, &mess_len); //获取对应VLAN接口信息。 + if(flag != 0){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端发送数据出错-VLAN"); return NULL;} + } + else {log_error_write(srv, __FILE__, __LINE__, "s", "配置函数加载出错-VLAN");return NULL;} + //printf("生成json:\n%s\n", json_data); + free( json_data); + //服务端数据解析 + //printf("解析服务断数据: \n"); + //log_error_write(srv, __FILE__, __LINE__, "s", mess_str);/////////////////////// + interface_sg server_get_data ; //定义获取到的SERVER端数据结构 + flag = temp_interface_get_server(mess_str,&server_get_data);//从服务端解析数据 + if(flag !=0 ){log_error_write(srv, __FILE__, __LINE__, "d", flag);return NULL; } + websend_vlan_data.data[k].vlan_id = name[k]; + websend_vlan_data.data[k].ipv4 = server_get_data.data[0].ipv4_ipaddr; + websend_vlan_data.data[k].submask_ipv4 = server_get_data.data[0].ipv4_prefixlen; + websend_vlan_data.data[k].ipv6 = server_get_data.data[0].ipv6_data[0].ipv6_ipaddr; + websend_vlan_data.data[k].submask_ipv6 = server_get_data.data[0].ipv6_data[0].ipv6_prefixlen; + //printf("解析完成: \n"); + } + websend_vlan_data._datalen = k; + char * wout = interface_vlan_send_web(&websend_vlan_data); + + return wout; +} +//查询已经配置IP的接口 +char * interface_conip_process(server *srv,char * data_in,void *point){ + //处理web请求 + //从WEB端解析数据 + int flag; + char *mess_str = NULL; + int mess_len = 0; + mod_webm_plugin_data *p_d = point; + + //printf("解析WEB数据: \n"); + interface_wg data_web; + flag = interface_get_web(data_in,&data_web); // + if(flag == 1){log_error_write(srv, __FILE__, __LINE__, "s", "WEB解析数据出错-CONIP"); return NULL;} + + char * page_num_str = data_web.page_num; + char * page_count_str = data_web.page_count; + if(!strcmp(page_num_str,"")||!strcmp(page_count_str ,"")){log_error_write(srv, __FILE__, __LINE__, "s", "页码数为空-CONIP");return NULL;} //该页面,必须有页码返回值。 + + //向interface服务端发送请求 + //printf("发送请求interface服务端数据: \n"); + interface_ss server_send_data; + server_send_data.config_type = 5; //获取接口所有数据 + server_send_data.ifname = ""; + char * json_data = interface_send_server(&server_send_data);//向服务端发送请求 + if( json_data ==NULL){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端打包数据出错-CONIP");return NULL; } + if (p_d && p_d->web_cfg_exec){ + flag = p_d->web_cfg_exec(CM_CONFIG_GET_ALL, IPCONFIG_V4, json_data, strlen(json_data), &mess_str, &mess_len); //获取所有配置VLAN接口 + if(flag != 0){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端发送数据出错-CONIP"); return NULL;} + } + else {log_error_write(srv, __FILE__, __LINE__, "s", "配置函数加载出错-CONIP");return NULL;} + free( json_data); + + //printf("解析服务断数据: \n"); + interface_sg server_get_data ; //定义获取到的SERVER端数据结构 + flag = interface_get_server(mess_str,&server_get_data);//从服务端解析数据 + if(flag){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端解析数据出错-CONIP");return NULL; } + + interface_conip_ws websend_conip_data; // 定义发送 到WEB数据结构 + + websend_conip_data.retcode =server_get_data.resultCode; + websend_conip_data.message =server_get_data.message; + + int page_num =atoi(page_num_str); + int page_count =atoi(page_count_str); + + int page_index = (page_num-1) *page_count ; //计算页码 + int index =0; // + int k=0; // + for(int i=0;i=page_index && index<(page_index +page_count)){ //筛选出指定页面 + websend_conip_data.data[k].interface_type = server_get_data.data[i].role; + websend_conip_data.data[k].ifname = server_get_data.data[i].ifname; + int coniplen =0; + if(!strcmp(v4protocol ,"static" ) ){ + websend_conip_data.data[k].condata[coniplen].family = 2; //ipv4 + websend_conip_data.data[k].condata[coniplen].ipaddr = server_get_data.data[i].ipv4_ipaddr; + websend_conip_data.data[k].condata[coniplen].prefixlen = server_get_data.data[i].ipv4_prefixlen; + coniplen++; + } + if(!strcmp(v6protocol ,"static" ) ){ + websend_conip_data.data[k].condata[coniplen].family = 10; //ipv6 + websend_conip_data.data[k].condata[coniplen].ipaddr = server_get_data.data[i].ipv6_data[0].ipv6_ipaddr; + websend_conip_data.data[k].condata[coniplen].prefixlen = server_get_data.data[i].ipv6_data[0].ipv6_prefixlen; + coniplen++; + } + websend_conip_data.data[k]._coniplen =coniplen; + k++; + } + index++; + } + char total_str[11] ; //总条数转换成字符串。 + sprintf(total_str, "%d", index); + websend_conip_data._datalen =k; + websend_conip_data.page_num =page_num_str; + websend_conip_data.page_count=page_count_str; + websend_conip_data.total = total_str; + char * wout = interface_conip_send_web(&websend_conip_data); + return wout; +} +//查询能配置IP的接口 +char * interface_conipenable_process(server *srv,char * data_in,void *point){ + //处理web请求 + //从WEB端解析数据 + int flag; + char *mess_str = NULL; + int mess_len = 0; + mod_webm_plugin_data *p_d = point; + + + //printf("解析WEB数据: \n"); + interface_wg data_web; + flag = interface_get_web(data_in,&data_web); // + if(flag == 1){log_error_write(srv, __FILE__, __LINE__, "s", "WEB解析数据出错-ENIP"); return NULL;} + + //向interface服务端发送请求 + //printf("发送请求interface服务端数据: \n"); + interface_ss server_send_data; + server_send_data.config_type = 5; //获取接口所有数据 + server_send_data.ifname = ""; + char * json_data = interface_send_server(&server_send_data);//向服务端发送请求 + if( json_data ==NULL){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端打包数据出错-ENIP");return NULL; } + if (p_d && p_d->web_cfg_exec){ + flag = p_d->web_cfg_exec(CM_CONFIG_GET_ALL, IPCONFIG_V4, json_data, strlen(json_data), &mess_str, &mess_len); //获取所有配置VLAN接口 + if(flag != 0){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端发送数据出错-ENIP"); return NULL;} + } + else {log_error_write(srv, __FILE__, __LINE__, "s", "配置函数加载出错-ENIP");return NULL;} + //printf("生成json:\n%s\n", json_data); + free( json_data); + + //服务端数据解析 + + interface_sg server_get_data ; //定义获取到的SERVER端数据结构 + flag = interface_get_server(mess_str,&server_get_data);//从服务端解析数据 + if(flag){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端解析数据出错-ENIP");return NULL; } + + interface_conipenable_ws websend_conipen_data; // 定义发送 到WEB数据结构 + websend_conipen_data.retcode =server_get_data.resultCode; + websend_conipen_data.message =server_get_data.message; + int index = 0; + for(int i=0;i +#include +#include +#include +#include +#include +#include +#include + +int interface_test(); +char * interface_process(server *a, char *b,void *c); +char * interface_vlan_process(server *a, char *b,void *c ); +char * interface_conip_process(server *a, char *b,void *c ); +char * interface_conipenable_process(server *a, char *b,void *c); +char * interface_failure(); + +#endif \ No newline at end of file diff --git a/libs/src/lighttpd-1.4.51/src/web_interface_def.h b/libs/src/lighttpd-1.4.51/src/web_interface_def.h new file mode 100644 index 000000000..7021d0c79 --- /dev/null +++ b/libs/src/lighttpd-1.4.51/src/web_interface_def.h @@ -0,0 +1,10 @@ +#ifndef WEB_INTERFACE_DER_H +#define WEB_INTERFACE_DEF_H + +#define INTER_COUNT 50 //接口最大数量 +#define INTER_IPV6_COUNT 10 //每个接口IPv6最大数量 +#define INTER_VLAN_COUNT 5 //每个接口,最多配置vlan数量 +#define VLAN_COUNT 40 //VLAN 总数 +#define LEN_NAME 50 //流量拼接字符串长度 + +#endif diff --git a/libs/src/lighttpd-1.4.51/src/web_interface_stuc.h b/libs/src/lighttpd-1.4.51/src/web_interface_stuc.h new file mode 100644 index 000000000..987f6bf58 --- /dev/null +++ b/libs/src/lighttpd-1.4.51/src/web_interface_stuc.h @@ -0,0 +1,158 @@ +#ifndef WEB_INTERFACE_DER_H +#define WEB_INTERFACE_DEF_H + + + +typedef struct interface_server_send{ + char * ifname; + int config_type ; +} interface_ss ; + + +typedef struct data_ipv6{ + + char * ipv6_ipaddr; + char * ipv6_prefixlen; + + +} ipv6data; +typedef struct data_server_get{ + char * ifname; + char * ipenable; + char * v4protocol; + char * v6protocol; + char * role; + char * maxspeed; + char * state; + char * hwaddr; + char * rcv_packets; + char * rcv_bytes; + char * snd_packets; + char * snd_bytes; + char * ipv4_ipaddr; + char * ipv4_prefixlen; + int _arripv6; + ipv6data ipv6_data[INTER_IPV6_COUNT]; + +} interface_data; +typedef struct interface_server_get{ + + char * resultCode; + char * message; + int _datalen; + interface_data data[INTER_COUNT]; + +} interface_sg ; + +typedef struct interface_web_get{ + + char * type ; + char * page_num; + char * page_count; +} interface_wg ; + + +typedef struct data_web_send{ + char * interface_type; + char * interface_name; + char * mac; + char * rate; + char input_flow[LEN_NAME]; + char output_flow[LEN_NAME]; + char * status; + char * vlan_flag; + char * attr; + int vlan_id[INTER_VLAN_COUNT]; + int _arrlen; +} data_wg; +typedef struct interface_web_send{ + char * retcode; + char * message; + char * pages; + data_wg data[INTER_COUNT]; + int _datalen; + + +} interface_ws; + + + +//VLAN查询 +typedef struct interface_vlan_server_send{ + char * operate; + char * if_name; + +} interface_vlan_ss ; + +typedef struct data_valn_server_send{ + char * if_name; + char * if_attr; + int vlan_id[5]; + int _arrlen; + char * _vlan_flag; +} data_vsg; +typedef struct interface_vlan_server_get{ + data_vsg data[VLAN_COUNT]; + int _datalen; + + +} interface_vlan_sg ; + + +typedef struct datavlan_web_send{ + char * vlan_id; + char *ipv4; + char * ipv6; + char * submask_ipv4; + char * submask_ipv6; +} data_vlan_wg; +typedef struct interface_vlan_web_send{ + char * retcode; + char * message; + char * total; + char * page_num; + char * page_count; + data_vlan_wg data[VLAN_COUNT]; + int _datalen; + +} interface_vlan_ws; + +//配置IP +typedef struct dataiptype_web_send{ + int family; + char * ipaddr; + char * prefixlen; + +} data_coniptype_wg; +typedef struct dataip_web_send{ + char * interface_type; + char * ifname; + data_coniptype_wg condata[3]; + int _coniplen; + +} data_conip_wg; +typedef struct interface_conip_web_send{ + char * retcode; + char * message; + char * total; + char * page_num; + char * page_count; + data_conip_wg data[INTER_COUNT]; + int _datalen; + +} interface_conip_ws; + +typedef struct interface_conipenable_web_send{ + char * retcode; + char * message; + char * data[INTER_COUNT]; + int _datalen; + +} interface_conipenable_ws; + +typedef struct fail_message{ + char * retcode; + char * message; +} fail_message; + +#endif