add rpc update interface
This commit is contained in:
parent
e3682628a3
commit
59ce623efe
|
@ -71,6 +71,10 @@ typedef struct SSvrMsg {
|
||||||
|
|
||||||
} SSvrMsg;
|
} SSvrMsg;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int64_t ver;
|
||||||
|
SArray* list;
|
||||||
|
} SWhiteUserList;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SHashObj* pList;
|
SHashObj* pList;
|
||||||
int64_t ver;
|
int64_t ver;
|
||||||
|
@ -118,7 +122,7 @@ void uvWhiteListDestroy(SWhiteList* pWhite);
|
||||||
void uvWhiteListAdd(SWhiteList* pWhite, char* user, char* ip);
|
void uvWhiteListAdd(SWhiteList* pWhite, char* user, char* ip);
|
||||||
void uvWhiteListUpdate(SWhiteList* pWhite, SHashObj* pTable);
|
void uvWhiteListUpdate(SWhiteList* pWhite, SHashObj* pTable);
|
||||||
bool uvWhiteListCheckConn(SWhiteList* pWhite, SSvrConn* pConn);
|
bool uvWhiteListCheckConn(SWhiteList* pWhite, SSvrConn* pConn);
|
||||||
bool uvWhiteListFilte(SWhiteList* pWhite, char* user, uint32_t ip);
|
bool uvWhiteListFilte(SWhiteList* pWhite, char* user, uint32_t ip, int64_t ver);
|
||||||
void uvWhiteListSetConnVer(SWhiteList* pWhite, SSvrConn* pConn);
|
void uvWhiteListSetConnVer(SWhiteList* pWhite, SSvrConn* pConn);
|
||||||
|
|
||||||
static void uvAllocConnBufferCb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf);
|
static void uvAllocConnBufferCb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf);
|
||||||
|
@ -289,12 +293,13 @@ void uvWhiteListDestroy(SWhiteList* pWhite) {
|
||||||
SHashObj* pWhiteList = pWhite->pList;
|
SHashObj* pWhiteList = pWhite->pList;
|
||||||
void* pIter = taosHashIterate(pWhiteList, NULL);
|
void* pIter = taosHashIterate(pWhiteList, NULL);
|
||||||
while (pIter) {
|
while (pIter) {
|
||||||
SArray* pArr = *(SArray**)pIter;
|
SWhiteUserList* pList = *(SWhiteUserList**)pIter;
|
||||||
for (int i = 0; i < taosArrayGetSize(pArr); i++) {
|
for (int i = 0; i < taosArrayGetSize(pList->list); i++) {
|
||||||
char* range = taosArrayGetP(pArr, i);
|
char* range = taosArrayGetP(pList->list, i);
|
||||||
taosMemoryFree(range);
|
taosMemoryFree(range);
|
||||||
}
|
}
|
||||||
taosArrayDestroy(pArr);
|
taosArrayDestroy(pList->list);
|
||||||
|
taosMemoryFree(pList);
|
||||||
pIter = taosHashIterate(pWhiteList, pIter);
|
pIter = taosHashIterate(pWhiteList, pIter);
|
||||||
}
|
}
|
||||||
taosHashCleanup(pWhiteList);
|
taosHashCleanup(pWhiteList);
|
||||||
|
@ -304,13 +309,17 @@ void uvWhiteListDestroy(SWhiteList* pWhite) {
|
||||||
void uvWhiteListAdd(SWhiteList* pWhite, char* user, char* ip) {
|
void uvWhiteListAdd(SWhiteList* pWhite, char* user, char* ip) {
|
||||||
SHashObj* pWhiteList = pWhite->pList;
|
SHashObj* pWhiteList = pWhite->pList;
|
||||||
|
|
||||||
SArray** ppArr = taosHashGet(pWhiteList, user, strlen(user));
|
SWhiteUserList** ppList = taosHashGet(pWhiteList, user, strlen(user));
|
||||||
if (ppArr == NULL || *ppArr == NULL) {
|
if (ppList == NULL || *ppList == NULL) {
|
||||||
SArray* pArr = taosArrayInit(8, sizeof(void*));
|
SWhiteUserList* pList = taosMemoryCalloc(1, sizeof(SWhiteUserList));
|
||||||
taosArrayPush(pArr, &ip);
|
pList->list = taosArrayInit(8, sizeof(void*));
|
||||||
taosHashPut(pWhiteList, user, strlen(user), &pArr, sizeof(void*));
|
taosArrayPush(pList->list, &ip);
|
||||||
|
pList->ver += 1;
|
||||||
|
taosHashPut(pWhiteList, user, strlen(user), &pList, sizeof(void*));
|
||||||
} else {
|
} else {
|
||||||
taosArrayPush(*ppArr, &ip);
|
SWhiteUserList* pList = *ppList;
|
||||||
|
pList->ver += 1;
|
||||||
|
taosArrayPush(pList->list, &ip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,17 +328,19 @@ void uvWhiteListUpdate(SWhiteList* pWhite, SHashObj* pTable) {
|
||||||
// impl later
|
// impl later
|
||||||
}
|
}
|
||||||
|
|
||||||
bool uvWhiteListFilte(SWhiteList* pWhite, char* user, uint32_t ip) {
|
bool uvWhiteListFilte(SWhiteList* pWhite, char* user, uint32_t ip, int64_t ver) {
|
||||||
// impl check
|
// impl check
|
||||||
SHashObj* pWhiteList = pWhite->pList;
|
SHashObj* pWhiteList = pWhite->pList;
|
||||||
bool valid = false;
|
bool valid = false;
|
||||||
SArray** ppArr = taosHashGet(pWhiteList, user, strlen(user));
|
SWhiteUserList** ppList = taosHashGet(pWhiteList, user, strlen(user));
|
||||||
if (ppArr == NULL || *ppArr == NULL) {
|
if (ppList == NULL || *ppList == NULL) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
SWhiteUserList* pList = *ppList;
|
||||||
|
if (pList->ver == ver) return true;
|
||||||
|
|
||||||
for (int i = 0; i < taosArrayGetSize(*ppArr); i++) {
|
for (int i = 0; i < taosArrayGetSize(pList->list); i++) {
|
||||||
char* range = taosArrayGetP(*ppArr, i);
|
char* range = taosArrayGetP(pList->list, i);
|
||||||
if (uvCheckIp(range, ip)) {
|
if (uvCheckIp(range, ip)) {
|
||||||
valid = true;
|
valid = true;
|
||||||
break;
|
break;
|
||||||
|
@ -338,10 +349,9 @@ bool uvWhiteListFilte(SWhiteList* pWhite, char* user, uint32_t ip) {
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
bool uvWhiteListCheckConn(SWhiteList* pWhite, SSvrConn* pConn) {
|
bool uvWhiteListCheckConn(SWhiteList* pWhite, SSvrConn* pConn) {
|
||||||
if (pWhite->ver == pConn->whiteListVer) {
|
if (pWhite->ver == pConn->whiteListVer) return true;
|
||||||
return true;
|
|
||||||
}
|
return uvWhiteListFilte(pWhite, pConn->user, pConn->clientIp, pConn->whiteListVer);
|
||||||
return uvWhiteListFilte(pWhite, pConn->user, pConn->clientIp);
|
|
||||||
}
|
}
|
||||||
void uvWhiteListSetConnVer(SWhiteList* pWhite, SSvrConn* pConn) {
|
void uvWhiteListSetConnVer(SWhiteList* pWhite, SSvrConn* pConn) {
|
||||||
// if conn already check by current whiteLis
|
// if conn already check by current whiteLis
|
||||||
|
|
Loading…
Reference in New Issue