//добавляет трап в список public void addTrap(Trap trapObject) { dataList.Add(trapObject); }
private void recv(IAsyncResult res) { IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint); //Process codes // MessageBox.Show(Encoding.UTF8.GetString(received)); SnmpV2Packet pkt = new SnmpV2Packet(); pkt.decode(received, received.Length); _debug("Получен TRAP с адреса " + RemoteIpEndPoint.ToString()); //NotifyIcon notifyObj = new NotifyIcon(); //notifyObj.ShowBalloon(Convert.ToUInt32(ToolTipIcon.Info) ,"Сообщение", "Я свернулась:)",5000 ); string trapData = ""; foreach (Vb v in pkt.Pdu.VbList) { trapData = String.Concat(trapData, "**** " + v.Oid.ToString() + " " + SnmpConstants.GetTypeName(v.Value.Type) + " " + v.Value.ToString()); } Trap trp = new Trap(RemoteIpEndPoint.ToString(), pkt); if (checkForExcludes(trp)) { //через анонимный делегат отправим данные трапа на грид, чтобы не подвисал интерфейс, т.к. шлем из другого потока this.Invoke((MethodInvoker)delegate { //выведем нотификацию taskbarNotifier.Show("", "Получен трап с адреса " + RemoteIpEndPoint.ToString() + Environment.NewLine + "Community:" + trp.tCommunity, 300, 3000, 300); tList.addTrap(trp); addTrapToGrid(trp); // runs on UI thread }); tList.saveToFile(); } Client.BeginReceive(new AsyncCallback(recv), null); }
//добавить трап в грид private void addTrapToGrid(Trap currentTrap) { DataGridViewRow row = (DataGridViewRow) TrapGrid.Rows[0].Clone(); row.Cells[0].Value = currentTrap.tIPAddress; row.Cells[1].Value = currentTrap.trapID; row.Cells[2].Value = currentTrap.tTime; row.Cells[3].Value = currentTrap.tCommunity; int xx = 4; bool flag = false; foreach (ParserRule rls in parseConf.ruleList) { row.Cells[xx].Value = currentTrap.fields[rls.param]; if (flag == true) { break; } setRowColor(row, Color.Black); //MessageBox.Show("here"); if (row.Cells[xx].Value.ToString().Contains("CRT")) { setRowColor(row,Color.Red); flag = true; } else if (row.Cells[xx].Value.ToString().Contains("MAJ")) { setRowColor(row, Color.Orange); flag = true; //row.Cells[xx].Style.ForeColor = Color.Orange; } else if (row.Cells[xx].Value.ToString().Contains("MIN")) { setRowColor(row, Color.Yellow); flag = true; //row.Cells[xx].Style.ForeColor = Color.Yellow; } else if (row.Cells[xx].Value.ToString().Contains("INF")) { setRowColor(row, Color.Blue); flag = true; //row.Cells[xx].Style.ForeColor = Color.Blue; } else if (row.Cells[xx].Value.ToString().Contains("CLR")) { setRowColor(row, Color.Green); flag = true; //row.Cells[xx].Style.ForeColor = Color.Green; } //else //{ // flag = true; //row.Cells[xx].Style.ForeColor = Color.Black; //} xx++; } TrapGrid.Rows.Add(row); }
//добавить трап во внутренний список трапов private void addTrapToList(Trap currentTrap) { // xtrapList }
// проверяет, не содержит ли трап исключений public bool checkForExcludes(Trap trp) { //проверим по IP string[] split = excludes.iplist.Split(new Char[] { ',' }); foreach (string s in split) { if(trp.tIPAddress.Contains(s.Trim())) { _debug("-> Отклонен TRAP с адреса " + trp.tIPAddress.ToString() + " исключение по IP=" + s); //MessageBox.Show("ok!"); return false; } } string[] splitOID = excludes.oidlist.Split(new Char[] { ',' }); foreach (string s in splitOID) { if(trp.trapID.ToString().Contains(s.Trim())) { _debug("-> Отклонен TRAP с адреса " + trp.tIPAddress.ToString() + " исключение по TrapId=" + s); return false; } foreach(Vb oidata in trp.sourcePacket.Pdu.VbList) if(oidata.Oid.ToString().Contains(s.Trim())) { _debug("-> Отклонен TRAP с адреса " + trp.tIPAddress.ToString() + " исключение по содержимому OID=" + s); //MessageBox.Show("ok trap!"); return false; } } string[] splitValue = excludes.oidlist.Split(new Char[] { ',' }); foreach (string s in splitOID) { foreach(Vb oidata in trp.sourcePacket.Pdu.VbList) if(oidata.Value.ToString().Contains(s.Trim())) { _debug("-> Отклонен TRAP с адреса " + trp.tIPAddress.ToString() + " исключение по содержимому '" + s + "' в значении OID " + oidata.Oid.ToString()); //MessageBox.Show("ok val!!"); return false; } } return true; }