From ff08ddb462f3f87ac154a6296b5936ed868c5eb3 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Fri, 25 Oct 2019 15:05:56 +0800 Subject: [PATCH] =?UTF-8?q?Mod=20aaa-12=20=E4=BF=AE=E6=94=B9web=5Finterfac?= =?UTF-8?q?e.c=E6=96=87=E4=BB=B6=20RCA=EF=BC=9A=20SOL=EF=BC=9A=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BA=BA=EF=BC=9Achenpeng=20=E6=A3=80=E8=A7=86?= =?UTF-8?q?=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/src/lighttpd-1.4.51/src/web_interface.c | 141 +++++++++++-------- 1 file changed, 86 insertions(+), 55 deletions(-) diff --git a/libs/src/lighttpd-1.4.51/src/web_interface.c b/libs/src/lighttpd-1.4.51/src/web_interface.c index 6d560f431..17aeeb2fe 100644 --- a/libs/src/lighttpd-1.4.51/src/web_interface.c +++ b/libs/src/lighttpd-1.4.51/src/web_interface.c @@ -40,6 +40,7 @@ char * interface_send_server(interface_ss *data_in){ int len = strlen(out_string); char* szOut = (char*)malloc(sizeof(char)*len); strcpy(szOut,out_string); + free(out_string); cJSON_Delete(json); return szOut; @@ -53,10 +54,12 @@ end: 输入2:结构化数据 返回: 成功-失败 **/ -int interface_get_server(server * srv ,char *data_in,interface_sg *data_out,cJSON *json){ +int interface_get_server(server * srv ,char * data_in,interface_sg *data_out,cJSON *json1){ - json = cJSON_Parse(data_in); - + srv = srv; + data_in =data_in; + cJSON *json = json1; + //json = cJSON_Parse(data_in); if(!json){goto end;} //char * operate = cJSON_GetObjectItem(json, "operate")->valuestring; cJSON *json_data = cJSON_GetObjectItem(json, "resultCode"); @@ -72,7 +75,7 @@ int interface_get_server(server * srv ,char *data_in,interface_sg *data_out,cJSO 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); @@ -112,7 +115,7 @@ int interface_get_server(server * srv ,char *data_in,interface_sg *data_out,cJSO 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 = ""; @@ -138,7 +141,7 @@ int interface_get_server(server * srv ,char *data_in,interface_sg *data_out,cJSO 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){ @@ -164,12 +167,12 @@ int interface_get_server(server * srv ,char *data_in,interface_sg *data_out,cJSO 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"); + json_data = cJSON_GetObjectItem(ArrayItemtem, "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;} @@ -181,19 +184,18 @@ int interface_get_server(server * srv ,char *data_in,interface_sg *data_out,cJSO } } - return 0; end: return 1; } -int temp_interface_get_server(char *data_in,interface_sg *data_out,cJSON *json){ - //cJSON *json; - - //interface_sg *data_struct; - //data_struct = (interface_sg*)malloc(sizeof(interface_sg )); - json = cJSON_Parse(data_in); +int temp_interface_get_server(char *data_in,interface_sg *data_out,cJSON *json1){ + + data_in =data_in; + + cJSON *json = json1; + //json = cJSON_Parse(data_in); if(!json){ goto end;} //char * operate = cJSON_GetObjectItem(json, "operate")->valuestring; @@ -292,12 +294,12 @@ int temp_interface_get_server(char *data_in,interface_sg *data_out,cJSON *json){ 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"); + json_data = cJSON_GetObjectItem(ArrayItemtem, "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;} @@ -321,33 +323,35 @@ end: 返回: 成功-失败 **/ -int interface_get_web(char *data_in,interface_wg *data_out,cJSON *json){ - //cJSON *json; +int interface_get_web(char *data_in,interface_wg *data_out,cJSON *json1){ - json = cJSON_Parse(data_in); + data_in =data_in; + + cJSON *json = json1; + //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){ + cJSON * item = cJSON_GetObjectItem(json, "data"); + if(item == 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;} + + cJSON * jsdata = cJSON_GetObjectItem(item, "page_num"); + if(jsdata == NULL){data_out->page_num ="";} + else{data_out->page_num = jsdata->valuestring;} - json_data = cJSON_GetObjectItem(item, "page_count"); - if(json_data == NULL){data_out->page_count ="";} - else{data_out->page_count = json_data->valuestring;} + jsdata = cJSON_GetObjectItem(item, "page_count"); + if(jsdata == NULL){data_out->page_count ="";} + else{data_out->page_count = jsdata->valuestring;} } - + return 0; end: @@ -391,6 +395,7 @@ char *interface_send_web(interface_ws *data_in){ int out_len = strlen(out_string); char* szOut = (char*)malloc(sizeof(char)*out_len); strcpy(szOut,out_string); + free(out_string); cJSON_Delete(json); return szOut; end: @@ -416,6 +421,7 @@ char *interface_vlan_send_server(interface_vlan_ss * data_in){ int len = strlen(out_string); char* szOut = (char*)malloc(sizeof(char)*len); strcpy(szOut,out_string); + free(out_string); cJSON_Delete(json); return szOut; end: @@ -425,10 +431,12 @@ end: } //VLAN数据解析 -int interface_vlan_get_server(char *data_in, interface_vlan_sg *data_out,cJSON *json){ - //cJSON *json; +int interface_vlan_get_server(char *data_in, interface_vlan_sg *data_out,cJSON *json1){ - json = cJSON_Parse(data_in); + data_in =data_in; + + cJSON *json = json1; + //json = cJSON_Parse(data_in); if(!json){goto end;} cJSON * Array = cJSON_GetObjectItem(json, "if_vlan"); //从json中获得jsonarray if(Array == NULL){goto end;}//初始话出错 @@ -506,6 +514,7 @@ char * interface_vlan_send_web(interface_vlan_ws *data_in){ int out_len = strlen(out_string); char* szOut = (char*)malloc(sizeof(char)*out_len); strcpy(szOut,out_string); + free(out_string); cJSON_Delete(json); return szOut; end: @@ -513,10 +522,12 @@ end: return NULL; } //配置IP -char * interface_conip_send_web(interface_conip_ws *data_in){ +char * interface_conip_send_web(server *srv,interface_conip_ws *data_in){ + srv =srv; 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(); //创建对象 @@ -524,37 +535,44 @@ char * interface_conip_send_web(interface_conip_ws *data_in){ 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 *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 *Arrayconip1 = cJSON_CreateObject(); //创建一个对象将对象 + cJSON_AddNumberToObject(Arrayconip1, "family", data_in->data[i].condata[0].family); + cJSON_AddStringToObject(Arrayconip1, "ipaddr",data_in->data[i].condata[0].ipaddr); + cJSON_AddStringToObject(Arrayconip1, "prefixlen",data_in->data[i].condata[0].prefixlen); + cJSON_AddItemToArray(iptypeArray, Arrayconip1);//将该对象依次添加到数组里 + + cJSON *Arrayconip2 = cJSON_CreateObject(); //创建一个对象将对象 + cJSON_AddNumberToObject(Arrayconip2, "family", data_in->data[i].condata[1].family); + cJSON_AddStringToObject(Arrayconip2, "ipaddr",data_in->data[i].condata[1].ipaddr); + + cJSON_AddStringToObject(Arrayconip2, "prefixlen",data_in->data[i].condata[1].prefixlen); + cJSON_AddItemToArray(iptypeArray, Arrayconip2);//将该对象依次添加到数组里 + 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); + free(out_string); cJSON_Delete(json); return szOut; end: - cJSON_Delete(json); + cJSON_Delete(json); return NULL; } @@ -578,6 +596,7 @@ char * interface_conipenable_send_web(interface_conipenable_ws *data_in){ int out_len = strlen(out_string); char* szOut = (char*)malloc(sizeof(char)*out_len); strcpy(szOut,out_string); + free(out_string); cJSON_Delete(json); return szOut; end: @@ -591,6 +610,7 @@ end: char * interface_process(server *srv,char * data_in,void *point){ //处理web请求 //从WEB端解析数据 + srv =srv; cJSON *json_get_web = NULL; // cJSON *json_get_server= NULL; cJSON *json_vlan_get_server= NULL; @@ -601,6 +621,7 @@ char * interface_process(server *srv,char * data_in,void *point){ int flag =1; interface_wg data_web; + json_get_web = cJSON_Parse(data_in); flag = interface_get_web(data_in,&data_web,json_get_web); // if(flag == 1){log_error_write(srv, __FILE__, __LINE__, "s", "WEB Parsing data error-interface"); return NULL;} @@ -617,7 +638,7 @@ char * interface_process(server *srv,char * data_in,void *point){ else {log_error_write(srv, __FILE__, __LINE__, "s", "CFG lod error-interface");return NULL;} free( json_data); interface_sg server_get_data ; //定义获取到的SERVER端数据结构 - + json_get_server = cJSON_Parse(mess_str); flag = interface_get_server(srv,mess_str,&server_get_data,json_get_server);//从服务端解析数据 if(flag){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER Parsing data error-interface");return NULL; } @@ -673,6 +694,7 @@ char * interface_process(server *srv,char * data_in,void *point){ free(ss_data); interface_vlan_sg svlan_get_data; //定义VLAN数据解析的结构体 + json_vlan_get_server = cJSON_Parse(mess_str); flag = interface_vlan_get_server(mess_str,& svlan_get_data,json_vlan_get_server);//从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; //每次取一条 @@ -706,6 +728,7 @@ char * interface_vlan_process(server *srv,char * data_in,void *point){ mod_webm_plugin_data *p_d = point; interface_wg data_web; + json_get_web = cJSON_Parse(data_in); flag = interface_get_web(data_in,&data_web,json_get_web); // if(flag == 1){log_error_write(srv, __FILE__, __LINE__, "s", "WEB数据解析出错-VLAN"); return NULL;} @@ -730,6 +753,7 @@ char * interface_vlan_process(server *srv,char * data_in,void *point){ //解析vlan返回数据。 interface_vlan_sg vlandata; + json_vlan_get_server = cJSON_Parse(mess_str); flag = interface_vlan_get_server(mess_str,&vlandata,json_vlan_get_server);//从VLAN服务端解析数据 if(flag == 1){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER数据解析出错-VLAN");return NULL;} int index =0; @@ -786,6 +810,7 @@ char * interface_vlan_process(server *srv,char * data_in,void *point){ //printf("解析服务断数据: \n"); //log_error_write(srv, __FILE__, __LINE__, "s", mess_str);/////////////////////// interface_sg server_get_data ; //定义获取到的SERVER端数据结构 + json_get_server = cJSON_Parse(mess_str); flag = temp_interface_get_server(mess_str,&server_get_data,json_get_server);//从服务端解析数据 if(flag !=0 ){log_error_write(srv, __FILE__, __LINE__, "d", flag);return NULL; } websend_vlan_data.data[k].vlan_id = name[k]; @@ -809,15 +834,15 @@ char * interface_conip_process(server *srv,char * data_in,void *point){ cJSON *json_get_web= NULL; // cJSON *json_get_server= NULL; - - int flag; + int flag=1; char *mess_str = NULL; int mess_len = 0; mod_webm_plugin_data *p_d = point; //printf("解析WEB数据: \n"); interface_wg data_web; + json_get_web = cJSON_Parse(data_in); flag = interface_get_web(data_in,&data_web,json_get_web); // if(flag == 1){log_error_write(srv, __FILE__, __LINE__, "s", "WEB解析数据出错-CONIP"); return NULL;} @@ -829,7 +854,7 @@ char * interface_conip_process(server *srv,char * data_in,void *point){ //printf("发送请求interface服务端数据: \n"); interface_ss server_send_data; server_send_data.config_type = 5; //获取接口所有数据 - server_send_data.ifname = ""; + 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){ @@ -841,9 +866,9 @@ char * interface_conip_process(server *srv,char * data_in,void *point){ //printf("解析服务断数据: \n"); interface_sg server_get_data ; //定义获取到的SERVER端数据结构 + json_get_server = cJSON_Parse(mess_str); flag = interface_get_server(srv,mess_str,&server_get_data,json_get_server);//从服务端解析数据 - if(flag){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端解析数据出错-CONIP");return NULL; } - + 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; @@ -891,9 +916,12 @@ char * interface_conip_process(server *srv,char * data_in,void *point){ 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); + char * wout = interface_conip_send_web(srv,&websend_conip_data); + cJSON_Delete(json_get_web); // cJSON_Delete(json_get_server); // + + return wout; } //查询能配置IP的接口 @@ -912,6 +940,7 @@ char * interface_conipenable_process(server *srv,char * data_in,void *point){ //printf("解析WEB数据: \n"); interface_wg data_web; + json_get_web = cJSON_Parse(data_in); flag = interface_get_web(data_in,&data_web,json_get_web); // if(flag == 1){log_error_write(srv, __FILE__, __LINE__, "s", "WEB解析数据出错-ENIP"); return NULL;} @@ -933,6 +962,7 @@ char * interface_conipenable_process(server *srv,char * data_in,void *point){ //服务端数据解析 interface_sg server_get_data ; //定义获取到的SERVER端数据结构 + json_get_server = cJSON_Parse(mess_str); flag = interface_get_server(srv,mess_str,&server_get_data,json_get_server);//从服务端解析数据 if(flag){log_error_write(srv, __FILE__, __LINE__, "s", "SERVER端解析数据出错-ENIP");return NULL; } @@ -970,6 +1000,7 @@ char * interface_failure(void){ int len = strlen(out_string); char* szOut = (char*)malloc(sizeof(char)*len); strcpy(szOut,out_string); + free(out_string); cJSON_Delete(json); return szOut; } \ No newline at end of file