📄 hostc.c
字号:
hostcontrol->LexList = host; host->LexPrev = NULL; host->LexNext = NULL; return TRUE; } for (p = hostcontrol->LexList, q = NULL; p != NULL; q = p, p = p->LexNext) { if (addrcmp(p, host, addrlen, addrlen) >= 0) break; } if (q != NULL) q->LexNext = host; else hostcontrol->LexList = host; if (p != NULL) p->LexPrev = host; host->LexPrev = q; host->LexNext = p; return TRUE;}BOOLEAN HostAddTimeList(HOST_CONTROL * hostcontrol, HOST * host){ if (hostcontrol->TimeList == NULL) { hostcontrol->TimeList = host; hostcontrol->TimeLast = host; host->TimePrev = NULL; host->TimeNext = NULL; hostcontrol->TimeListUpdated = TRUE; return TRUE; } host->TimePrev = hostcontrol->TimeLast; host->TimeNext = NULL; hostcontrol->TimeLast->TimeNext = host; hostcontrol->TimeLast = host; hostcontrol->TimeListUpdated = TRUE; return TRUE;}HOST *HostAddLRUList(HOST_CONTROL * hostcontrol, HOST * host){ if (hostcontrol->LRUList == NULL) { hostcontrol->LRUList = host; hostcontrol->LRULast = host; host->LRUPrev = NULL; host->LRUNext = NULL; return NULL; } host->LRUNext = hostcontrol->LRUList; host->LRUPrev = NULL; hostcontrol->LRUList->LRUPrev = host; hostcontrol->LRUList = host; return hostcontrol->LRULast;}BOOLEAN HostUpdateLRUList(HOST_CONTROL * hostcontrol, HOST * host){ if (hostcontrol->TableSize > 1 && hostcontrol->LRUList != host) { HostRemoveLRUList(hostcontrol, host); HostAddLRUList(hostcontrol, host); } return TRUE;}BOOLEAN HostRemoveLexList(HOST_CONTROL * hostcontrol, HOST * host){ if (host->LexPrev != NULL) host->LexPrev->LexNext = host->LexNext; else hostcontrol->LexList = host->LexNext; if (host->LexNext != NULL) host->LexNext->LexPrev = host->LexPrev; host->LexPrev = NULL; host->LexNext = NULL; return TRUE;}BOOLEAN HostRemoveTimeList(HOST_CONTROL * hostcontrol, HOST * host){ if (host->TimePrev != NULL) host->TimePrev->TimeNext = host->TimeNext; else hostcontrol->TimeList = host->TimeNext; if (host->TimeNext != NULL) host->TimeNext->TimePrev = host->TimePrev; else hostcontrol->TimeLast = host->TimePrev; hostcontrol->TimeListUpdated = TRUE; host->TimePrev = NULL; host->TimeNext = NULL; return TRUE;}BOOLEAN HostRemoveLRUList(HOST_CONTROL * hostcontrol, HOST * host){ if (host->LRUPrev != NULL) host->LRUPrev->LRUNext = host->LRUNext; else hostcontrol->LRUList = host->LRUNext; if (host->LRUNext != NULL) host->LRUNext->LRUPrev = host->LRUPrev; else hostcontrol->LRULast = host->LRUPrev; host->LRUPrev = NULL; host->LRUNext = NULL; return TRUE;}VOID DelHosts(HOST_CONTROL * hostcontrol){ HOST *host1, *host2; for (host2 = hostcontrol->LexList; host2 != NULL; host2 = host1) { host1 = host2->LexNext; DnpapFree(host2); hostcontrol->TableSize--; } hostcontrol->LexList = NULL;}HOST *HostSearchNext(HOST_CONTROL * hostcontrol, HOST * host, WORD len){ HOST *p; WORD addrlen = hostcontrol->AddressLen; if (len == addrlen && (p = HashSearch(hostcontrol->Table, host->Address, len)) != NULL) return p->LexNext; else { for (p = hostcontrol->LexList; p != NULL; p = p->LexNext) { if (addrcmp(p, host, addrlen, len) >= 0) break; } return p; } return NULL;}HOST *HostSearchHash(HOST_CONTROL * hostcontrol, SNMP_OBJECT * obj, WORD idlen){ WORD i, addrlen = hostcontrol->AddressLen; BYTE address[HOST_SIZE_ADDR]; if (obj->Id[idlen + 1] != addrlen) return NULL; for (i = 0; i < addrlen; i++) address[i] = (BYTE) obj->Id[idlen + 2 + i]; return HashSearch(hostcontrol->Table, address, addrlen);}HOST *HostTimeSearch(HOST_CONTROL * hostcontrol, SNMP_OBJECT * obj, WORD idlen){ if (obj->Id[idlen + 1] < 1 || obj->Id[idlen + 1] > hostcontrol->TableSize) return NULL; if (hostcontrol->TimeListUpdated == TRUE) HostUpdateTimeTable(hostcontrol); return hostcontrol->TimeTable[obj->Id[idlen + 1] - 1];}LONG HostSearchCreationOrder(HOST_CONTROL * hostcontrol, HOST * host){ if (hostcontrol->TimeListUpdated == TRUE) HostUpdateTimeTable(hostcontrol); return host->TimeListPtr - hostcontrol->TimeTable + 1;}BOOLEAN HostUpdateTimeTable(HOST_CONTROL * hostcontrol){ LONG i; HOST *p; for (p = hostcontrol->TimeList, i = 0; p != NULL; p = p->TimeNext, i++) { hostcontrol->TimeTable[i] = p; p->TimeListPtr = hostcontrol->TimeTable + i; } if (i != hostcontrol->TableSize) { DnpapMessage(DMC_FATAL, HOST_UPDTIME, "hostcontrol: internal error in time list and table"); DnpapExit(HOST_UPDTIME); } hostcontrol->TimeListUpdated = FALSE; return TRUE;}int addrcmp(HOST * host1, HOST * host2, WORD addrlen, WORD len){ INT i1, i2; BYTE *a1 = host1->Address, *a2 = host2->Address; if (len > addrlen) len = addrlen; for (i1 = 0, i2 = 0; len > 0; i1++, i2++, len--) { if (a1[i1] < a2[i2]) return -1; else if (a1[i1] > a2[i2]) return 1; } return 0;}#ifdef DEBUGVOID HostCheckListsConsistency(HOST_CONTROL * hostcontrol){ HOST *p; LONG count; WORD addrlen = hostcontrol->AddressLen; for (p = hostcontrol->LexList, count = 0; p != NULL; p = p->LexNext, count++) if (HashSearch(hostcontrol->Table, p->Address, addrlen) != p) DnpapMessage(DMC_FATAL, HOST_ERROR, "hostcontrol: internal error in lexical list"); if (count != hostcontrol->TableSize) DnpapMessage(DMC_FATAL, HOST_ERROR, "hostcontrol: wrong number of elements in lexical list"); for (p = hostcontrol->TimeList, count = 0; p != NULL; p = p->TimeNext, count++) if (HashSearch(hostcontrol->Table, p->Address, addrlen) != p) DnpapMessage(DMC_FATAL, HOST_ERROR, "hostcontrol: internal error in time list"); if (count != hostcontrol->TableSize) DnpapMessage(DMC_FATAL, HOST_ERROR, "hostcontrol: wrong number of elements in time list"); for (p = hostcontrol->LRUList, count = 0; p != NULL; p = p->LRUNext, count++) if (HashSearch(hostcontrol->Table, p->Address, addrlen) != p) DnpapMessage(DMC_FATAL, HOST_ERROR, "hostcontrol: internal error in LRU list"); if (count != hostcontrol->TableSize) DnpapMessage(DMC_FATAL, HOST_ERROR, "hostcontrol: wrong number of elements in time list"); if (hostcontrol->TimeListUpdated == TRUE) HostUpdateTimeTable(hostcontrol); for (p = hostcontrol->TimeList, count = 0; p != NULL; p = p->TimeNext, count++) if (hostcontrol->TimeTable[count] != p || p->TimeListPtr != hostcontrol->TimeTable + count) DnpapMessage(DMC_FATAL, HOST_ERROR, "hostcontrol: internal error in time table");}VOID HostCheckListsAdd(HOST_CONTROL * hostcontrol, HOST * host){ HOST *p; WORD addrlen = hostcontrol->AddressLen; if (HashSearch(hostcontrol->Table, host->Address, addrlen) != NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host already in hash table"); for (p = hostcontrol->LexList; p != NULL; p = p->LexNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) DnpapMessage(DMC_FATAL, HOST_ERROR, "host already in lexical list"); } for (p = hostcontrol->TimeList; p != NULL; p = p->TimeNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) DnpapMessage(DMC_FATAL, HOST_ERROR, "host already in time list"); } for (p = hostcontrol->LRUList; p != NULL; p = p->LRUNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) DnpapMessage(DMC_FATAL, HOST_ERROR, "host already in LRU list"); }}VOID HostCheckListsAdd2(HOST_CONTROL * hostcontrol, HOST * host){ HOST *p; WORD addrlen = hostcontrol->AddressLen; if (HashSearch(hostcontrol->Table, host->Address, addrlen) == NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host not added to hash table"); for (p = hostcontrol->LexList; p != NULL; p = p->LexNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) break; } if (p == NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host not added to lexical list"); for (p = hostcontrol->TimeList; p != NULL; p = p->TimeNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) break; } if (p == NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host not added to time list"); for (p = hostcontrol->LRUList; p != NULL; p = p->LRUNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) break; } if (p == NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host not added to LRU list");}VOID HostCheckListsRemove(HOST_CONTROL * hostcontrol, HOST * host){ HOST *p; WORD addrlen = hostcontrol->AddressLen; if (HashSearch(hostcontrol->Table, host->Address, addrlen) != NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host that was just removed can still be retrieved"); for (p = hostcontrol->LexList; p != NULL; p = p->LexNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) DnpapMessage(DMC_FATAL, HOST_ERROR, "host that was just removed can still be retrieved from lexical list"); } for (p = hostcontrol->TimeList; p != NULL; p = p->TimeNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) DnpapMessage(DMC_FATAL, HOST_ERROR, "host that was just removed can still be retrieved from time list"); } for (p = hostcontrol->LRUList; p != NULL; p = p->LRUNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) DnpapMessage(DMC_FATAL, HOST_ERROR, "host that was just removed can still be retrieved from LRU list"); }}VOID HostCheckListsRemove2(HOST_CONTROL * hostcontrol, HOST * host){ HOST *p; WORD addrlen = hostcontrol->AddressLen; if (HashSearch(hostcontrol->Table, host->Address, addrlen) == NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host already removed"); for (p = hostcontrol->LexList; p != NULL; p = p->LexNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) break; } if (p == NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host already removed from lexical list"); for (p = hostcontrol->TimeList; p != NULL; p = p->TimeNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) break; } if (p == NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host already removed from time list"); for (p = hostcontrol->LRUList; p != NULL; p = p->LRUNext) { if (addrcmp(p, host, addrlen, addrlen) == 0) break; } if (p == NULL) DnpapMessage(DMC_FATAL, HOST_ERROR, "host already removed from LRU list");}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -