add rpc update interface

This commit is contained in:
yihaoDeng 2023-09-04 09:56:32 +08:00
parent e3682628a3
commit 59ce623efe
1 changed files with 32 additions and 22 deletions

View File

@ -71,6 +71,10 @@ typedef struct SSvrMsg {
} SSvrMsg;
typedef struct {
int64_t ver;
SArray* list;
} SWhiteUserList;
typedef struct {
SHashObj* pList;
int64_t ver;
@ -118,7 +122,7 @@ void uvWhiteListDestroy(SWhiteList* pWhite);
void uvWhiteListAdd(SWhiteList* pWhite, char* user, char* ip);
void uvWhiteListUpdate(SWhiteList* pWhite, SHashObj* pTable);
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);
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;
void* pIter = taosHashIterate(pWhiteList, NULL);
while (pIter) {
SArray* pArr = *(SArray**)pIter;
for (int i = 0; i < taosArrayGetSize(pArr); i++) {
char* range = taosArrayGetP(pArr, i);
SWhiteUserList* pList = *(SWhiteUserList**)pIter;
for (int i = 0; i < taosArrayGetSize(pList->list); i++) {
char* range = taosArrayGetP(pList->list, i);
taosMemoryFree(range);
}
taosArrayDestroy(pArr);
taosArrayDestroy(pList->list);
taosMemoryFree(pList);
pIter = taosHashIterate(pWhiteList, pIter);
}
taosHashCleanup(pWhiteList);
@ -304,13 +309,17 @@ void uvWhiteListDestroy(SWhiteList* pWhite) {
void uvWhiteListAdd(SWhiteList* pWhite, char* user, char* ip) {
SHashObj* pWhiteList = pWhite->pList;
SArray** ppArr = taosHashGet(pWhiteList, user, strlen(user));
if (ppArr == NULL || *ppArr == NULL) {
SArray* pArr = taosArrayInit(8, sizeof(void*));
taosArrayPush(pArr, &ip);
taosHashPut(pWhiteList, user, strlen(user), &pArr, sizeof(void*));
SWhiteUserList** ppList = taosHashGet(pWhiteList, user, strlen(user));
if (ppList == NULL || *ppList == NULL) {
SWhiteUserList* pList = taosMemoryCalloc(1, sizeof(SWhiteUserList));
pList->list = taosArrayInit(8, sizeof(void*));
taosArrayPush(pList->list, &ip);
pList->ver += 1;
taosHashPut(pWhiteList, user, strlen(user), &pList, sizeof(void*));
} 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
}
bool uvWhiteListFilte(SWhiteList* pWhite, char* user, uint32_t ip) {
bool uvWhiteListFilte(SWhiteList* pWhite, char* user, uint32_t ip, int64_t ver) {
// impl check
SHashObj* pWhiteList = pWhite->pList;
bool valid = false;
SArray** ppArr = taosHashGet(pWhiteList, user, strlen(user));
if (ppArr == NULL || *ppArr == NULL) {
SWhiteUserList** ppList = taosHashGet(pWhiteList, user, strlen(user));
if (ppList == NULL || *ppList == NULL) {
return true;
}
SWhiteUserList* pList = *ppList;
if (pList->ver == ver) return true;
for (int i = 0; i < taosArrayGetSize(*ppArr); i++) {
char* range = taosArrayGetP(*ppArr, i);
for (int i = 0; i < taosArrayGetSize(pList->list); i++) {
char* range = taosArrayGetP(pList->list, i);
if (uvCheckIp(range, ip)) {
valid = true;
break;
@ -338,10 +349,9 @@ bool uvWhiteListFilte(SWhiteList* pWhite, char* user, uint32_t ip) {
return valid;
}
bool uvWhiteListCheckConn(SWhiteList* pWhite, SSvrConn* pConn) {
if (pWhite->ver == pConn->whiteListVer) {
return true;
}
return uvWhiteListFilte(pWhite, pConn->user, pConn->clientIp);
if (pWhite->ver == pConn->whiteListVer) return true;
return uvWhiteListFilte(pWhite, pConn->user, pConn->clientIp, pConn->whiteListVer);
}
void uvWhiteListSetConnVer(SWhiteList* pWhite, SSvrConn* pConn) {
// if conn already check by current whiteLis