OCT 修改删除地址池接口

This commit is contained in:
dongwenze 2022-12-09 15:04:30 +08:00
parent f0eedc5615
commit be21a2fffe
1 changed files with 66 additions and 44 deletions

View File

@ -23,6 +23,7 @@ using namespace std;
#include "config.h"
#include "proto.h"
#include "user_errno.h"
#include "uthash/uthash.h"
extern data2 cfig;
extern bool kRunning;
@ -372,7 +373,7 @@ static int add_dhcpd_rangeset(data19 *req, const char *pRequest) {
cJSON_AddNumberToObject(pEx_range, "status", ret);
cJSON_AddStringToObject(pEx_range, "message", getErrorEnumDesc(ret));
cJSON_AddItemToArray(pExpandArray, pEx_range);
break;
continue;
}
cJSON_AddNumberToObject(pEx_range, "status", ERR_SUCCESS);
@ -392,12 +393,21 @@ static int add_dhcpd_rangeset(data19 *req, const char *pRequest) {
return ERR_SUCCESS;
}
struct hash_map{
unsigned int key;
unsigned int value;
UT_hash_handle hh;
};
static int delete_dhcpd_rangeset(data19 *req, const char *pRequest) {
char logBuff[512];
const char *pStrContent;
char *fp;
cJSON *pRspRoot;
cJSON *pdelArray;
data13 dhcpRanges[MAX_DHCP_RANGES];
hash_map *delMap = nullptr;
int resCount = 0;
dzlog_debug("Input: %s\n", pRequest);
@ -438,10 +448,9 @@ static int delete_dhcpd_rangeset(data19 *req, const char *pRequest) {
cJSON_AddItemToObject(pRspRoot, "rangeSet", pdelArray);
for (int i = 0; i < cJSON_GetArraySize(pdhcp_range); i++) {
cJSON *pdelRange = cJSON_GetArrayItem(pdhcp_range, i);
cJSON *pdel_Item = cJSON_CreateObject();
char del_range[256];
bool deleted_flag = false;
cJSON *pdelRange = cJSON_GetArrayItem(pdhcp_range, i);
char del_range[256];
auto *delItem = (struct hash_map*)malloc(sizeof(hash_map));
if (!pdelRange) {
continue;
@ -457,48 +466,62 @@ static int delete_dhcpd_rangeset(data19 *req, const char *pRequest) {
st_addr = htonl(inet_addr(start));
en_addr = htonl(inet_addr(end));
cJSON_AddStringToObject(pdel_Item, "dhcpRange", pdelRange->valuestring);
if (st_addr && en_addr && st_addr <= en_addr) {
MYBYTE m = 0;
HASH_FIND_INT(delMap, &st_addr, delItem);
if (delItem == nullptr){
hash_map *s = (struct hash_map*)malloc(sizeof(struct hash_map));
s->key = st_addr;
s->value = en_addr;
HASH_ADD_INT(delMap, key, s);
}
}
for (; m < cfig.rangeCount && cfig.dhcpRanges[m].rangeStart; m++) {
if (!deleted_flag) {
if ((st_addr == cfig.dhcpRanges[m].rangeStart) && (en_addr == cfig.dhcpRanges[m].rangeEnd)) {
deleted_flag = true;
if (m == cfig.rangeCount - 1) {
memset(&cfig.dhcpRanges[m], 0, sizeof(struct data19));
}
continue;
} else if (st_addr == cfig.dhcpRanges[m].rangeStart || en_addr == cfig.dhcpRanges[m].rangeEnd) {
deleted_flag = false;
break;
}
} else {
cfig.dhcpRanges[m].rangeSetInd = m-1;
memcpy(&(cfig.dhcpRanges[m - 1]), &(cfig.dhcpRanges[m]), sizeof(struct data19));
}
for(int i = 0; i < cfig.rangeCount; i++){
cJSON *pdel_Item = cJSON_CreateObject();
hash_map *delRange;
char del_range[256];
char saddr[128];
char eaddr[128];
memset(del_range, 0, 256);
HASH_FIND_INT(delMap, &cfig.dhcpRanges[i].rangeStart, delRange);
if(delRange != nullptr){
IP2String(saddr, ntohl(delRange->key));
IP2String(eaddr, ntohl(delRange->value));
sprintf(del_range, "%s-%s", saddr, eaddr);
cJSON_AddStringToObject(pdel_Item, "dhcpRange", del_range);
//judge whether the input has error
if(delRange->key && delRange->value &&
(delRange->key == cfig.dhcpRanges[i].rangeStart) && (delRange->value == cfig.dhcpRanges[i].rangeEnd)){
cJSON_AddNumberToObject(pdel_Item, "status", ERR_SUCCESS);
cJSON_AddStringToObject(pdel_Item, "message", getErrorEnumDesc(ERR_SUCCESS));
cJSON_AddItemToArray(pdelArray, pdel_Item);
} else {
memcpy(&dhcpRanges[resCount], &cfig.dhcpRanges[i], sizeof(struct data13));
resCount++;
cJSON_AddNumberToObject(pdel_Item, "status", ERR_INPUT_PARAMS);
cJSON_AddStringToObject(pdel_Item, "message", getErrorEnumDesc(ERR_INPUT_PARAMS));
cJSON_AddItemToArray(pdelArray, pdel_Item);
}
} else {
cJSON_AddNumberToObject(pdel_Item, "status", ERR_INPUT_PARAMS);
cJSON_AddStringToObject(pdel_Item, "message", getErrorEnumDesc(ERR_INPUT_PARAMS));
cJSON_AddItemToArray(pdelArray, pdel_Item);
break;
//write to dhcpRanges
memcpy(&dhcpRanges[resCount], &cfig.dhcpRanges[i], sizeof(struct data13));
resCount++;
}
if (deleted_flag) {
cfig.rangeCount--;
} else {
cJSON_AddNumberToObject(pdel_Item, "status", ERR_INPUT_PARAMS);
cJSON_AddStringToObject(pdel_Item, "message", getErrorEnumDesc(ERR_INPUT_PARAMS));
cJSON_AddItemToArray(pdelArray, pdel_Item);
break;
}
cJSON_AddNumberToObject(pdel_Item, "status", ERR_SUCCESS);
cJSON_AddStringToObject(pdel_Item, "message", getErrorEnumDesc(ERR_SUCCESS));
cJSON_AddItemToArray(pdelArray, pdel_Item);
}
//rewite cfig.dhcpRanges
for(int i = 0; i < cfig.rangeCount; i++){
if(i < resCount){
memcpy(&cfig.dhcpRanges[i], &dhcpRanges[i], sizeof(struct data13));
} else {
memset(&cfig.dhcpRanges[i], 0, sizeof(struct data13));
}
}
cfig.rangeCount = resCount;
const char *pStrPro = proto_create_new(pRspRoot, 200);
fp += sprintf(fp, "%s", pStrPro);
@ -509,12 +532,11 @@ static int delete_dhcpd_rangeset(data19 *req, const char *pRequest) {
return ERR_SUCCESS;
}
static void revert(unsigned int* num) {
unsigned int v = *((unsigned int *)num) ;
unsigned int v = *num ;
v = ((v & 0x000000FF) << 24) | ((v & 0x0000FF00) << 8) |
((v & 0x00FF0000) >> 8) | ((v & 0xFF000000) >> 24) ;
*((unsigned int *)num) = v ;
*num = v ;
}
static int query_dhcpd_rangeset(data19 *req){