All pastes #340856 Raw Edit

Miscellany

public text v1 · immutable
#340856 ·published 2007-02-05 02:21 UTC
rendered paste body
--- oSpy/Parser/MSN.cs
+++ oSpy/Parser/MSN.cs
@@ -285,6 +285,68 @@
         }
     }
 
+    public class MSNSBVisualizer : SessionVisualizer
+    {
+        public override string Name
+        {
+            get { return "MSNSwitchboard"; }
+        }
+
+        public override VisualTransaction[] GetTransactions(IPSession session)
+        {
+            List<VisualTransaction> transactions = new List<VisualTransaction>();
+
+            foreach (TransactionNode node in session.Nodes)
+            {
+                if (node.Name == "MSNSBCommand")
+                {
+                    IPPacket pkt = node.Slices[0].Packet;
+
+                    VisualTransaction vt = new VisualTransaction(node.Index, pkt.Direction, pkt.Timestamp);
+
+                    string headline = (string) node["Command"];
+
+                    if (node.Fields.ContainsKey("Arguments"))
+                        headline += " " + (string) node["Arguments"];
+
+                    vt.HeadlineText = headline;
+
+                    TransactionNode payloadNode = node.FindChild("Payload", false);
+                    if (payloadNode != null)
+                    {
+                        string body = "";
+
+                        if (payloadNode.Fields.ContainsKey("XML"))
+                        {
+                            XMLHighlighter highlighter;
+
+                            XML.PrettyPrint((string)payloadNode["XML"], out body, out highlighter);
+                        }
+                        else if (payloadNode.Fields.ContainsKey("Text"))
+                        {
+                            body = (string)payloadNode["Text"];
+                        }
+                        else if (payloadNode.Fields.ContainsKey("MSNSLP"))
+                        {
+                            body = (string)payloadNode["MSNSLP"];
+                        }
+                        else
+                        {
+                            body = String.Format("Unhandled payload format: {0}",
+                                (payloadNode.FieldNames.Count > 0) ? payloadNode.FieldNames[0] : payloadNode.Children[0].Name);
+                        }
+
+                        vt.BodyText = body;
+                    }
+
+                    transactions.Add(vt);
+                }
+            }
+
+            return transactions.ToArray();
+        }
+    }
+
     [Serializable()]
     public class MSNSLPCall
     {
--- oSpy/VisualSession.cs
+++ oSpy/VisualSession.cs
@@ -229,6 +229,7 @@
 
             Register(new TCPVisualizer());
             Register(new HTTPVisualizer());
+            Register(new MSNSBVisualizer());
             Register(new MSNP2PVisualizer());
         }