OCT 修改删除地址池接口
This commit is contained in:
parent
f0eedc5615
commit
be21a2fffe
|
@ -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){
|
||||
|
|
Loading…
Reference in New Issue