Beispiel #1
0
        public void AddSession(IPSession session)
        {
            sessions.Add(session);

            session.NewTransactionNode += session_NewTransactionNode;

            foreach (IPPacket p in session.StreamIn.Packets)
            {
                packets[p.Index] = p;
            }

            foreach (IPPacket p in session.StreamOut.Packets)
            {
                packets[p.Index] = p;
            }

            foreach (TransactionFactory fac in factories)
            {
#if PRODUCTION
                try
                {
#endif
                if (fac.HandleSession(session))
                {
                    break;
                }
#if PRODUCTION
            }
            catch (Exception e)
            {
                string msg = String.Format("An unhandled exception occured while the parser {0} was parsing session {1}: {2}\n\nBacktrace:\n{3}\n\nPlease submit your trace to [email protected]",
                                           fac.GetType().Name, session, e.Message, e.StackTrace);
                MessageBox.Show(msg, "Parsing error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
#endif

                session.ResetState();
            }

            session.AllNodesAdded();
        }
Beispiel #2
0
        public override VisualTransaction[] GetTransactions(IPSession session)
        {
            List<VisualTransaction> transactions = new List<VisualTransaction>();

            session.ResetState();

            PacketStream stream1 = session.GetNextStreamDirection();
            PacketStream stream2 = session.GetNextStreamDirection();

            List<IPPacket> packets = new List<IPPacket>(stream1.Packets.Count + stream2.Packets.Count);
            packets.AddRange(stream1.Packets);
            packets.AddRange(stream2.Packets);
            packets.Sort();

            VisualTransaction transaction = null;
            MemoryStream previewData = new MemoryStream();
            int transferred = 0;

            foreach (IPPacket packet in packets)
            {
                if (transaction == null || (transaction != null && packet.Direction != transaction.Direction))
                {
                    if (transaction != null)
                    {
                        transaction.AddHeaderField("Size", transferred);

                        byte[] bytes = previewData.ToArray();
                        transaction.SetBodyFromPreviewData(bytes, bytes.Length);
                    }

                    transaction = new VisualTransaction(packet.Index, packet.Direction, packet.Timestamp);
                    transaction.AddHeaderField("Direction", packet.Direction);
                    transaction.HeaderRowsPerCol = 1;
                    transactions.Add(transaction);
                    previewData.SetLength(0);
                    transferred = 0;
                }

                transaction.EndTime = packet.Timestamp;

                previewData.Write(packet.Bytes, 0, packet.Bytes.Length);

                transferred += packet.Bytes.Length;
            }

            if (transaction != null)
            {
                transaction.AddHeaderField("Size", transferred);

                byte[] bytes = previewData.ToArray();
                transaction.SetBodyFromTruncatedPreviewData(bytes, transferred - bytes.Length);
            }

            return transactions.ToArray();
        }
Beispiel #3
0
        public void AddSession(IPSession session)
        {
            sessions.Add(session);

            session.NewTransactionNode += session_NewTransactionNode;

            foreach (IPPacket p in session.StreamIn.Packets)
            {
                packets[p.Index] = p;
            }

            foreach (IPPacket p in session.StreamOut.Packets)
            {
                packets[p.Index] = p;
            }

            foreach (TransactionFactory fac in factories)
            {
#if PRODUCTION
                try
                {
#endif
                    if (fac.HandleSession(session))
                        break;
#if PRODUCTION
                }
                catch (Exception e)
                {
                    string msg = String.Format("An unhandled exception occured while the parser {0} was parsing session {1}: {2}\n\nBacktrace:\n{3}\n\nPlease submit your trace to [email protected]",
                        fac.GetType().Name, session, e.Message, e.StackTrace);
                    MessageBox.Show(msg, "Parsing error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
#endif

                    session.ResetState();
            }

            session.AllNodesAdded();
        }