diff --git a/OpenMetaverse.Tests/MessageTests.cs b/OpenMetaverse.Tests/MessageTests.cs index ae41a662..55375ac4 100644 --- a/OpenMetaverse.Tests/MessageTests.cs +++ b/OpenMetaverse.Tests/MessageTests.cs @@ -890,6 +890,75 @@ namespace OpenMetaverse.Tests Assert.AreEqual(s.Subject, t.Subject); Assert.AreEqual(s.ToEmail, t.ToEmail); } + + [Test] + public void UpdateNotecardAgentInventoryMessage() + { + UpdateNotecardAgentInventoryMessage s = new UpdateNotecardAgentInventoryMessage(); + s.ItemID = UUID.Random(); + + OSDMap map = s.Serialize(); + + UpdateNotecardAgentInventoryMessage t = new UpdateNotecardAgentInventoryMessage(); + t.Deserialize(map); + + Assert.AreEqual(s.ItemID, t.ItemID); + } + + [Test] + public void LandStatReplyMessage() + { + LandStatReplyMessage s = new LandStatReplyMessage(); + s.ReporType = 22; + s.RequestFlags = 44; + s.TotalObjectCount = 2; + s.ReportDataBlocks = new LandStatReplyMessage.ReportDataBlock[2]; + + LandStatReplyMessage.ReportDataBlock block1 = new LandStatReplyMessage.ReportDataBlock(); + block1.Location = Vector3.One; + block1.MonoScore = 99; + block1.OwnerName = "Profoky Neva"; + block1.Score = 10; + block1.TaskID = UUID.Random(); + block1.TaskLocalID = 987341; + block1.TaskName = "Verbal Flogging"; + block1.TimeStamp = new DateTime(2009, 5, 23, 4, 30, 0); + s.ReportDataBlocks[0] = block1; + + LandStatReplyMessage.ReportDataBlock block2 = new LandStatReplyMessage.ReportDataBlock(); + block2.Location = Vector3.One; + block2.MonoScore = 1; + block2.OwnerName = "Philip Linden"; + block2.Score = 5; + block2.TaskID = UUID.Random(); + block2.TaskLocalID = 987342; + block2.TaskName = "Happy Ant"; + block2.TimeStamp = new DateTime(2008, 4, 22, 3, 29, 55); + s.ReportDataBlocks[1] = block2; + + OSDMap map = s.Serialize(); + + LandStatReplyMessage t = new LandStatReplyMessage(); + t.Deserialize(map); + + Assert.AreEqual(s.ReporType, t.ReporType); + Assert.AreEqual(s.RequestFlags, t.RequestFlags); + Assert.AreEqual(s.TotalObjectCount, t.TotalObjectCount); + + for (int i = 0; i < t.ReportDataBlocks.Length; i++) + { + Assert.AreEqual(s.ReportDataBlocks[i].Location, t.ReportDataBlocks[i].Location); + Assert.AreEqual(s.ReportDataBlocks[i].MonoScore, t.ReportDataBlocks[i].MonoScore); + Assert.AreEqual(s.ReportDataBlocks[i].OwnerName, t.ReportDataBlocks[i].OwnerName); + Assert.AreEqual(s.ReportDataBlocks[i].Score, t.ReportDataBlocks[i].Score); + Assert.AreEqual(s.ReportDataBlocks[i].TaskID, t.ReportDataBlocks[i].TaskID); + Assert.AreEqual(s.ReportDataBlocks[i].TaskLocalID, t.ReportDataBlocks[i].TaskLocalID); + Assert.AreEqual(s.ReportDataBlocks[i].TaskName, t.ReportDataBlocks[i].TaskName); + Assert.AreEqual(s.ReportDataBlocks[i].TimeStamp, t.ReportDataBlocks[i].TimeStamp); + } + + + } } } diff --git a/OpenMetaverse/Messages/LindenMessages.cs b/OpenMetaverse/Messages/LindenMessages.cs index 9b27b794..ff70c091 100644 --- a/OpenMetaverse/Messages/LindenMessages.cs +++ b/OpenMetaverse/Messages/LindenMessages.cs @@ -225,6 +225,141 @@ namespace OpenMetaverse.Messages.Linden } } + public class LandStatReplyMessage : IMessage + { + + /* Single map + 'RequestData': + [ + { + 'ReportType':b64"AAAAAA==" + , + 'RequestFlags':b64"AAAABA==" + , + 'TotalObjectCount':b64"AAABbw==" + } + ] + */ + public int ReporType; + public int RequestFlags; + public int TotalObjectCount; + + /* + 'DataExtended': + [ + { + 'MonoScore':r0.0053327744826674461 + , + 'TimeStamp':b64"Seo9lw==" + } + ] + , + 'ReportData': + [ + { + 'LocationX':r34.764884948730469 + , + 'LocationY':r86.75262451171875 + , + 'LocationZ':r26.555828094482422 + , + 'OwnerName':'Preostan Scribe' + , + 'Score':r0.0023237180430442095 + , + 'TaskID':u1623b11b-127f-a170-da37-21523b9967a1 + , + 'TaskLocalID':b64"BhZW4g==" + , + 'TaskName':'Dutch Door Upper Half' + } + ] + ,*/ + public class ReportDataBlock + { + public Vector3 Location; + public string OwnerName; + public float Score; + public UUID TaskID; + public uint TaskLocalID; + public string TaskName; + public float MonoScore; + public DateTime TimeStamp; + } + + public ReportDataBlock[] ReportDataBlocks; + + public OSDMap Serialize() + { + OSDMap map = new OSDMap(3); + + OSDMap requestDataMap = new OSDMap(3); + requestDataMap["ReportType"] = OSD.FromInteger(this.ReporType); + requestDataMap["RequestFlags"] = OSD.FromInteger(this.RequestFlags); + requestDataMap["TotalObjectCount"] = OSD.FromInteger(this.TotalObjectCount); + map["RequestData"] = requestDataMap; + + OSDArray reportDataArray = new OSDArray(); + OSDArray dataExtendedArray = new OSDArray(); + for (int i = 0; i < ReportDataBlocks.Length; i++) + { + OSDMap reportMap = new OSDMap(8); + reportMap["LocationX"] = OSD.FromReal(ReportDataBlocks[i].Location.X); + reportMap["LocationY"] = OSD.FromReal(ReportDataBlocks[i].Location.Y); + reportMap["LocationZ"] = OSD.FromReal(ReportDataBlocks[i].Location.Z); + reportMap["OwnerName"] = OSD.FromString(ReportDataBlocks[i].OwnerName); + reportMap["Score"] = OSD.FromReal(ReportDataBlocks[i].Score); + reportMap["TaskID"] = OSD.FromUUID(ReportDataBlocks[i].TaskID); + reportMap["TaskLocalID"] = OSD.FromReal(ReportDataBlocks[i].TaskLocalID); + reportMap["TaskName"] = OSD.FromString(ReportDataBlocks[i].TaskName); + reportDataArray.Add(reportMap); + + OSDMap extendedMap = new OSDMap(2); + extendedMap["MonoScore"] = OSD.FromReal(ReportDataBlocks[i].MonoScore); + extendedMap["TimeStamp"] = OSD.FromDate(ReportDataBlocks[i].TimeStamp); + dataExtendedArray.Add(extendedMap); + } + + map["ReportData"] = reportDataArray; + map["ExtendedData"] = dataExtendedArray; + + return map; + } + + public void Deserialize(OSDMap map) + { + + OSDMap requestDataMap = (OSDMap)map["RequestData"]; + this.ReporType = requestDataMap["ReportType"].AsInteger(); + this.RequestFlags = requestDataMap["RequestFlags"].AsInteger(); + this.TotalObjectCount = requestDataMap["TotalObjectCount"].AsInteger(); + + OSDArray dataArray = (OSDArray)map["ReportData"]; + OSDArray dataExtendedArray = (OSDArray)map["ExtendedData"]; + + ReportDataBlocks = new ReportDataBlock[dataArray.Count]; + for (int i = 0; i < dataArray.Count; i++) + { + OSDMap blockMap = (OSDMap)dataArray[i]; + OSDMap extMap = (OSDMap)dataExtendedArray[i]; + ReportDataBlock block = new ReportDataBlock(); + block.Location = new Vector3( + (float)blockMap["LocationX"].AsReal(), + (float)blockMap["LocationY"].AsReal(), + (float)blockMap["LocationZ"].AsReal()); + block.OwnerName = blockMap["OwnerName"].AsString(); + block.Score = (float)blockMap["Score"].AsReal(); + block.TaskID = blockMap["TaskID"].AsUUID(); + block.TaskLocalID = blockMap["TaskLocalID"].AsUInteger(); + block.TaskName = blockMap["TaskName"].AsString(); + block.MonoScore = (float)extMap["MonoScore"].AsReal(); + block.TimeStamp = extMap["TimeStamp"].AsDate(); + + ReportDataBlocks[i] = block; + } + } + } + #endregion #region Parcel Messages diff --git a/OpenMetaverse/Messages/MessageEventDecoder.cs b/OpenMetaverse/Messages/MessageEventDecoder.cs index 9af1d4cb..929386f5 100644 --- a/OpenMetaverse/Messages/MessageEventDecoder.cs +++ b/OpenMetaverse/Messages/MessageEventDecoder.cs @@ -43,7 +43,7 @@ namespace OpenMetaverse /// An to decode /// A strongly typed object containing the decoded information from the capabilities message, or null /// if no existing Message object exists for the specified event - internal static IMessage DecodeEvent(string eventName, OSDMap map) + public static IMessage DecodeEvent(string eventName, OSDMap map) { IMessage message = null; @@ -72,7 +72,9 @@ namespace OpenMetaverse case "UpdateScriptAgent": message = new UpdateScriptAgentMessage(); break; case "SendPostcard": message = new SendPostcardMessage(); break; case "UpdateNotecardAgentInventory": message = new UpdateNotecardAgentInventoryMessage(); break; - + case "LandStatReply": message = new LandStatReplyMessage(); break; + case "ParcelVoiceInfoRequest": message = new ParcelVoiceInfoRequestMessage(); break; + case "ViewerStats": message = new ViewerStatsMessage(); break; // Capabilities TODO: // DispatchRegionInfo diff --git a/Programs/GridProxy/GridProxy.cs b/Programs/GridProxy/GridProxy.cs index f970464e..9bcf2ba2 100644 --- a/Programs/GridProxy/GridProxy.cs +++ b/Programs/GridProxy/GridProxy.cs @@ -349,9 +349,16 @@ namespace GridProxy // InitializeLoginProxy: initialize the login proxy private void InitializeLoginProxy() { - loginServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - loginServer.Bind(new IPEndPoint(proxyConfig.clientFacingAddress, proxyConfig.loginPort)); - loginServer.Listen(1); + try + { + loginServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + loginServer.Bind(new IPEndPoint(proxyConfig.clientFacingAddress, proxyConfig.loginPort)); + loginServer.Listen(1); + } + catch (SocketException e) + { + Log(e.Message + " " + e.StackTrace, true); + } } // RunLoginProxy: process login requests from clients @@ -630,6 +637,8 @@ namespace GridProxy capReq.Request = OSDParser.DeserializeLLSDXml(content); } + capReq.RawRequest = content; + foreach (CapsDelegate d in cap.GetDelegates()) { if (d(capReq, CapsStage.Request)) { shortCircuit = true; break; } @@ -657,6 +666,7 @@ namespace GridProxy { HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uri); req.KeepAlive = false; + capReq.RequestHeaders = headers; foreach (string header in headers.Keys) { if (header == "accept" || header == "connection" || @@ -739,6 +749,7 @@ namespace GridProxy { capReq.Response = OSDParser.DeserializeLLSDXml(respBuf); } + capReq.RawResponse = respBuf; } @@ -749,6 +760,7 @@ namespace GridProxy netStream.Write(wr, 0, wr.Length); } + capReq.ResponseHeaders = resp.Headers; for (int i = 0; i < resp.Headers.Count; i++) { string key = resp.Headers.Keys[i]; @@ -2134,6 +2146,13 @@ namespace GridProxy // The corresponding response public OSD Response = null; + + public byte[] RawRequest = null; + public byte[] RawResponse = null; + + public Dictionary RequestHeaders; + public WebHeaderCollection ResponseHeaders; + } // XmlRpcRequestDelegate: specifies a delegate to be called for XML-RPC requests diff --git a/Programs/WinGridProxy/Form1.Designer.cs b/Programs/WinGridProxy/Form1.Designer.cs index 162cae1a..54ed46b3 100644 --- a/Programs/WinGridProxy/Form1.Designer.cs +++ b/Programs/WinGridProxy/Form1.Designer.cs @@ -31,7 +31,7 @@ this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); this.panelProxyConfig = new System.Windows.Forms.Panel(); - this.textBoxLoginURL = new System.Windows.Forms.TextBox(); + this.comboBoxLoginURL = new System.Windows.Forms.ComboBox(); this.label3 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.textBoxProxyPort = new System.Windows.Forms.TextBox(); @@ -40,12 +40,6 @@ this.textBoxProxyListenIP = new System.Windows.Forms.TextBox(); this.panel2 = new System.Windows.Forms.Panel(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.listViewSessions = new WinGridProxy.ListViewNoFlicker(); - this.columnHeaderCounter = new System.Windows.Forms.ColumnHeader(); - this.columnHeaderProtocol = new System.Windows.Forms.ColumnHeader(); - this.columnHeaderType = new System.Windows.Forms.ColumnHeader(); - this.columnHeaderSize = new System.Windows.Forms.ColumnHeader(); - this.columnHeaderUrl = new System.Windows.Forms.ColumnHeader(); this.contextMenuStripSessions = new System.Windows.Forms.ContextMenuStrip(this.components); this.toolStripMenuItemAutoScroll = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); @@ -99,30 +93,25 @@ this.splitContainer2 = new System.Windows.Forms.SplitContainer(); this.checkBoxCheckAllPackets = new System.Windows.Forms.CheckBox(); this.grpUDPFilters = new System.Windows.Forms.GroupBox(); - this.listViewPacketFilters = new WinGridProxy.ListViewNoFlicker(); - this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); this.checkBoxCheckAllMessages = new System.Windows.Forms.CheckBox(); - this.buttonRefreshKnownCaps = new System.Windows.Forms.Button(); this.grpCapsFilters = new System.Windows.Forms.GroupBox(); - this.listViewMessageFilters = new WinGridProxy.ListViewNoFlicker(); - this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); this.tabPageInspect = new System.Windows.Forms.TabPage(); this.splitContainer3 = new System.Windows.Forms.SplitContainer(); this.tabControlInspectorRequest = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.richTextBoxRawLogRequest = new System.Windows.Forms.RichTextBox(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.treeViewRequestXml = new System.Windows.Forms.TreeView(); - this.tabPage3 = new System.Windows.Forms.TabPage(); + this.tabPageRawRequest = new System.Windows.Forms.TabPage(); + this.richTextBoxRawRequest = new System.Windows.Forms.RichTextBox(); + this.tabPageXMLRequest = new System.Windows.Forms.TabPage(); + this.treeViewXMLRequest = new System.Windows.Forms.TreeView(); + this.tabPageHexRequest = new System.Windows.Forms.TabPage(); this.statusStrip2 = new System.Windows.Forms.StatusStrip(); this.labelRequestHex = new System.Windows.Forms.ToolStripStatusLabel(); this.hexBoxRequest = new Be.Windows.Forms.HexBox(); this.tabControlInspectorResponse = new System.Windows.Forms.TabControl(); - this.tabPageInspectorRAW = new System.Windows.Forms.TabPage(); - this.richTextBoxRawLogResponse = new System.Windows.Forms.RichTextBox(); - this.tabPageInspectorXML = new System.Windows.Forms.TabPage(); - this.treeViewResponseXml = new System.Windows.Forms.TreeView(); - this.tabPageHexView = new System.Windows.Forms.TabPage(); + this.tabPageInspectorRAWResponse = new System.Windows.Forms.TabPage(); + this.richTextBoxRawResponse = new System.Windows.Forms.RichTextBox(); + this.tabPageInspectorXMLResponse = new System.Windows.Forms.TabPage(); + this.treeViewXmlResponse = new System.Windows.Forms.TreeView(); + this.tabPageHexViewResponse = new System.Windows.Forms.TabPage(); this.statusStrip1 = new System.Windows.Forms.StatusStrip(); this.labelResponseHex = new System.Windows.Forms.ToolStripStatusLabel(); this.hexBoxResponse = new Be.Windows.Forms.HexBox(); @@ -207,6 +196,26 @@ this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.saveFileDialog2 = new System.Windows.Forms.SaveFileDialog(); this.openFileDialog2 = new System.Windows.Forms.OpenFileDialog(); + this.tabPageResponseJson = new System.Windows.Forms.TabPage(); + this.tabPageRequestJson = new System.Windows.Forms.TabPage(); + this.richTextBoxNotationResponse = new System.Windows.Forms.RichTextBox(); + this.richTextBoxNotationRequest = new System.Windows.Forms.RichTextBox(); + this.listViewSessions = new WinGridProxy.ListViewNoFlicker(); + this.columnHeaderCounter = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderProtocol = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderType = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderSize = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderUrl = new System.Windows.Forms.ColumnHeader(); + this.listViewPacketFilters = new WinGridProxy.ListViewNoFlicker(); + this.columnHeaderPacketName = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderPacketType = new System.Windows.Forms.ColumnHeader(); + this.listViewMessageFilters = new WinGridProxy.ListViewNoFlicker(); + this.columnHeaderName = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderMessageType = new System.Windows.Forms.ColumnHeader(); + this.tabPageDecodedRequest = new System.Windows.Forms.TabPage(); + this.tabPageDecodeResponse = new System.Windows.Forms.TabPage(); + this.richTextBoxDecodedResponse = new System.Windows.Forms.RichTextBox(); + this.richTextBoxDecodedRequest = new System.Windows.Forms.RichTextBox(); this.panelProxyConfig.SuspendLayout(); this.panel2.SuspendLayout(); this.splitContainer1.Panel1.SuspendLayout(); @@ -232,23 +241,27 @@ this.splitContainer3.Panel2.SuspendLayout(); this.splitContainer3.SuspendLayout(); this.tabControlInspectorRequest.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.tabPage3.SuspendLayout(); + this.tabPageRawRequest.SuspendLayout(); + this.tabPageXMLRequest.SuspendLayout(); + this.tabPageHexRequest.SuspendLayout(); this.statusStrip2.SuspendLayout(); this.tabControlInspectorResponse.SuspendLayout(); - this.tabPageInspectorRAW.SuspendLayout(); - this.tabPageInspectorXML.SuspendLayout(); - this.tabPageHexView.SuspendLayout(); + this.tabPageInspectorRAWResponse.SuspendLayout(); + this.tabPageInspectorXMLResponse.SuspendLayout(); + this.tabPageHexViewResponse.SuspendLayout(); this.statusStrip1.SuspendLayout(); this.tabPageInject.SuspendLayout(); this.toolStrip1.SuspendLayout(); this.contextMenuStripCopy.SuspendLayout(); + this.tabPageResponseJson.SuspendLayout(); + this.tabPageRequestJson.SuspendLayout(); + this.tabPageDecodedRequest.SuspendLayout(); + this.tabPageDecodeResponse.SuspendLayout(); this.SuspendLayout(); // // panelProxyConfig // - this.panelProxyConfig.Controls.Add(this.textBoxLoginURL); + this.panelProxyConfig.Controls.Add(this.comboBoxLoginURL); this.panelProxyConfig.Controls.Add(this.label3); this.panelProxyConfig.Controls.Add(this.label2); this.panelProxyConfig.Controls.Add(this.textBoxProxyPort); @@ -260,13 +273,19 @@ this.panelProxyConfig.Size = new System.Drawing.Size(1070, 32); this.panelProxyConfig.TabIndex = 0; // - // textBoxLoginURL + // comboBoxLoginURL // - this.textBoxLoginURL.Location = new System.Drawing.Point(406, 6); - this.textBoxLoginURL.Name = "textBoxLoginURL"; - this.textBoxLoginURL.Size = new System.Drawing.Size(252, 20); - this.textBoxLoginURL.TabIndex = 6; - this.textBoxLoginURL.Text = "https://login.agni.lindenlab.com/cgi-bin/login.cgi"; + this.comboBoxLoginURL.FormattingEnabled = true; + this.comboBoxLoginURL.Items.AddRange(new object[] { + "https://login.agni.lindenlab.com/cgi-bin/login.cgi", + "https://login.aditi.lindenlab.com/cgi-bin/login.cgi", + "http://127.0.0.1:8002", + "http://osgrid.org:8002"}); + this.comboBoxLoginURL.Location = new System.Drawing.Point(406, 6); + this.comboBoxLoginURL.Name = "comboBoxLoginURL"; + this.comboBoxLoginURL.Size = new System.Drawing.Size(252, 21); + this.comboBoxLoginURL.TabIndex = 6; + this.comboBoxLoginURL.Text = "https://login.agni.lindenlab.com/cgi-bin/login.cgi"; // // label3 // @@ -351,52 +370,6 @@ this.splitContainer1.SplitterDistance = 464; this.splitContainer1.TabIndex = 0; // - // listViewSessions - // - this.listViewSessions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeaderCounter, - this.columnHeaderProtocol, - this.columnHeaderType, - this.columnHeaderSize, - this.columnHeaderUrl}); - this.listViewSessions.ContextMenuStrip = this.contextMenuStripSessions; - this.listViewSessions.Dock = System.Windows.Forms.DockStyle.Fill; - this.listViewSessions.FullRowSelect = true; - this.listViewSessions.GridLines = true; - this.listViewSessions.HideSelection = false; - this.listViewSessions.Location = new System.Drawing.Point(0, 0); - this.listViewSessions.Name = "listViewSessions"; - this.listViewSessions.Size = new System.Drawing.Size(464, 428); - this.listViewSessions.SmallImageList = this.imageList1; - this.listViewSessions.TabIndex = 0; - this.listViewSessions.UseCompatibleStateImageBehavior = false; - this.listViewSessions.View = System.Windows.Forms.View.Details; - this.listViewSessions.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.listViewSessions_ItemSelectionChanged); - // - // columnHeaderCounter - // - this.columnHeaderCounter.Text = "#"; - this.columnHeaderCounter.Width = 54; - // - // columnHeaderProtocol - // - this.columnHeaderProtocol.Text = "Protocol"; - this.columnHeaderProtocol.Width = 55; - // - // columnHeaderType - // - this.columnHeaderType.Text = "Packet Type"; - this.columnHeaderType.Width = 139; - // - // columnHeaderSize - // - this.columnHeaderSize.Text = "Bytes"; - // - // columnHeaderUrl - // - this.columnHeaderUrl.Text = "Host/Address"; - this.columnHeaderUrl.Width = 312; - // // contextMenuStripSessions // this.contextMenuStripSessions.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -441,7 +414,7 @@ this.toolStripMenuItemRemoveSelected, this.toolStripMenuItemRemoveUnselected}); this.contextMenuStripRemove.Name = "contextMenuStripRemove"; - this.contextMenuStripRemove.OwnerItem = this.removeToolStripMenuItem2; + this.contextMenuStripRemove.OwnerItem = this.toolStripMenuItem1; this.contextMenuStripRemove.Size = new System.Drawing.Size(149, 70); // // toolStripMenuItemRemoveAll @@ -483,7 +456,7 @@ this.toolStripMenuItemSelectPacketName, this.toolStripMenuItemSelectProtocol}); this.contextMenuStripSelect.Name = "contextMenuStripSelect"; - this.contextMenuStripSelect.OwnerItem = this.selectToolStripMenuItem1; + this.contextMenuStripSelect.OwnerItem = this.selectToolStripMenuItem2; this.contextMenuStripSelect.Size = new System.Drawing.Size(167, 120); // // allToolStripMenuItem4 @@ -565,7 +538,7 @@ this.toolStripSeparator17, this.unmarkToolStripMenuItem}); this.contextMenuStripMark.Name = "contextMenuStripMarkDropdown"; - this.contextMenuStripMark.OwnerItem = this.markToolStripMenuItem1; + this.contextMenuStripMark.OwnerItem = this.markToolStripMenuItem2; this.contextMenuStripMark.Size = new System.Drawing.Size(122, 142); // // redToolStripMenuItem2 @@ -844,7 +817,6 @@ // splitContainer2.Panel2 // this.splitContainer2.Panel2.Controls.Add(this.checkBoxCheckAllMessages); - this.splitContainer2.Panel2.Controls.Add(this.buttonRefreshKnownCaps); this.splitContainer2.Panel2.Controls.Add(this.grpCapsFilters); this.splitContainer2.Size = new System.Drawing.Size(587, 390); this.splitContainer2.SplitterDistance = 294; @@ -856,7 +828,7 @@ this.checkBoxCheckAllPackets.AutoSize = true; this.checkBoxCheckAllPackets.Checked = true; this.checkBoxCheckAllPackets.CheckState = System.Windows.Forms.CheckState.Indeterminate; - this.checkBoxCheckAllPackets.Location = new System.Drawing.Point(3, 369); + this.checkBoxCheckAllPackets.Location = new System.Drawing.Point(6, 369); this.checkBoxCheckAllPackets.Name = "checkBoxCheckAllPackets"; this.checkBoxCheckAllPackets.Size = new System.Drawing.Size(120, 17); this.checkBoxCheckAllPackets.TabIndex = 1; @@ -878,36 +850,13 @@ this.grpUDPFilters.TabStop = false; this.grpUDPFilters.Text = "UDP Packets"; // - // listViewPacketFilters - // - this.listViewPacketFilters.CheckBoxes = true; - this.listViewPacketFilters.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader1}); - this.listViewPacketFilters.Dock = System.Windows.Forms.DockStyle.Fill; - this.listViewPacketFilters.FullRowSelect = true; - this.listViewPacketFilters.Location = new System.Drawing.Point(3, 16); - this.listViewPacketFilters.MultiSelect = false; - this.listViewPacketFilters.Name = "listViewPacketFilters"; - this.listViewPacketFilters.Size = new System.Drawing.Size(282, 338); - this.listViewPacketFilters.Sorting = System.Windows.Forms.SortOrder.Ascending; - this.listViewPacketFilters.TabIndex = 0; - this.listViewPacketFilters.UseCompatibleStateImageBehavior = false; - this.listViewPacketFilters.View = System.Windows.Forms.View.Details; - this.listViewPacketFilters.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.listViewPacketFilters_ItemChecked); - this.listViewPacketFilters.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewFilterSorter_ColumnClick); - // - // columnHeader1 - // - this.columnHeader1.Text = "Packet Name"; - this.columnHeader1.Width = 266; - // // checkBoxCheckAllMessages // this.checkBoxCheckAllMessages.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.checkBoxCheckAllMessages.AutoSize = true; this.checkBoxCheckAllMessages.Checked = true; this.checkBoxCheckAllMessages.CheckState = System.Windows.Forms.CheckState.Indeterminate; - this.checkBoxCheckAllMessages.Location = new System.Drawing.Point(3, 370); + this.checkBoxCheckAllMessages.Location = new System.Drawing.Point(6, 370); this.checkBoxCheckAllMessages.Name = "checkBoxCheckAllMessages"; this.checkBoxCheckAllMessages.Size = new System.Drawing.Size(120, 17); this.checkBoxCheckAllMessages.TabIndex = 2; @@ -915,17 +864,6 @@ this.checkBoxCheckAllMessages.UseVisualStyleBackColor = true; this.checkBoxCheckAllMessages.CheckedChanged += new System.EventHandler(this.checkBoxCheckallCaps_CheckedChanged); // - // buttonRefreshKnownCaps - // - this.buttonRefreshKnownCaps.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonRefreshKnownCaps.Location = new System.Drawing.Point(200, 366); - this.buttonRefreshKnownCaps.Name = "buttonRefreshKnownCaps"; - this.buttonRefreshKnownCaps.Size = new System.Drawing.Size(86, 21); - this.buttonRefreshKnownCaps.TabIndex = 1; - this.buttonRefreshKnownCaps.Text = "Refresh"; - this.buttonRefreshKnownCaps.UseVisualStyleBackColor = true; - this.buttonRefreshKnownCaps.Click += new System.EventHandler(this.buttonRefreshCapsList_Click); - // // grpCapsFilters // this.grpCapsFilters.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -940,29 +878,6 @@ this.grpCapsFilters.TabStop = false; this.grpCapsFilters.Text = "Capabilities Messages"; // - // listViewMessageFilters - // - this.listViewMessageFilters.CheckBoxes = true; - this.listViewMessageFilters.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader2}); - this.listViewMessageFilters.Dock = System.Windows.Forms.DockStyle.Fill; - this.listViewMessageFilters.FullRowSelect = true; - this.listViewMessageFilters.Location = new System.Drawing.Point(3, 16); - this.listViewMessageFilters.MultiSelect = false; - this.listViewMessageFilters.Name = "listViewMessageFilters"; - this.listViewMessageFilters.Size = new System.Drawing.Size(277, 338); - this.listViewMessageFilters.Sorting = System.Windows.Forms.SortOrder.Ascending; - this.listViewMessageFilters.TabIndex = 1; - this.listViewMessageFilters.UseCompatibleStateImageBehavior = false; - this.listViewMessageFilters.View = System.Windows.Forms.View.Details; - this.listViewMessageFilters.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.listViewMessageFilters_ItemChecked); - this.listViewMessageFilters.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewFilterSorter_ColumnClick); - // - // columnHeader2 - // - this.columnHeader2.Text = "Message Name"; - this.columnHeader2.Width = 265; - // // tabPageInspect // this.tabPageInspect.Controls.Add(this.splitContainer3); @@ -994,9 +909,11 @@ // tabControlInspectorRequest // this.tabControlInspectorRequest.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; - this.tabControlInspectorRequest.Controls.Add(this.tabPage1); - this.tabControlInspectorRequest.Controls.Add(this.tabPage2); - this.tabControlInspectorRequest.Controls.Add(this.tabPage3); + this.tabControlInspectorRequest.Controls.Add(this.tabPageDecodedRequest); + this.tabControlInspectorRequest.Controls.Add(this.tabPageRawRequest); + this.tabControlInspectorRequest.Controls.Add(this.tabPageXMLRequest); + this.tabControlInspectorRequest.Controls.Add(this.tabPageRequestJson); + this.tabControlInspectorRequest.Controls.Add(this.tabPageHexRequest); this.tabControlInspectorRequest.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControlInspectorRequest.ImageList = this.imageList1; this.tabControlInspectorRequest.Location = new System.Drawing.Point(0, 0); @@ -1005,60 +922,60 @@ this.tabControlInspectorRequest.Size = new System.Drawing.Size(593, 179); this.tabControlInspectorRequest.TabIndex = 0; // - // tabPage1 + // tabPageRawRequest // - this.tabPage1.Controls.Add(this.richTextBoxRawLogRequest); - this.tabPage1.ImageIndex = 1; - this.tabPage1.Location = new System.Drawing.Point(4, 26); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(585, 149); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Raw"; - this.tabPage1.UseVisualStyleBackColor = true; + this.tabPageRawRequest.Controls.Add(this.richTextBoxRawRequest); + this.tabPageRawRequest.ImageIndex = 1; + this.tabPageRawRequest.Location = new System.Drawing.Point(4, 26); + this.tabPageRawRequest.Name = "tabPageRawRequest"; + this.tabPageRawRequest.Padding = new System.Windows.Forms.Padding(3); + this.tabPageRawRequest.Size = new System.Drawing.Size(585, 149); + this.tabPageRawRequest.TabIndex = 0; + this.tabPageRawRequest.Text = "Raw"; + this.tabPageRawRequest.UseVisualStyleBackColor = true; // - // richTextBoxRawLogRequest + // richTextBoxRawRequest // - this.richTextBoxRawLogRequest.Dock = System.Windows.Forms.DockStyle.Fill; - this.richTextBoxRawLogRequest.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.richTextBoxRawLogRequest.Location = new System.Drawing.Point(3, 3); - this.richTextBoxRawLogRequest.Name = "richTextBoxRawLogRequest"; - this.richTextBoxRawLogRequest.Size = new System.Drawing.Size(579, 143); - this.richTextBoxRawLogRequest.TabIndex = 1; - this.richTextBoxRawLogRequest.Text = ""; - this.richTextBoxRawLogRequest.WordWrap = false; + this.richTextBoxRawRequest.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBoxRawRequest.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBoxRawRequest.Location = new System.Drawing.Point(3, 3); + this.richTextBoxRawRequest.Name = "richTextBoxRawRequest"; + this.richTextBoxRawRequest.Size = new System.Drawing.Size(579, 143); + this.richTextBoxRawRequest.TabIndex = 1; + this.richTextBoxRawRequest.Text = ""; + this.richTextBoxRawRequest.WordWrap = false; // - // tabPage2 + // tabPageXMLRequest // - this.tabPage2.Controls.Add(this.treeViewRequestXml); - this.tabPage2.ImageIndex = 1; - this.tabPage2.Location = new System.Drawing.Point(4, 26); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(585, 149); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "XML"; - this.tabPage2.UseVisualStyleBackColor = true; + this.tabPageXMLRequest.Controls.Add(this.treeViewXMLRequest); + this.tabPageXMLRequest.ImageIndex = 1; + this.tabPageXMLRequest.Location = new System.Drawing.Point(4, 26); + this.tabPageXMLRequest.Name = "tabPageXMLRequest"; + this.tabPageXMLRequest.Padding = new System.Windows.Forms.Padding(3); + this.tabPageXMLRequest.Size = new System.Drawing.Size(585, 149); + this.tabPageXMLRequest.TabIndex = 1; + this.tabPageXMLRequest.Text = "XML"; + this.tabPageXMLRequest.UseVisualStyleBackColor = true; // - // treeViewRequestXml + // treeViewXMLRequest // - this.treeViewRequestXml.Dock = System.Windows.Forms.DockStyle.Fill; - this.treeViewRequestXml.Location = new System.Drawing.Point(3, 3); - this.treeViewRequestXml.Name = "treeViewRequestXml"; - this.treeViewRequestXml.Size = new System.Drawing.Size(579, 143); - this.treeViewRequestXml.TabIndex = 1; + this.treeViewXMLRequest.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeViewXMLRequest.Location = new System.Drawing.Point(3, 3); + this.treeViewXMLRequest.Name = "treeViewXMLRequest"; + this.treeViewXMLRequest.Size = new System.Drawing.Size(579, 143); + this.treeViewXMLRequest.TabIndex = 1; // - // tabPage3 + // tabPageHexRequest // - this.tabPage3.Controls.Add(this.statusStrip2); - this.tabPage3.Controls.Add(this.hexBoxRequest); - this.tabPage3.ImageIndex = 1; - this.tabPage3.Location = new System.Drawing.Point(4, 26); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.Size = new System.Drawing.Size(585, 149); - this.tabPage3.TabIndex = 2; - this.tabPage3.Text = "Hex"; - this.tabPage3.UseVisualStyleBackColor = true; + this.tabPageHexRequest.Controls.Add(this.statusStrip2); + this.tabPageHexRequest.Controls.Add(this.hexBoxRequest); + this.tabPageHexRequest.ImageIndex = 1; + this.tabPageHexRequest.Location = new System.Drawing.Point(4, 26); + this.tabPageHexRequest.Name = "tabPageHexRequest"; + this.tabPageHexRequest.Size = new System.Drawing.Size(585, 149); + this.tabPageHexRequest.TabIndex = 2; + this.tabPageHexRequest.Text = "Hex"; + this.tabPageHexRequest.UseVisualStyleBackColor = true; // // statusStrip2 // @@ -1096,9 +1013,11 @@ // tabControlInspectorResponse // this.tabControlInspectorResponse.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; - this.tabControlInspectorResponse.Controls.Add(this.tabPageInspectorRAW); - this.tabControlInspectorResponse.Controls.Add(this.tabPageInspectorXML); - this.tabControlInspectorResponse.Controls.Add(this.tabPageHexView); + this.tabControlInspectorResponse.Controls.Add(this.tabPageDecodeResponse); + this.tabControlInspectorResponse.Controls.Add(this.tabPageInspectorRAWResponse); + this.tabControlInspectorResponse.Controls.Add(this.tabPageInspectorXMLResponse); + this.tabControlInspectorResponse.Controls.Add(this.tabPageResponseJson); + this.tabControlInspectorResponse.Controls.Add(this.tabPageHexViewResponse); this.tabControlInspectorResponse.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControlInspectorResponse.ImageList = this.imageList1; this.tabControlInspectorResponse.Location = new System.Drawing.Point(0, 0); @@ -1108,61 +1027,61 @@ this.tabControlInspectorResponse.Size = new System.Drawing.Size(593, 213); this.tabControlInspectorResponse.TabIndex = 0; // - // tabPageInspectorRAW + // tabPageInspectorRAWResponse // - this.tabPageInspectorRAW.Controls.Add(this.richTextBoxRawLogResponse); - this.tabPageInspectorRAW.ImageIndex = 0; - this.tabPageInspectorRAW.Location = new System.Drawing.Point(4, 26); - this.tabPageInspectorRAW.Name = "tabPageInspectorRAW"; - this.tabPageInspectorRAW.Padding = new System.Windows.Forms.Padding(3); - this.tabPageInspectorRAW.Size = new System.Drawing.Size(585, 183); - this.tabPageInspectorRAW.TabIndex = 0; - this.tabPageInspectorRAW.Text = "Raw"; - this.tabPageInspectorRAW.UseVisualStyleBackColor = true; + this.tabPageInspectorRAWResponse.Controls.Add(this.richTextBoxRawResponse); + this.tabPageInspectorRAWResponse.ImageIndex = 0; + this.tabPageInspectorRAWResponse.Location = new System.Drawing.Point(4, 26); + this.tabPageInspectorRAWResponse.Name = "tabPageInspectorRAWResponse"; + this.tabPageInspectorRAWResponse.Padding = new System.Windows.Forms.Padding(3); + this.tabPageInspectorRAWResponse.Size = new System.Drawing.Size(585, 183); + this.tabPageInspectorRAWResponse.TabIndex = 0; + this.tabPageInspectorRAWResponse.Text = "Raw"; + this.tabPageInspectorRAWResponse.UseVisualStyleBackColor = true; // - // richTextBoxRawLogResponse + // richTextBoxRawResponse // - this.richTextBoxRawLogResponse.Dock = System.Windows.Forms.DockStyle.Fill; - this.richTextBoxRawLogResponse.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.richTextBoxRawLogResponse.Location = new System.Drawing.Point(3, 3); - this.richTextBoxRawLogResponse.Name = "richTextBoxRawLogResponse"; - this.richTextBoxRawLogResponse.Size = new System.Drawing.Size(579, 177); - this.richTextBoxRawLogResponse.TabIndex = 0; - this.richTextBoxRawLogResponse.Text = ""; - this.richTextBoxRawLogResponse.WordWrap = false; + this.richTextBoxRawResponse.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBoxRawResponse.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBoxRawResponse.Location = new System.Drawing.Point(3, 3); + this.richTextBoxRawResponse.Name = "richTextBoxRawResponse"; + this.richTextBoxRawResponse.Size = new System.Drawing.Size(579, 177); + this.richTextBoxRawResponse.TabIndex = 0; + this.richTextBoxRawResponse.Text = ""; + this.richTextBoxRawResponse.WordWrap = false; // - // tabPageInspectorXML + // tabPageInspectorXMLResponse // - this.tabPageInspectorXML.Controls.Add(this.treeViewResponseXml); - this.tabPageInspectorXML.ImageIndex = 0; - this.tabPageInspectorXML.Location = new System.Drawing.Point(4, 26); - this.tabPageInspectorXML.Name = "tabPageInspectorXML"; - this.tabPageInspectorXML.Padding = new System.Windows.Forms.Padding(3); - this.tabPageInspectorXML.Size = new System.Drawing.Size(585, 183); - this.tabPageInspectorXML.TabIndex = 1; - this.tabPageInspectorXML.Text = "XML"; - this.tabPageInspectorXML.UseVisualStyleBackColor = true; + this.tabPageInspectorXMLResponse.Controls.Add(this.treeViewXmlResponse); + this.tabPageInspectorXMLResponse.ImageIndex = 0; + this.tabPageInspectorXMLResponse.Location = new System.Drawing.Point(4, 26); + this.tabPageInspectorXMLResponse.Name = "tabPageInspectorXMLResponse"; + this.tabPageInspectorXMLResponse.Padding = new System.Windows.Forms.Padding(3); + this.tabPageInspectorXMLResponse.Size = new System.Drawing.Size(585, 183); + this.tabPageInspectorXMLResponse.TabIndex = 1; + this.tabPageInspectorXMLResponse.Text = "XML"; + this.tabPageInspectorXMLResponse.UseVisualStyleBackColor = true; // - // treeViewResponseXml + // treeViewXmlResponse // - this.treeViewResponseXml.Dock = System.Windows.Forms.DockStyle.Fill; - this.treeViewResponseXml.Location = new System.Drawing.Point(3, 3); - this.treeViewResponseXml.Name = "treeViewResponseXml"; - this.treeViewResponseXml.Size = new System.Drawing.Size(579, 177); - this.treeViewResponseXml.TabIndex = 0; + this.treeViewXmlResponse.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeViewXmlResponse.Location = new System.Drawing.Point(3, 3); + this.treeViewXmlResponse.Name = "treeViewXmlResponse"; + this.treeViewXmlResponse.Size = new System.Drawing.Size(579, 177); + this.treeViewXmlResponse.TabIndex = 0; // - // tabPageHexView + // tabPageHexViewResponse // - this.tabPageHexView.Controls.Add(this.statusStrip1); - this.tabPageHexView.Controls.Add(this.hexBoxResponse); - this.tabPageHexView.ImageIndex = 0; - this.tabPageHexView.Location = new System.Drawing.Point(4, 26); - this.tabPageHexView.Name = "tabPageHexView"; - this.tabPageHexView.Padding = new System.Windows.Forms.Padding(3); - this.tabPageHexView.Size = new System.Drawing.Size(585, 183); - this.tabPageHexView.TabIndex = 4; - this.tabPageHexView.Text = "Hex"; - this.tabPageHexView.UseVisualStyleBackColor = true; + this.tabPageHexViewResponse.Controls.Add(this.statusStrip1); + this.tabPageHexViewResponse.Controls.Add(this.hexBoxResponse); + this.tabPageHexViewResponse.ImageIndex = 0; + this.tabPageHexViewResponse.Location = new System.Drawing.Point(4, 26); + this.tabPageHexViewResponse.Name = "tabPageHexViewResponse"; + this.tabPageHexViewResponse.Padding = new System.Windows.Forms.Padding(3); + this.tabPageHexViewResponse.Size = new System.Drawing.Size(585, 183); + this.tabPageHexViewResponse.TabIndex = 4; + this.tabPageHexViewResponse.Text = "Hex"; + this.tabPageHexViewResponse.UseVisualStyleBackColor = true; // // statusStrip1 // @@ -1273,21 +1192,21 @@ // this.removeToolStripMenuItem2.DropDown = this.contextMenuStripRemove; this.removeToolStripMenuItem2.Name = "removeToolStripMenuItem2"; - this.removeToolStripMenuItem2.Size = new System.Drawing.Size(143, 22); + this.removeToolStripMenuItem2.Size = new System.Drawing.Size(152, 22); this.removeToolStripMenuItem2.Text = "Remove"; // // selectToolStripMenuItem1 // this.selectToolStripMenuItem1.DropDown = this.contextMenuStripSelect; this.selectToolStripMenuItem1.Name = "selectToolStripMenuItem1"; - this.selectToolStripMenuItem1.Size = new System.Drawing.Size(143, 22); + this.selectToolStripMenuItem1.Size = new System.Drawing.Size(152, 22); this.selectToolStripMenuItem1.Text = "Select"; // // markToolStripMenuItem1 // this.markToolStripMenuItem1.DropDown = this.contextMenuStripMark; this.markToolStripMenuItem1.Name = "markToolStripMenuItem1"; - this.markToolStripMenuItem1.Size = new System.Drawing.Size(143, 22); + this.markToolStripMenuItem1.Size = new System.Drawing.Size(152, 22); this.markToolStripMenuItem1.Text = "Mark"; // // toolStripLabelHexEditorRequest @@ -1443,7 +1362,7 @@ // this.copyToolStripMenuItem1.DropDown = this.contextMenuStripCopy; this.copyToolStripMenuItem1.Name = "copyToolStripMenuItem1"; - this.copyToolStripMenuItem1.Size = new System.Drawing.Size(143, 22); + this.copyToolStripMenuItem1.Size = new System.Drawing.Size(152, 22); this.copyToolStripMenuItem1.Text = "Copy"; // // contextMenuStripCopy @@ -1484,18 +1403,18 @@ // toolStripSeparator10 // this.toolStripSeparator10.Name = "toolStripSeparator10"; - this.toolStripSeparator10.Size = new System.Drawing.Size(140, 6); + this.toolStripSeparator10.Size = new System.Drawing.Size(149, 6); // // toolStripSeparator12 // this.toolStripSeparator12.Name = "toolStripSeparator12"; - this.toolStripSeparator12.Size = new System.Drawing.Size(140, 6); + this.toolStripSeparator12.Size = new System.Drawing.Size(149, 6); // // findToolStripMenuItem // this.findToolStripMenuItem.Name = "findToolStripMenuItem"; this.findToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F))); - this.findToolStripMenuItem.Size = new System.Drawing.Size(143, 22); + this.findToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.findToolStripMenuItem.Text = "Find"; this.findToolStripMenuItem.Click += new System.EventHandler(this.findSessions_Click); // @@ -1850,6 +1769,197 @@ this.openFileDialog2.Filter = "Filter Files|*.osd|All Files|*.*"; this.openFileDialog2.Title = "Load Saved Filter Settings"; // + // tabPageResponseJson + // + this.tabPageResponseJson.Controls.Add(this.richTextBoxNotationResponse); + this.tabPageResponseJson.ImageIndex = 0; + this.tabPageResponseJson.Location = new System.Drawing.Point(4, 26); + this.tabPageResponseJson.Name = "tabPageResponseJson"; + this.tabPageResponseJson.Padding = new System.Windows.Forms.Padding(3); + this.tabPageResponseJson.Size = new System.Drawing.Size(585, 183); + this.tabPageResponseJson.TabIndex = 5; + this.tabPageResponseJson.Text = "Notation"; + this.tabPageResponseJson.UseVisualStyleBackColor = true; + // + // tabPageRequestJson + // + this.tabPageRequestJson.Controls.Add(this.richTextBoxNotationRequest); + this.tabPageRequestJson.ImageIndex = 1; + this.tabPageRequestJson.Location = new System.Drawing.Point(4, 26); + this.tabPageRequestJson.Name = "tabPageRequestJson"; + this.tabPageRequestJson.Padding = new System.Windows.Forms.Padding(3); + this.tabPageRequestJson.Size = new System.Drawing.Size(585, 149); + this.tabPageRequestJson.TabIndex = 3; + this.tabPageRequestJson.Text = "Notation"; + this.tabPageRequestJson.UseVisualStyleBackColor = true; + // + // richTextBoxNotationResponse + // + this.richTextBoxNotationResponse.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBoxNotationResponse.Location = new System.Drawing.Point(3, 3); + this.richTextBoxNotationResponse.Name = "richTextBoxNotationResponse"; + this.richTextBoxNotationResponse.Size = new System.Drawing.Size(579, 177); + this.richTextBoxNotationResponse.TabIndex = 0; + this.richTextBoxNotationResponse.Text = ""; + // + // richTextBoxNotationRequest + // + this.richTextBoxNotationRequest.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBoxNotationRequest.Location = new System.Drawing.Point(3, 3); + this.richTextBoxNotationRequest.Name = "richTextBoxNotationRequest"; + this.richTextBoxNotationRequest.Size = new System.Drawing.Size(579, 143); + this.richTextBoxNotationRequest.TabIndex = 0; + this.richTextBoxNotationRequest.Text = ""; + // + // listViewSessions + // + this.listViewSessions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderCounter, + this.columnHeaderProtocol, + this.columnHeaderType, + this.columnHeaderSize, + this.columnHeaderUrl}); + this.listViewSessions.ContextMenuStrip = this.contextMenuStripSessions; + this.listViewSessions.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewSessions.FullRowSelect = true; + this.listViewSessions.GridLines = true; + this.listViewSessions.HideSelection = false; + this.listViewSessions.Location = new System.Drawing.Point(0, 0); + this.listViewSessions.Name = "listViewSessions"; + this.listViewSessions.Size = new System.Drawing.Size(464, 428); + this.listViewSessions.SmallImageList = this.imageList1; + this.listViewSessions.TabIndex = 0; + this.listViewSessions.UseCompatibleStateImageBehavior = false; + this.listViewSessions.View = System.Windows.Forms.View.Details; + this.listViewSessions.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.listViewSessions_ItemSelectionChanged); + // + // columnHeaderCounter + // + this.columnHeaderCounter.Text = "#"; + this.columnHeaderCounter.Width = 54; + // + // columnHeaderProtocol + // + this.columnHeaderProtocol.Text = "Protocol"; + this.columnHeaderProtocol.Width = 55; + // + // columnHeaderType + // + this.columnHeaderType.Text = "Packet Type"; + this.columnHeaderType.Width = 139; + // + // columnHeaderSize + // + this.columnHeaderSize.Text = "Bytes"; + // + // columnHeaderUrl + // + this.columnHeaderUrl.Text = "Host/Address"; + this.columnHeaderUrl.Width = 312; + // + // listViewPacketFilters + // + this.listViewPacketFilters.CheckBoxes = true; + this.listViewPacketFilters.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderPacketName, + this.columnHeaderPacketType}); + this.listViewPacketFilters.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewPacketFilters.FullRowSelect = true; + this.listViewPacketFilters.GridLines = true; + this.listViewPacketFilters.Location = new System.Drawing.Point(3, 16); + this.listViewPacketFilters.MultiSelect = false; + this.listViewPacketFilters.Name = "listViewPacketFilters"; + this.listViewPacketFilters.Size = new System.Drawing.Size(282, 338); + this.listViewPacketFilters.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.listViewPacketFilters.TabIndex = 0; + this.listViewPacketFilters.UseCompatibleStateImageBehavior = false; + this.listViewPacketFilters.View = System.Windows.Forms.View.Details; + this.listViewPacketFilters.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.listViewPacketFilters_ItemChecked); + this.listViewPacketFilters.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewFilterSorter_ColumnClick); + // + // columnHeaderPacketName + // + this.columnHeaderPacketName.Text = "Packet Name"; + this.columnHeaderPacketName.Width = 215; + // + // columnHeaderPacketType + // + this.columnHeaderPacketType.Text = "Type"; + // + // listViewMessageFilters + // + this.listViewMessageFilters.CheckBoxes = true; + this.listViewMessageFilters.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderName, + this.columnHeaderMessageType}); + this.listViewMessageFilters.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewMessageFilters.FullRowSelect = true; + this.listViewMessageFilters.GridLines = true; + this.listViewMessageFilters.Location = new System.Drawing.Point(3, 16); + this.listViewMessageFilters.MultiSelect = false; + this.listViewMessageFilters.Name = "listViewMessageFilters"; + this.listViewMessageFilters.Size = new System.Drawing.Size(277, 338); + this.listViewMessageFilters.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.listViewMessageFilters.TabIndex = 1; + this.listViewMessageFilters.UseCompatibleStateImageBehavior = false; + this.listViewMessageFilters.View = System.Windows.Forms.View.Details; + this.listViewMessageFilters.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.listViewMessageFilters_ItemChecked); + this.listViewMessageFilters.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewFilterSorter_ColumnClick); + // + // columnHeaderName + // + this.columnHeaderName.Text = "Message Name"; + this.columnHeaderName.Width = 181; + // + // columnHeaderMessageType + // + this.columnHeaderMessageType.Text = "Type"; + this.columnHeaderMessageType.Width = 92; + // + // tabPageDecodedRequest + // + this.tabPageDecodedRequest.Controls.Add(this.richTextBoxDecodedRequest); + this.tabPageDecodedRequest.ImageIndex = 1; + this.tabPageDecodedRequest.Location = new System.Drawing.Point(4, 26); + this.tabPageDecodedRequest.Name = "tabPageDecodedRequest"; + this.tabPageDecodedRequest.Padding = new System.Windows.Forms.Padding(3); + this.tabPageDecodedRequest.Size = new System.Drawing.Size(585, 149); + this.tabPageDecodedRequest.TabIndex = 4; + this.tabPageDecodedRequest.Text = "Request"; + this.tabPageDecodedRequest.UseVisualStyleBackColor = true; + // + // tabPageDecodeResponse + // + this.tabPageDecodeResponse.Controls.Add(this.richTextBoxDecodedResponse); + this.tabPageDecodeResponse.ImageIndex = 0; + this.tabPageDecodeResponse.Location = new System.Drawing.Point(4, 26); + this.tabPageDecodeResponse.Name = "tabPageDecodeResponse"; + this.tabPageDecodeResponse.Padding = new System.Windows.Forms.Padding(3); + this.tabPageDecodeResponse.Size = new System.Drawing.Size(585, 183); + this.tabPageDecodeResponse.TabIndex = 6; + this.tabPageDecodeResponse.Text = "Response"; + this.tabPageDecodeResponse.UseVisualStyleBackColor = true; + // + // richTextBoxDecodedResponse + // + this.richTextBoxDecodedResponse.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBoxDecodedResponse.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBoxDecodedResponse.Location = new System.Drawing.Point(3, 3); + this.richTextBoxDecodedResponse.Name = "richTextBoxDecodedResponse"; + this.richTextBoxDecodedResponse.Size = new System.Drawing.Size(579, 177); + this.richTextBoxDecodedResponse.TabIndex = 0; + this.richTextBoxDecodedResponse.Text = ""; + // + // richTextBoxDecodedRequest + // + this.richTextBoxDecodedRequest.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBoxDecodedRequest.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBoxDecodedRequest.Location = new System.Drawing.Point(3, 3); + this.richTextBoxDecodedRequest.Name = "richTextBoxDecodedRequest"; + this.richTextBoxDecodedRequest.Size = new System.Drawing.Size(579, 143); + this.richTextBoxDecodedRequest.TabIndex = 0; + this.richTextBoxDecodedRequest.Text = ""; + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -1892,17 +2002,17 @@ this.splitContainer3.Panel2.ResumeLayout(false); this.splitContainer3.ResumeLayout(false); this.tabControlInspectorRequest.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); - this.tabPage3.ResumeLayout(false); - this.tabPage3.PerformLayout(); + this.tabPageRawRequest.ResumeLayout(false); + this.tabPageXMLRequest.ResumeLayout(false); + this.tabPageHexRequest.ResumeLayout(false); + this.tabPageHexRequest.PerformLayout(); this.statusStrip2.ResumeLayout(false); this.statusStrip2.PerformLayout(); this.tabControlInspectorResponse.ResumeLayout(false); - this.tabPageInspectorRAW.ResumeLayout(false); - this.tabPageInspectorXML.ResumeLayout(false); - this.tabPageHexView.ResumeLayout(false); - this.tabPageHexView.PerformLayout(); + this.tabPageInspectorRAWResponse.ResumeLayout(false); + this.tabPageInspectorXMLResponse.ResumeLayout(false); + this.tabPageHexViewResponse.ResumeLayout(false); + this.tabPageHexViewResponse.PerformLayout(); this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); this.tabPageInject.ResumeLayout(false); @@ -1910,6 +2020,10 @@ this.toolStrip1.ResumeLayout(false); this.toolStrip1.PerformLayout(); this.contextMenuStripCopy.ResumeLayout(false); + this.tabPageResponseJson.ResumeLayout(false); + this.tabPageRequestJson.ResumeLayout(false); + this.tabPageDecodedRequest.ResumeLayout(false); + this.tabPageDecodeResponse.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -1924,7 +2038,6 @@ private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox textBoxProxyListenIP; - private System.Windows.Forms.TextBox textBoxLoginURL; private System.Windows.Forms.Panel panel2; private System.Windows.Forms.SplitContainer splitContainer1; private ListViewNoFlicker listViewSessions; @@ -1936,7 +2049,6 @@ private System.Windows.Forms.TabPage tabPageInject; private System.Windows.Forms.RichTextBox richTextBoxInject; private System.Windows.Forms.CheckBox checkBoxCheckAllPackets; - private System.Windows.Forms.Button buttonRefreshKnownCaps; private System.Windows.Forms.ColumnHeader columnHeaderCounter; private System.Windows.Forms.ColumnHeader columnHeaderProtocol; private System.Windows.Forms.ColumnHeader columnHeaderType; @@ -1952,12 +2064,12 @@ private System.Windows.Forms.TabPage tabPageInspect; private System.Windows.Forms.ColumnHeader columnHeaderSize; private System.Windows.Forms.TabControl tabControlInspectorResponse; - private System.Windows.Forms.TabPage tabPageInspectorRAW; - private System.Windows.Forms.TabPage tabPageInspectorXML; - private System.Windows.Forms.RichTextBox richTextBoxRawLogResponse; + private System.Windows.Forms.TabPage tabPageInspectorRAWResponse; + private System.Windows.Forms.TabPage tabPageInspectorXMLResponse; + private System.Windows.Forms.RichTextBox richTextBoxRawResponse; private System.Windows.Forms.Label label4; - private System.Windows.Forms.TreeView treeViewResponseXml; - private System.Windows.Forms.TabPage tabPageHexView; + private System.Windows.Forms.TreeView treeViewXmlResponse; + private System.Windows.Forms.TabPage tabPageHexViewResponse; private System.Windows.Forms.StatusStrip statusStrip1; private Be.Windows.Forms.HexBox hexBoxResponse; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; @@ -1999,11 +2111,11 @@ private System.Windows.Forms.Button button3; private System.Windows.Forms.SplitContainer splitContainer3; private System.Windows.Forms.TabControl tabControlInspectorRequest; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.RichTextBox richTextBoxRawLogRequest; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.TreeView treeViewRequestXml; - private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPageRawRequest; + private System.Windows.Forms.RichTextBox richTextBoxRawRequest; + private System.Windows.Forms.TabPage tabPageXMLRequest; + private System.Windows.Forms.TreeView treeViewXMLRequest; + private System.Windows.Forms.TabPage tabPageHexRequest; private System.Windows.Forms.StatusStrip statusStrip2; private System.Windows.Forms.ToolStripStatusLabel toolStripLabelHexEditorRequest; private Be.Windows.Forms.HexBox hexBoxRequest; @@ -2082,9 +2194,9 @@ private System.Windows.Forms.ToolStripMenuItem saveFilterSelectionsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem loadFilterSelectionsToolStripMenuItem; private ListViewNoFlicker listViewPacketFilters; - private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeaderPacketName; private ListViewNoFlicker listViewMessageFilters; - private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeaderName; private System.Windows.Forms.ToolStripMenuItem saveOptionsOnExitToolStripMenuItem; private System.Windows.Forms.SaveFileDialog saveFileDialog1; private System.Windows.Forms.OpenFileDialog openFileDialog1; @@ -2094,6 +2206,17 @@ private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem autoAddNewDiscoveredMessagesToolStripMenuItem; + private System.Windows.Forms.ComboBox comboBoxLoginURL; + private System.Windows.Forms.ColumnHeader columnHeaderMessageType; + private System.Windows.Forms.ColumnHeader columnHeaderPacketType; + private System.Windows.Forms.TabPage tabPageRequestJson; + private System.Windows.Forms.RichTextBox richTextBoxNotationRequest; + private System.Windows.Forms.TabPage tabPageResponseJson; + private System.Windows.Forms.RichTextBox richTextBoxNotationResponse; + private System.Windows.Forms.TabPage tabPageDecodedRequest; + private System.Windows.Forms.RichTextBox richTextBoxDecodedRequest; + private System.Windows.Forms.TabPage tabPageDecodeResponse; + private System.Windows.Forms.RichTextBox richTextBoxDecodedResponse; } } diff --git a/Programs/WinGridProxy/Form1.cs b/Programs/WinGridProxy/Form1.cs index 1f5ec4eb..7821074d 100644 --- a/Programs/WinGridProxy/Form1.cs +++ b/Programs/WinGridProxy/Form1.cs @@ -78,8 +78,49 @@ namespace WinGridProxy ProxyManager.OnMessageLog += new ProxyManager.MessageLogHandler(ProxyManager_OnMessageLog); ProxyManager.OnLoginResponse += new ProxyManager.LoginLogHandler(ProxyManager_OnLoginResponse); ProxyManager.OnCapabilityAdded += new ProxyManager.CapsAddedHandler(ProxyManager_OnCapabilityAdded); + ProxyManager.OnEventMessageLog += new ProxyManager.EventQueueMessageHandler(ProxyManager_OnEventMessageLog); } + #region Event Handlers for Messages/Packets + + /// + /// Adds a new EventQueue message to the Message Filters listview. + /// + /// + /// + void ProxyManager_OnEventMessageLog(CapsRequest req, CapsStage stage) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new MethodInvoker(delegate() + { + ProxyManager_OnEventMessageLog(req, stage); + })); + } + else + { + ListViewItem foundCap = listViewMessageFilters.FindItemWithText(req.Info.CapType); + if (foundCap == null) + { + ListViewItem addedItem = listViewMessageFilters.Items.Add(new ListViewItem(req.Info.CapType, new ListViewGroup("EventQueue Messages"))); + addedItem.SubItems.Add("EventMessage"); + addedItem.BackColor = Color.AliceBlue; + + if (autoAddNewDiscoveredMessagesToolStripMenuItem.Checked) + addedItem.Checked = true; + } + else + { + // add to sessions if checked = true + ProxyManager_OnMessageLog(req, CapsStage.Response); + } + } + } + + /// + /// Adds a new Capability message to the message filters listview + /// + /// void ProxyManager_OnCapabilityAdded(CapInfo cap) { if (this.InvokeRequired) @@ -94,17 +135,16 @@ namespace WinGridProxy ListViewItem foundCap = listViewMessageFilters.FindItemWithText(cap.CapType); if (foundCap == null) { - ListViewItem addedItem = listViewMessageFilters.Items.Add(new ListViewItem(cap.CapType)); + ListViewItem addedItem = listViewMessageFilters.Items.Add(new ListViewItem(cap.CapType, new ListViewGroup("Capabilities Messages"))); + addedItem.SubItems.Add("CapMessage"); + addedItem.BackColor = Color.Honeydew; + if (autoAddNewDiscoveredMessagesToolStripMenuItem.Checked) addedItem.Checked = true; } } } - - - #region Event Handlers - void ProxyManager_OnPacketLog(Packet packet, Direction direction, IPEndPoint endpoint) { PacketAnalyzer_OnPacketLog(packet, direction, endpoint); @@ -125,7 +165,7 @@ namespace WinGridProxy string t = (request is XmlRpcRequest) ? "Login Request" : "Login Response"; string l = request.ToString().Length.ToString(); - string[] s = { PacketCounter.ToString(), "HTTPS", t, l, textBoxLoginURL.Text }; + string[] s = { PacketCounter.ToString(), "HTTPS", t, l, comboBoxLoginURL.Text }; ListViewItem session = new ListViewItem(s); session.Tag = request; session.ImageIndex = (request is XmlRpcRequest) ? 1 : 0; @@ -193,21 +233,6 @@ namespace WinGridProxy } } - //void ProxyManager_OnEventQueueRunning() - //{ - // if (this.InvokeRequired) - // { - // this.BeginInvoke(new MethodInvoker(delegate() - // { - // ProxyManager_OnEventQueueRunning(); - // })); - // } - // else - // { - // buttonRefreshCapsList_Click(null, null); - // } - //} - void ProxyManager_OnMessageLog(CapsRequest req, CapsStage stage) { if (this.InvokeRequired) @@ -223,13 +248,13 @@ namespace WinGridProxy if (found != null && found.Checked) { - PacketCounter++; // TODO: the sizes should be combined string size = (stage == CapsStage.Request) ? req.Request.ToString().Length.ToString() : req.Response.ToString().Length.ToString(); - string[] s = { PacketCounter.ToString(), "CAPS", req.Info.CapType, size, req.Info.URI }; + string[] s = { PacketCounter.ToString(), found.SubItems[1].Text, req.Info.CapType, size, req.Info.URI }; ListViewItem session = new ListViewItem(s); + session.BackColor = found.BackColor; session.Tag = req; @@ -272,8 +297,8 @@ namespace WinGridProxy if (button1.Text.StartsWith("Start") && IsProxyRunning.Equals(false)) { - proxy = new ProxyManager(textBoxProxyPort.Text, textBoxProxyListenIP.Text, textBoxLoginURL.Text); - textBoxProxyListenIP.Enabled = textBoxProxyPort.Enabled = textBoxLoginURL.Enabled = false; + proxy = new ProxyManager(textBoxProxyPort.Text, textBoxProxyListenIP.Text, comboBoxLoginURL.Text); + textBoxProxyListenIP.Enabled = textBoxProxyPort.Enabled = comboBoxLoginURL.Enabled = false; InitProxyFilters(); @@ -290,7 +315,7 @@ namespace WinGridProxy proxy.Stop(); grpUDPFilters.Enabled = grpCapsFilters.Enabled = IsProxyRunning = false; button1.Text = "Start Proxy"; - textBoxProxyListenIP.Enabled = textBoxProxyPort.Enabled = textBoxLoginURL.Enabled = true; + textBoxProxyListenIP.Enabled = textBoxProxyPort.Enabled = comboBoxLoginURL.Enabled = true; if (!enableStatisticsToolStripMenuItem.Checked && timer1.Enabled) timer1.Enabled = false; @@ -305,33 +330,6 @@ namespace WinGridProxy } } - private void buttonRefreshCapsList_Click(object sender, EventArgs e) - { - OSDMap map = new OSDMap(1); - - OSDArray capsArray = new OSDArray(); - foreach (KeyValuePair kvp in proxy.GetCapabilities()) - { - OSDMap cap = new OSDMap(1); - cap["capability"] = OSD.FromString(kvp.Value.CapType); - cap["Enabled"] = OSD.FromBoolean(true); - capsArray.Add(cap); - - listViewMessageFilters.BeginUpdate(); - ListViewItem found = listViewMessageFilters.FindItemWithText(kvp.Value.CapType); - if(found == null) - { - listViewMessageFilters.Items.Add(kvp.Value.CapType); - } - listViewMessageFilters.Sort(); - listViewMessageFilters.EndUpdate(); - } - map["Capabilities"] = capsArray; - - System.IO.File.WriteAllText("capabilities.osd", map.ToString()); - - } - private void listViewSessions_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { @@ -344,56 +342,70 @@ namespace WinGridProxy { XmlRpcRequest requestData = (XmlRpcRequest)tag; - richTextBoxRawLogRequest.Text = requestData.ToString(); - updateTreeView(requestData.ToString(), treeViewRequestXml); - + richTextBoxDecodedRequest.Text = requestData.ToString(); + richTextBoxRawRequest.Text = requestData.ToString(); + richTextBoxNotationRequest.Text = "Notation Not Available for XML Request"; + updateTreeView(requestData.ToString(), treeViewXMLRequest); Be.Windows.Forms.DynamicByteProvider data = new Be.Windows.Forms.DynamicByteProvider(Utils.StringToBytes(requestData.ToString())); hexBoxRequest.ByteProvider = data; + richTextBoxDecodedResponse.Text = String.Empty; + richTextBoxRawResponse.Text = String.Empty; + richTextBoxNotationResponse.Text = String.Empty; + treeViewXmlResponse.Nodes.Clear(); hexBoxResponse.ByteProvider = null; - richTextBoxRawLogResponse.Text = String.Empty; - treeViewResponseXml.Nodes.Clear(); } else if (tag is XmlRpcResponse) { XmlRpcResponse responseData = (XmlRpcResponse)tag; - richTextBoxRawLogResponse.Text = responseData.ToString(); - updateTreeView(responseData.ToString(), treeViewResponseXml); - + richTextBoxDecodedResponse.Text = responseData.ToString(); + richTextBoxRawResponse.Text = responseData.ToString(); + richTextBoxNotationResponse.Text = "Notation Not Available for XML Request"; + updateTreeView(responseData.ToString(), treeViewXmlResponse); Be.Windows.Forms.DynamicByteProvider data = new Be.Windows.Forms.DynamicByteProvider(Utils.StringToBytes(responseData.ToString())); hexBoxResponse.ByteProvider = data; + richTextBoxDecodedRequest.Text = String.Empty; + richTextBoxRawRequest.Text = String.Empty; + richTextBoxNotationRequest.Text = String.Empty; + treeViewXMLRequest.Nodes.Clear(); hexBoxRequest.ByteProvider = null; - richTextBoxRawLogRequest.Text = "No Data"; - treeViewRequestXml.Nodes.Clear(); + } else if (tag is Packet) { Packet packet = (Packet)tag; Be.Windows.Forms.DynamicByteProvider data = new Be.Windows.Forms.DynamicByteProvider(packet.ToBytes()); + // we have no conversion from Packet to xml or notation + richTextBoxNotationRequest.Text = String.Empty; + richTextBoxNotationResponse.Text = String.Empty; + treeViewXmlResponse.Nodes.Clear(); + treeViewXMLRequest.Nodes.Clear(); // 0 = incoming, 1 = outgoing if (e.Item.ImageIndex == 1) { - richTextBoxRawLogRequest.Text = TagToString(tag); + richTextBoxDecodedRequest.Text = String.Empty; + richTextBoxRawRequest.Text = String.Empty; + richTextBoxNotationRequest.Text = "Notation Not Available for Packet Types"; hexBoxRequest.ByteProvider = data; - treeViewRequestXml.Nodes.Clear(); - richTextBoxRawLogResponse.Text = String.Empty; + richTextBoxDecodedResponse.Text = String.Empty; + richTextBoxRawResponse.Text = String.Empty; hexBoxResponse.ByteProvider = null; - treeViewResponseXml.Nodes.Clear(); } else { - richTextBoxRawLogRequest.Text = String.Empty; - hexBoxRequest.ByteProvider = null; - treeViewRequestXml.Nodes.Clear(); - - richTextBoxRawLogResponse.Text = TagToString(tag); + richTextBoxDecodedResponse.Text = TagToString(tag, listViewSessions.FocusedItem.SubItems[2].Text); + richTextBoxRawResponse.Text = TagToString(tag, listViewSessions.FocusedItem.SubItems[2].Text); + richTextBoxNotationResponse.Text = "Notation Not Available for Packet Types"; hexBoxResponse.ByteProvider = data; - treeViewResponseXml.Nodes.Clear(); + + richTextBoxDecodedRequest.Text = String.Empty; + richTextBoxRawRequest.Text = String.Empty; + hexBoxRequest.ByteProvider = null; } } else if (tag is CapsRequest) @@ -402,29 +414,66 @@ namespace WinGridProxy if (capsData.Request != null) { - richTextBoxRawLogRequest.Text = capsData.Request.ToString(); - updateTreeView(OSDParser.SerializeLLSDXmlString(capsData.Request), treeViewRequestXml); - Be.Windows.Forms.DynamicByteProvider data = new Be.Windows.Forms.DynamicByteProvider(Utils.StringToBytes(capsData.Request.ToString())); + StringBuilder rawRequest = new StringBuilder(); + + if(capsData.RequestHeaders != null) + { + foreach (KeyValuePair kvp in capsData.RequestHeaders) + { + rawRequest.AppendFormat("{0}: {1}" + System.Environment.NewLine, kvp.Key, kvp.Value); + } + rawRequest.AppendLine(); + } + rawRequest.AppendLine(Utils.BytesToString(capsData.RawRequest)); + + OSD requestOSD = OSDParser.DeserializeLLSDXml(capsData.RawRequest); + + richTextBoxDecodedRequest.Text = TagToString(requestOSD, listViewSessions.FocusedItem.SubItems[2].Text);//.ToString(); + richTextBoxRawRequest.Text = rawRequest.ToString(); + richTextBoxNotationRequest.Text = requestOSD.ToString(); + updateTreeView(Utils.BytesToString(capsData.RawRequest), treeViewXMLRequest); + Be.Windows.Forms.DynamicByteProvider data = new Be.Windows.Forms.DynamicByteProvider(capsData.RawRequest); hexBoxRequest.ByteProvider = data; } else { - richTextBoxRawLogRequest.Text = "No Data"; - treeViewRequestXml.Nodes.Clear(); + richTextBoxDecodedRequest.Text = "No Data"; + richTextBoxRawRequest.Text = "No Data"; + richTextBoxNotationRequest.Text = "No Data"; + treeViewXMLRequest.Nodes.Clear(); hexBoxRequest.ByteProvider = null; + } if (capsData.Response != null) { - richTextBoxRawLogResponse.Text = capsData.Response.ToString(); - updateTreeView(OSDParser.SerializeLLSDXmlString(capsData.Response), treeViewResponseXml); - Be.Windows.Forms.DynamicByteProvider data = new Be.Windows.Forms.DynamicByteProvider(Utils.StringToBytes(capsData.Response.ToString())); + StringBuilder rawResponse = new StringBuilder(); + + if (capsData.ResponseHeaders != null) + { + foreach (string key in capsData.ResponseHeaders.Keys) + { + rawResponse.AppendFormat("{0}: {1}" + System.Environment.NewLine, key, capsData.ResponseHeaders[key]); + } + rawResponse.AppendLine(); + } + rawResponse.AppendLine(Utils.BytesToString(capsData.RawResponse)); + + OSD responseOSD = OSDParser.DeserializeLLSDXml(capsData.RawResponse); + + richTextBoxDecodedResponse.Text = TagToString(responseOSD, listViewSessions.FocusedItem.SubItems[2].Text);//.ToString(); + richTextBoxRawResponse.Text = rawResponse.ToString(); + richTextBoxNotationResponse.Text = responseOSD.ToString(); + updateTreeView(Utils.BytesToString(capsData.RawResponse), treeViewXmlResponse); + Be.Windows.Forms.DynamicByteProvider data = new Be.Windows.Forms.DynamicByteProvider(capsData.RawResponse); hexBoxResponse.ByteProvider = data; } else { - richTextBoxRawLogResponse.Text = "No Data"; - treeViewResponseXml.Nodes.Clear(); + richTextBoxDecodedResponse.Text = "No Data"; + richTextBoxRawResponse.Text = "No Data"; + richTextBoxNotationResponse.Text = "No Data"; + treeViewXmlResponse.Nodes.Clear(); hexBoxResponse.ByteProvider = null; } } @@ -592,11 +641,6 @@ namespace WinGridProxy } } - private void filterDisableByProtocolName_CheckedChanged(object sender, EventArgs e) - { - - } - /// /// Setup the context menu prior to it being displayed with specific entries for filtering packets/messages /// @@ -807,12 +851,57 @@ namespace WinGridProxy #region Helpers - // This is from omv Utils, once we get it prettied up put it back there + /// + /// Decode an IMessage object into a string of key/value pairs + /// + /// The IMessage object + /// A formatted string containing the names and values of the source object + public static string IMessageToString(IMessage message) + { + StringBuilder result = new StringBuilder(); + // common/custom types + result.AppendFormat("Message Type {0}" + System.Environment.NewLine, message.GetType().Name); + + foreach (FieldInfo messageField in message.GetType().GetFields()) + { + // a byte array + if (messageField.GetValue(message).GetType() == typeof(Byte[])) + { + result.AppendFormat("{0, 30}: {1} ({2})" + System.Environment.NewLine, + messageField.Name, Utils.BytesToHexString((byte[])messageField.GetValue(message), ""), messageField.FieldType.Name); + } + + // an array of class objects + else if (messageField.FieldType.IsArray) + { + object messageObjectData = messageField.GetValue(message); + result.AppendFormat("-- {0} --" + System.Environment.NewLine, messageField.FieldType.Name); + foreach (object nestedArrayObject in messageObjectData as Array) + { + result.AppendFormat(" [{0}]" + System.Environment.NewLine, nestedArrayObject.GetType().Name); + + foreach (FieldInfo nestedField in nestedArrayObject.GetType().GetFields()) + { + result.AppendFormat("{0, 30}: {1} ({2})" + System.Environment.NewLine, + nestedField.Name, nestedField.GetValue(nestedArrayObject), nestedField.Name.GetType().Name); + } + } + } + else + { + result.AppendFormat("{0, 30}: {1} ({2})" + System.Environment.NewLine, + messageField.Name, messageField.GetValue(message), messageField.FieldType.Name); + } + } + + return result.ToString(); + } + public static string PacketToString(Packet packet) { StringBuilder result = new StringBuilder(); - //result.AppendFormat("{0}" + System.Environment.NewLine, packet.Type); + result.AppendFormat("Packet Type: {0}" + System.Environment.NewLine, packet.Type); foreach (FieldInfo packetField in packet.GetType().GetFields()) { @@ -901,12 +990,18 @@ namespace WinGridProxy foreach (ListViewItem item in listViewPacketFilters.Items) { - Store.PacketSessions.Add(item.Text, item.Checked); + FilterEntry entry = new FilterEntry(); + entry.Checked = item.Checked; + entry.pType = item.SubItems[1].Text; + Store.PacketSessions.Add(item.Text, entry); } foreach (ListViewItem item in listViewMessageFilters.Items) { - Store.MessageSessions.Add(item.Text, item.Checked); + FilterEntry entry = new FilterEntry(); + entry.Checked = item.Checked; + entry.pType = item.SubItems[1].Text; + Store.MessageSessions.Add(item.Text, entry); } Store.StatisticsEnabled = enableStatisticsToolStripMenuItem.Checked; @@ -930,34 +1025,37 @@ namespace WinGridProxy // Update message filter listview listViewMessageFilters.BeginUpdate(); - foreach (KeyValuePair kvp in Store.MessageSessions) + foreach (KeyValuePair kvp in Store.MessageSessions) { ListViewItem foundMessage = listViewPacketFilters.FindItemWithText(kvp.Key); if (foundMessage == null) { ListViewItem addedItem = listViewMessageFilters.Items.Add(kvp.Key); - addedItem.Checked = kvp.Value; + addedItem.Checked = kvp.Value.Checked; + addedItem.SubItems.Add(kvp.Value.pType); + addedItem.BackColor = (kvp.Value.pType.Equals("CapMessage")) ? Color.Honeydew : Color.AliceBlue; } else { - foundMessage.Checked = kvp.Value; + foundMessage.Checked = kvp.Value.Checked; } } listViewMessageFilters.EndUpdate(); // updateTreeView packet filter listview listViewPacketFilters.BeginUpdate(); - foreach (KeyValuePair kvp in Store.PacketSessions) + foreach (KeyValuePair kvp in Store.PacketSessions) { ListViewItem foundPacket = listViewPacketFilters.FindItemWithText(kvp.Key); if (foundPacket == null) { ListViewItem addedItem = listViewPacketFilters.Items.Add(new ListViewItem(kvp.Key)); - addedItem.Checked = kvp.Value; + addedItem.Checked = kvp.Value.Checked; + addedItem.SubItems.Add(kvp.Value.pType); } else { - foundPacket.Checked = kvp.Value; + foundPacket.Checked = kvp.Value.Checked; } } listViewPacketFilters.EndUpdate(); @@ -989,6 +1087,7 @@ namespace WinGridProxy if (!String.IsNullOrEmpty(name) && found == null) { ListViewItem addedItem = listViewPacketFilters.Items.Add(new ListViewItem(name)); + addedItem.SubItems.Add("UDP"); } } catch (Exception) @@ -998,9 +1097,8 @@ namespace WinGridProxy } } - listViewPacketFilters.Sort(); + //listViewPacketFilters.Sort(); - // load from previous stored settings listViewPacketFilters.EndUpdate(); } @@ -1026,7 +1124,7 @@ namespace WinGridProxy foreach (ListViewItem item in listViewSessions.Items) { - if (item.Text.Contains(opts.SearchText) || TagToString(item.Tag).Contains(opts.SearchText)) + if (item.Text.Contains(opts.SearchText) || TagToString(item.Tag, item.SubItems[2].Text).Contains(opts.SearchText)) { if (opts.UnMarkPrevious) item.BackColor = Color.White; @@ -1038,8 +1136,6 @@ namespace WinGridProxy else item.Selected = false; } - - } if (opts.SearchWhat.Equals("Both") || opts.SearchWhat.Equals("Messages")) { @@ -1047,7 +1143,7 @@ namespace WinGridProxy } } - private string TagToString(object tag) + private string TagToString(object tag, string key) { if (tag is XmlRpcRequest) { @@ -1077,10 +1173,37 @@ namespace WinGridProxy if (capsData.Response != null) { - return capsData.Response.ToString(); + return capsData.Response.ToString(); + } + return "Unable to decode CapsRequest"; + } + else if (tag is OSD) + { + OSD osd = (OSD)tag; + if (osd.Type == OSDType.Map) + { + OSDMap data = (OSDMap)osd; + IMessage message; + if (data.ContainsKey("body")) + message = Caps.DecodeEvent(key, (OSDMap)data["body"]); + else + message = Caps.DecodeEvent(key, data); + + if (message != null) + return IMessageToString(message); + else + return "No Decoder for " + key + System.Environment.NewLine + + osd.ToString(); + } + else + { + return osd.ToString(); } } - return string.Empty; + else + { + return "Could not decode object type: " + tag.GetType().ToString(); + } } #endregion @@ -1091,7 +1214,7 @@ namespace WinGridProxy { try { - treeViewResponseXml.Nodes.Clear(); + treeView.Nodes.Clear(); XmlDocument tmpxmldoc = new XmlDocument(); tmpxmldoc.LoadXml(xml); diff --git a/Programs/WinGridProxy/Form1.resx b/Programs/WinGridProxy/Form1.resx index 61ec2a85..94254aef 100644 --- a/Programs/WinGridProxy/Form1.resx +++ b/Programs/WinGridProxy/Form1.resx @@ -172,6 +172,12 @@ BQAD/wUACw== + + 414, 17 + + + 116, 17 + 185, 54 @@ -187,12 +193,6 @@ 116, 17 - - 414, 17 - - - 116, 17 - 17, 17 @@ -229,6 +229,9 @@ AAAAAElFTkSuQmCC + + 919, 17 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -244,9 +247,6 @@ s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC - - 919, 17 - 226, 17 diff --git a/Programs/WinGridProxy/ProxyManager.cs b/Programs/WinGridProxy/ProxyManager.cs index 8696198b..069caf3e 100644 --- a/Programs/WinGridProxy/ProxyManager.cs +++ b/Programs/WinGridProxy/ProxyManager.cs @@ -35,20 +35,28 @@ using OpenMetaverse.StructuredData; namespace WinGridProxy { - public class ProxyManager + public class ProxyManager { + // fired when a new packet arrives public delegate void PacketLogHandler(Packet packet, Direction direction, IPEndPoint endpoint); public static event PacketLogHandler OnPacketLog; + // fired when a message arrives over a known capability public delegate void MessageLogHandler(CapsRequest req, CapsStage stage); public static event MessageLogHandler OnMessageLog; + // handle login request/response data public delegate void LoginLogHandler(object request, Direction direction); public static event LoginLogHandler OnLoginResponse; + // fired when a new Capability is added to the KnownCaps Dictionary public delegate void CapsAddedHandler(CapInfo cap); public static event CapsAddedHandler OnCapabilityAdded; + // Handle messages sent via the EventQueue + public delegate void EventQueueMessageHandler(CapsRequest req, CapsStage stage); + public static event EventQueueMessageHandler OnEventMessageLog; + private string _Port; private string _ListenIP; private string _LoginURI; @@ -67,9 +75,9 @@ namespace WinGridProxy _ListenIP = "--proxy-client-facing-address=127.0.0.1"; if (String.IsNullOrEmpty(loginUri)) - _LoginURI = "https://login.agni.lindenlab.com/cgi-bin/login.cgi"; + _LoginURI = "--proxy-remote-login-uri=https://login.agni.lindenlab.com/cgi-bin/login.cgi"; else - _LoginURI = loginUri; + _LoginURI = "--proxy-remote-login-uri=" + loginUri; string[] args = { _Port, _ListenIP, _LoginURI }; @@ -94,6 +102,7 @@ namespace WinGridProxy Proxy.proxy.AddCapsDelegate("EventQueueGet", new CapsDelegate(EventQueueGetHandler)); + // this is so we are informed of any new capabilities that are added to the KnownCaps dictionary Proxy.proxy.KnownCaps.AddDelegate(OpenMetaverse.DictionaryEventAction.Add, new OpenMetaverse.DictionaryChangeCallback(KnownCapsAddedHandler)); } @@ -147,6 +156,13 @@ namespace WinGridProxy return false; } + /// + /// Process individual messages that arrive via the EventQueue and convert each indvidual event into a format + /// suitable for processing by the IMessage system + /// + /// + /// + /// private bool EventQueueGetHandler(CapsRequest req, CapsStage stage) { if (stage == CapsStage.Response) @@ -157,17 +173,19 @@ namespace WinGridProxy for (int i = 0; i < eventsArray.Count; i++) { OSDMap bodyMap = (OSDMap)eventsArray[i]; - if (OnMessageLog != null) + if (OnEventMessageLog != null) { CapInfo capInfo = new CapInfo(req.Info.URI, req.Info.Sim, bodyMap["message"].AsString()); CapsRequest capReq = new CapsRequest(capInfo); - capReq.Request = req.Request; + capReq.RequestHeaders = req.RequestHeaders; + capReq.ResponseHeaders = req.ResponseHeaders; + capReq.Request = null;// req.Request; + capReq.RawRequest = null;// req.RawRequest; + capReq.RawResponse = OSDParser.SerializeLLSDXmlBytes(bodyMap); capReq.Response = bodyMap; - OnMessageLog(capReq, CapsStage.Response); + OnEventMessageLog(capReq, CapsStage.Response); } - - //Console.WriteLine("[" + i + "] " + bodyMap["message"].AsString()); } } return false; diff --git a/Programs/WinGridProxy/SettingsStore.cs b/Programs/WinGridProxy/SettingsStore.cs index 6450c905..ee41f37c 100644 --- a/Programs/WinGridProxy/SettingsStore.cs +++ b/Programs/WinGridProxy/SettingsStore.cs @@ -32,10 +32,16 @@ using System.IO; namespace WinGridProxy { + public class FilterEntry + { + public bool Checked; + public string pType; + } + class SettingsStore { - public Dictionary MessageSessions; - public Dictionary PacketSessions; + public Dictionary MessageSessions; + public Dictionary PacketSessions; public bool AutoScrollEnabled; public bool StatisticsEnabled; public bool SaveSessionOnExit; @@ -43,8 +49,8 @@ namespace WinGridProxy public SettingsStore() { - MessageSessions = new Dictionary(); - PacketSessions = new Dictionary(); + MessageSessions = new Dictionary(); + PacketSessions = new Dictionary(); } public OSDMap Serialize() @@ -53,11 +59,12 @@ namespace WinGridProxy if (MessageSessions.Count > 0) { OSDArray messageArray = new OSDArray(MessageSessions.Count); - foreach (KeyValuePair kvp in MessageSessions) + foreach (KeyValuePair kvp in MessageSessions) { - OSDMap sessionMap = new OSDMap(2); + OSDMap sessionMap = new OSDMap(3); sessionMap["Capability"] = OSD.FromString(kvp.Key); - sessionMap["Capture"] = OSD.FromBoolean(kvp.Value); + sessionMap["Capture"] = OSD.FromBoolean(kvp.Value.Checked); + sessionMap["Type"] = OSD.FromString(kvp.Value.pType); messageArray.Add(sessionMap); } map.Add("message_sessions", messageArray); @@ -66,11 +73,12 @@ namespace WinGridProxy if (PacketSessions.Count > 0) { OSDArray packetArray = new OSDArray(PacketSessions.Count); - foreach (KeyValuePair kvp in PacketSessions) + foreach (KeyValuePair kvp in PacketSessions) { - OSDMap sessionMap = new OSDMap(2); + OSDMap sessionMap = new OSDMap(3); sessionMap["PacketName"] = OSD.FromString(kvp.Key); - sessionMap["Capture"] = OSD.FromBoolean(kvp.Value); + sessionMap["Capture"] = OSD.FromBoolean(kvp.Value.Checked); + sessionMap["Type"] = OSD.FromString(kvp.Value.pType); packetArray.Add(sessionMap); } map.Add("packet_sessions", packetArray); @@ -97,12 +105,15 @@ namespace WinGridProxy OSDArray messageArray = (OSDArray)map["message_sessions"]; - MessageSessions = new Dictionary(messageArray.Count); + MessageSessions = new Dictionary(messageArray.Count); for (int i = 0; i < messageArray.Count; i++) { OSDMap m = (OSDMap)messageArray[i]; - MessageSessions.Add(m["Capability"].AsString(), m["Capture"].AsBoolean()); + FilterEntry entry = new FilterEntry(); + entry.Checked = m["Capture"].AsBoolean(); + entry.pType = m["Type"].AsString(); + MessageSessions.Add(m["Capability"].AsString(), entry); } } @@ -116,13 +127,15 @@ namespace WinGridProxy { OSDArray packetArray = (OSDArray)map["packet_sessions"]; - PacketSessions = new Dictionary(packetArray.Count); + PacketSessions = new Dictionary(packetArray.Count); for (int i = 0; i < packetArray.Count; i++) { OSDMap packetMap = (OSDMap)packetArray[i]; - - PacketSessions.Add(packetMap["PacketName"].AsString(), packetMap["Capture"].AsBoolean()); + FilterEntry entry = new FilterEntry(); + entry.Checked = packetMap["Capture"].AsBoolean(); + entry.pType = packetMap["Type"].AsString(); + PacketSessions.Add(packetMap["PacketName"].AsString(), entry); } } else