📄 dmatrixm.c
字号:
} } if (first == TRUE) { if (SDorder == TRUE) { *source = matrixcontrol->SrcList; conn = (*source)->LexList; if (conn == NULL) /* however, there should always be one */ return NULL; *rank = DMatrixListSearchRank(*source, conn->ConnHost->Addr, &conn2, addrlen); if (*rank == 0) /* however, there should always be one */ return NULL; for (i = 0; i < addrlen; i++) { obj->Id[idlen + 2 + i] = (LONG) (*source)->Addr[i]; obj->Id[idlen + 3 + i + addrlen] = (LONG) conn->ConnHost->Addr[i]; } obj->Id[idlen + 1] = addrlen; obj->Id[idlen + 1 + addrlen + 1] = addrlen; obj->IdLen = idlen + 1 + 2 + 2 * addrlen; } else { *dest = matrixcontrol->DstList; conn = (*dest)->LexList; if (conn == NULL) /* however, there should always be one */ return NULL; *rank = DMatrixListSearchRank(*dest, conn->ConnHost->Addr, &conn2, addrlen); if (*rank == 0) /* however, there should always be one */ return NULL; for (i = 0; i < addrlen; i++) { obj->Id[idlen + 2 + i] = (LONG) (*dest)->Addr[i]; obj->Id[idlen + 3 + i + addrlen] = (LONG) conn->ConnHost->Addr[i]; } obj->Id[idlen + 1] = addrlen; obj->Id[idlen + 1 + addrlen + 1] = addrlen; obj->IdLen = idlen + 1 + 2 + 2 * addrlen; } return conn; } len = obj->IdLen - idlen - 2; if (len < 0) len = 0; if (len > addrlen) len--; if (len > 2 * addrlen) len = 2 * addrlen; /* fill in srcdst in both orders: SDorder or reverse */ for (i = 0; i < len; i++) srcdst[i] = (BYTE) obj->Id[idlen + 2 + (i < addrlen ? 0 : 1) + i]; if (firstconn == TRUE) len = addrlen; /* force finding of first connection */ if (nextconn == TRUE) { len = addrlen; /* force finding of next connection */ for (i = addrlen-1; i >= 0; i--) if (++srcdst[i] != 0) break; if (i < 0 && srcdst[0] == 0) return NULL; } if (SDorder == TRUE) { src = srcdst; dst = srcdst + addrlen; if (len == 0) { *source = matrixcontrol->SrcList; conn = (*source)->LexList; } else if (len > 0 && len < addrlen) { *source = DnpapMatrixSearchHost(matrixcontrol, src, len, TRUE); if (*source == NULL) return NULL; conn = (*source)->LexList; } else if (len >= addrlen && len <= 2 * addrlen) { *source = HashSearch(matrixcontrol->SrcTable, src, addrlen); if (*source == NULL) { if ((*source = DnpapMatrixSearchHost(matrixcontrol, src, addrlen, TRUE)) == NULL) return NULL; conn = (*source)->LexList; } else { conn = DMatrixListSearchAddr(*source, dst, len - addrlen); if (len == 2 * addrlen) { if (conn != NULL && memcmp(conn->ConnHost->Addr, dst, addrlen) == 0) conn = conn->LexNext; if (conn == NULL) { *source = (*source)->Next; if (*source != NULL) conn = (*source)->LexList; } } } } if (conn != NULL) { for (i = 0; i < addrlen; i++) { obj->Id[idlen + 2 + i] = (*source)->Addr[i]; obj->Id[idlen + 3 + i + addrlen] = conn->ConnHost->Addr[i]; } obj->Id[idlen + 1] = addrlen; obj->Id[idlen + 1 + addrlen + 1] = addrlen; obj->IdLen = idlen + 1 + 2 + 2 * addrlen; *rank = DMatrixListSearchRank(*source, conn->ConnHost->Addr, &conn2, addrlen); } } else { src = srcdst + addrlen; dst = srcdst; if (len == 0) { *dest = matrixcontrol->DstList; conn = (*dest)->LexList; } else if (len > 0 && len < addrlen) { *dest = DnpapMatrixSearchHost(matrixcontrol, dst, len, FALSE); if (*dest == NULL) return NULL; conn = (*dest)->LexList; } else if (len >= addrlen && len <= 2 * addrlen) { *dest = HashSearch(matrixcontrol->DstTable, dst, addrlen); if (*dest == NULL) { if ((*dest = DnpapMatrixSearchHost(matrixcontrol, dst, addrlen, FALSE)) == NULL) return NULL; conn = (*dest)->LexList; } else { conn = DMatrixListSearchAddr(*dest, src, len - addrlen); if (len == 2 * addrlen) { if (conn != NULL && memcmp(conn->ConnHost->Addr, src, addrlen) == 0) conn = conn->LexNext; if (conn == NULL) { *dest = (*dest)->Next; if (*dest != NULL) conn = (*dest)->LexList; } } } } if (conn != NULL) { for (i = 0; i < addrlen; i++) { obj->Id[idlen + 2 + i] = (*dest)->Addr[i]; obj->Id[idlen + 3 + i + addrlen] = conn->ConnHost->Addr[i]; } obj->Id[idlen + 1] = addrlen; obj->Id[idlen + 1 + addrlen + 1] = addrlen; obj->IdLen = idlen + 1 + 2 + 2 * addrlen; *rank = DMatrixListSearchRank(*dest, conn->ConnHost->Addr, &conn2, addrlen); } } return conn;}ConnInfo *GetTopFirstNext(DNPAP_MATRIX_CONTROL * matrixcontrol, SNMP_OBJECT * obj, WORD idlen, BOOLEAN first, BOOLEAN SDorder, Host ** source, Host ** dest, INT * rank){ BYTE addr[HOST_SIZE_ADDR]; INT i, len; ConnInfo *conn = NULL; WORD addrlen = matrixcontrol->AddressLen; *source = *dest = NULL; *rank = 0; if (matrixcontrol->TableSize == 0) return NULL; if (first == FALSE) { if (obj->IdLen > idlen + 1) { if (obj->Id[idlen + 1] > addrlen) return NULL; if (obj->Id[idlen + 1] < addrlen) first = TRUE; } else first = TRUE; } if (first == TRUE) { if (SDorder == TRUE) { *source = matrixcontrol->SrcList; *rank = 1; conn = (*source)->TopList; if (conn == NULL) return NULL; for (i = 0; i < addrlen; i++) obj->Id[idlen + 2 + i] = (LONG) (*source)->Addr[i]; obj->Id[idlen + 1] = addrlen; obj->Id[idlen + 2 + addrlen] = *rank; obj->IdLen = idlen + 1 + 1 + addrlen + 1; } else { *dest = matrixcontrol->DstList; *rank = 1; conn = (*dest)->TopList; if (conn == NULL) return NULL; for (i = 0; i < addrlen; i++) obj->Id[idlen + 2 + i] = (LONG) (*dest)->Addr[i]; obj->Id[idlen + 1] = addrlen; obj->Id[idlen + 2 + addrlen] = *rank; obj->IdLen = idlen + 1 + 1 + addrlen + 1; } return conn; } len = obj->IdLen - idlen - 2; if (len < 0) len = 0; else if (len > addrlen + 1) len = addrlen + 1; for (i = 0; i < (len > addrlen ? addrlen : len); i++) addr[i] = (BYTE) obj->Id[idlen + 2 + i]; if (SDorder == TRUE) { if (len == 0) { *source = matrixcontrol->SrcList; *rank = 1; conn = (*source)->TopList; } else if (len > 0 && len < addrlen) { *source = DnpapMatrixSearchHost(matrixcontrol, addr, len, TRUE); if (*source == NULL) return NULL; *rank = 1; conn = (*source)->TopList; } else if (len == addrlen) { *source = HashSearch(matrixcontrol->SrcTable, addr, addrlen); if (*source == NULL) { if ((*source = DnpapMatrixSearchHost(matrixcontrol, addr, addrlen, TRUE)) == NULL) return NULL; } *rank = 1; conn = (*source)->TopList; } else if (len == addrlen + 1) { *source = HashSearch(matrixcontrol->SrcTable, addr, addrlen); if (*source == NULL) { if ((*source = DnpapMatrixSearchHost(matrixcontrol, addr, addrlen, TRUE)) == NULL) return NULL; *rank = 1; conn = (*source)->TopList; } else { *rank = obj->Id[idlen + 2 + addrlen]; conn = DMatrixListSearchTop(*source, *rank); if (conn != NULL) { conn = conn->TopNext; (*rank)++; } if (conn == NULL) { *source = (*source)->Next; if (*source != NULL) { conn = (*source)->TopList; *rank = 1; } } } } if (conn != NULL) { for (i = 0; i < addrlen; i++) obj->Id[idlen + 2 + i] = (LONG) (*source)->Addr[i]; obj->Id[idlen + 2 + addrlen] = *rank; obj->Id[idlen + 1] = addrlen; obj->IdLen = idlen + 1 + 1 + addrlen + 1; } } else { if (len == 0) { *dest = matrixcontrol->DstList; *rank = 1; conn = (*dest)->TopList; } else if (len > 0 && len < addrlen) { *dest = DnpapMatrixSearchHost(matrixcontrol, addr, len, FALSE); if (*dest == NULL) return NULL; *rank = 1; conn = (*dest)->TopList; } else if (len == addrlen) { *dest = HashSearch(matrixcontrol->DstTable, addr, addrlen); if (*dest == NULL) { if ((*dest = DnpapMatrixSearchHost(matrixcontrol, addr, addrlen, FALSE)) == NULL) return NULL; } *rank = 1; conn = (*dest)->TopList; } else if (len == addrlen + 1) { *dest = HashSearch(matrixcontrol->DstTable, addr, addrlen); if (*dest == NULL) { if ((*dest = DnpapMatrixSearchHost(matrixcontrol, addr, addrlen, FALSE)) == NULL) return NULL; *rank = 1; conn = (*dest)->TopList; } else { *rank = obj->Id[idlen + 2 + addrlen]; conn = DMatrixListSearchTop(*dest, *rank); if (conn != NULL) { conn = conn->TopNext; (*rank)++; } if (conn == NULL) { *dest = (*dest)->Next; if (*dest != NULL) { conn = (*dest)->TopList; *rank = 1; } } } } if (conn != NULL) { for (i = 0; i < addrlen; i++) obj->Id[idlen + 2 + i] = (LONG) (*dest)->Addr[i]; obj->Id[idlen + 2 + addrlen] = *rank; obj->Id[idlen + 1] = addrlen; obj->IdLen = idlen + 1 + 1 + addrlen + 1; } } return conn;}VOID DnpapMatrixChannelStop(LONG channelIndex){ MIB_LOCAL *matrixinstance; DNPAP_MATRIX_CONTROL *matrixcontrol; for (matrixinstance = MatrixControlInstance; matrixinstance != NULL; matrixinstance = matrixinstance->Next) { matrixcontrol = matrixinstance->Data; if (matrixcontrol->Status == SNMP_VALID && matrixcontrol->Channel == TRUE && matrixcontrol->ChannelAccept == TRUE && matrixcontrol->Source[matrixcontrol->SourceLen - 1] == channelIndex) matrixcontrol->ChannelAccept = FALSE; }}VOID DnpapMatrixPkt(LONG channelIndex, PROT_PKT * pkt){ MIB_LOCAL *matrixinstance; DNPAP_MATRIX_CONTROL *matrixcontrol; for (matrixinstance = MatrixControlInstance; matrixinstance != NULL; matrixinstance = matrixinstance->Next) { matrixcontrol = matrixinstance->Data; if (matrixcontrol->Status == SNMP_VALID && matrixcontrol->Channel == TRUE && matrixcontrol->ChannelAccept == TRUE && matrixcontrol->Source[matrixcontrol->SourceLen - 1] == channelIndex) DnpapMatrixHandlePkt(matrixcontrol, pkt); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -