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