From f96f2c8dc1eb8de3d63317d127015c8c6a6c9621 Mon Sep 17 00:00:00 2001 From: Jim Radford Date: Sat, 25 Apr 2009 06:40:43 +0000 Subject: [PATCH] LIBOMV-477 Adds support to the messaging system to encode/decode the EventQueue (2 variants Ack/Event) * Fixed ParcelPropertiesUpdateMessage decode/encode of Flags field LIBOMV-492 WinGridProxy IMessageToString Method enhanced to decode interfaces when a Variant is present * Updated Helpfile Builder generator to use hana theme and other trickery to enhance the output of the API Documentation output git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@2661 52acb1d6-8a22-11de-b505-999d5b087335 --- OpenMetaverse/Messages/LindenMessages.cs | 104 +++++++ OpenMetaverse/Messages/MessageEventDecoder.cs | 1 + Programs/WinGridProxy/Form1.Designer.cs | 289 +++++++++--------- Programs/WinGridProxy/Form1.cs | 86 +++++- Programs/WinGridProxy/Form1.resx | 18 +- docs/OpenMetaverse-docs.shfb | 13 +- 6 files changed, 342 insertions(+), 169 deletions(-) diff --git a/OpenMetaverse/Messages/LindenMessages.cs b/OpenMetaverse/Messages/LindenMessages.cs index fde4e65e..2ee62041 100644 --- a/OpenMetaverse/Messages/LindenMessages.cs +++ b/OpenMetaverse/Messages/LindenMessages.cs @@ -1911,6 +1911,110 @@ namespace OpenMetaverse.Messages.Linden #endregion + #region EventQueue + + public interface IEventMessage + { + OSDMap Serialize(); + void Deserialize(OSDMap map); + } + + public class EventQueueAck : IEventMessage + { + public int AckID; + public bool Done; + + public OSDMap Serialize() + { + OSDMap map = new OSDMap(); + map["ack"] = OSD.FromInteger(AckID); + map["done"] = OSD.FromBoolean(Done); + return map; + } + + public void Deserialize(OSDMap map) + { + AckID = map["ack"].AsInteger(); + Done = map["done"].AsBoolean(); + } + } + + public class EventQueueEvent : IEventMessage + { + public int Sequence; + + public class QueueEvent + { + public IMessage EventMessage; + public string MessageKey; + } + public QueueEvent[] MessageEvents; + + public OSDMap Serialize() + { + OSDMap map = new OSDMap(1); + + OSDArray eventsArray = new OSDArray(); + + for (int i = 0; i < MessageEvents.Length; i++) + { + OSDMap eventMap = new OSDMap(2); + eventMap["body"] = MessageEvents[i].EventMessage.Serialize(); + eventMap["message"] = OSD.FromString(MessageEvents[i].MessageKey); + eventsArray.Add(eventMap); + } + + map["events"] = eventsArray; + map["id"] = OSD.FromInteger(Sequence); + + return map; + } + + public void Deserialize(OSDMap map) + { + Sequence = map["id"].AsInteger(); + OSDArray arrayEvents = (OSDArray)map["events"]; + + MessageEvents = new QueueEvent[arrayEvents.Count]; + + for (int i = 0; i < arrayEvents.Count; i++) + { + OSDMap eventMap = (OSDMap)arrayEvents[i]; + QueueEvent ev = new QueueEvent(); + + ev.MessageKey = eventMap["message"].AsString(); + ev.EventMessage = Caps.DecodeEvent(ev.MessageKey, (OSDMap)eventMap["body"]); + MessageEvents[i] = ev; + } + } + } + + public class EventQueueGetMessage : IMessage + { + public IEventMessage Messages; + + public OSDMap Serialize() + { + return Messages.Serialize(); + } + + public void Deserialize(OSDMap map) + { + if (map.ContainsKey("ack")) + Messages = new EventQueueAck(); + else if (map.ContainsKey("events")) + Messages = new EventQueueEvent(); + else + Logger.Log("Unable to deserialize EventQueueGetMessage: No message handler exists for event", Helpers.LogLevel.Warning); + + Messages.Deserialize(map); + } + } + + + #endregion + + #region Stats Messages public class ViewerStatsMessage : IMessage diff --git a/OpenMetaverse/Messages/MessageEventDecoder.cs b/OpenMetaverse/Messages/MessageEventDecoder.cs index 8ffc3611..26b7548b 100644 --- a/OpenMetaverse/Messages/MessageEventDecoder.cs +++ b/OpenMetaverse/Messages/MessageEventDecoder.cs @@ -75,6 +75,7 @@ namespace OpenMetaverse case "LandStatReply": message = new LandStatReplyMessage(); break; case "ParcelVoiceInfoRequest": message = new ParcelVoiceInfoRequestMessage(); break; case "ViewerStats": message = new ViewerStatsMessage(); break; + case "EventQueueGet": message = new EventQueueGetMessage(); break; // Capabilities TODO: // DispatchRegionInfo diff --git a/Programs/WinGridProxy/Form1.Designer.cs b/Programs/WinGridProxy/Form1.Designer.cs index f0f1ed84..723a0620 100644 --- a/Programs/WinGridProxy/Form1.Designer.cs +++ b/Programs/WinGridProxy/Form1.Designer.cs @@ -40,6 +40,13 @@ this.textBoxProxyListenIP = new System.Windows.Forms.TextBox(); this.panelMainWindow = new System.Windows.Forms.Panel(); this.splitContainerSessionsTabs = 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.columnHeaderContentType = 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(); @@ -93,8 +100,14 @@ this.splitContainerFilters = 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.columnHeaderPacketName = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderPacketType = new System.Windows.Forms.ColumnHeader(); this.checkBoxCheckAllMessages = new System.Windows.Forms.CheckBox(); this.grpCapsFilters = new System.Windows.Forms.GroupBox(); + this.listViewMessageFilters = new WinGridProxy.ListViewNoFlicker(); + this.columnHeaderName = new System.Windows.Forms.ColumnHeader(); + this.columnHeaderMessageType = new System.Windows.Forms.ColumnHeader(); this.tabPageInspect = new System.Windows.Forms.TabPage(); this.splitContainerInspectorTab = new System.Windows.Forms.SplitContainer(); this.tabControlInspectorRequest = new System.Windows.Forms.TabControl(); @@ -210,19 +223,6 @@ this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); this.autoColorizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.colorDialog1 = new System.Windows.Forms.ColorDialog(); - 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.columnHeaderContentType = 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.panelProxyConfig.SuspendLayout(); this.panelMainWindow.SuspendLayout(); this.splitContainerSessionsTabs.Panel1.SuspendLayout(); @@ -375,10 +375,63 @@ // this.splitContainerSessionsTabs.Panel2.Controls.Add(this.tabControl1); this.splitContainerSessionsTabs.Size = new System.Drawing.Size(1087, 428); - this.splitContainerSessionsTabs.SplitterDistance = 470; + this.splitContainerSessionsTabs.SplitterDistance = 469; this.splitContainerSessionsTabs.SplitterWidth = 5; this.splitContainerSessionsTabs.TabIndex = 0; // + // listViewSessions + // + this.listViewSessions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderCounter, + this.columnHeaderProtocol, + this.columnHeaderType, + this.columnHeaderSize, + this.columnHeaderUrl, + this.columnHeaderContentType}); + 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(469, 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 = 59; + // + // columnHeaderType + // + this.columnHeaderType.Text = "Packet Type"; + this.columnHeaderType.Width = 151; + // + // columnHeaderSize + // + this.columnHeaderSize.Text = "Bytes"; + this.columnHeaderSize.Width = 64; + // + // columnHeaderUrl + // + this.columnHeaderUrl.Text = "Host/Address"; + this.columnHeaderUrl.Width = 312; + // + // columnHeaderContentType + // + this.columnHeaderContentType.Text = "Content Type"; + this.columnHeaderContentType.Width = 250; + // // contextMenuStripSessions // this.contextMenuStripSessions.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -393,7 +446,7 @@ this.toolStripSeparator16, this.findToolStripMenuItem1}); this.contextMenuStripSessions.Name = "contextMenuStripSessions"; - this.contextMenuStripSessions.Size = new System.Drawing.Size(180, 160); + this.contextMenuStripSessions.Size = new System.Drawing.Size(180, 182); this.contextMenuStripSessions.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStripSessions_Opening); // // toolStripMenuItemAutoScroll @@ -634,7 +687,7 @@ this.tabControl1.Name = "tabControl1"; this.tabControl1.Padding = new System.Drawing.Point(10, 6); this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(612, 428); + this.tabControl1.Size = new System.Drawing.Size(613, 428); this.tabControl1.TabIndex = 0; // // tabPageSummary @@ -643,14 +696,16 @@ this.tabPageSummary.Location = new System.Drawing.Point(4, 28); this.tabPageSummary.Name = "tabPageSummary"; this.tabPageSummary.Padding = new System.Windows.Forms.Padding(3); - this.tabPageSummary.Size = new System.Drawing.Size(604, 396); + this.tabPageSummary.Size = new System.Drawing.Size(605, 396); this.tabPageSummary.TabIndex = 0; this.tabPageSummary.Text = "Summary"; this.tabPageSummary.UseVisualStyleBackColor = true; // // panelStats // - this.panelStats.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.panelStats.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.panelStats.Controls.Add(this.groupBox2); this.panelStats.Controls.Add(this.groupBox1); this.panelStats.Location = new System.Drawing.Point(6, 6); @@ -660,7 +715,6 @@ // // groupBox2 // - this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.groupBox2.Controls.Add(this.labelPacketsTotal); this.groupBox2.Controls.Add(this.label1PacketsOut); this.groupBox2.Controls.Add(this.labelPacketsIn); @@ -730,7 +784,7 @@ // // groupBox1 // - this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.groupBox1.Controls.Add(this.labelCapsTotal); this.groupBox1.Controls.Add(this.labelCapsOut); this.groupBox1.Controls.Add(this.labelCapsIn); @@ -804,7 +858,7 @@ this.tabPageFilters.Location = new System.Drawing.Point(4, 28); this.tabPageFilters.Name = "tabPageFilters"; this.tabPageFilters.Padding = new System.Windows.Forms.Padding(3); - this.tabPageFilters.Size = new System.Drawing.Size(604, 396); + this.tabPageFilters.Size = new System.Drawing.Size(605, 396); this.tabPageFilters.TabIndex = 1; this.tabPageFilters.Text = "Filters"; this.tabPageFilters.UseVisualStyleBackColor = true; @@ -824,7 +878,7 @@ // this.splitContainerFilters.Panel2.Controls.Add(this.checkBoxCheckAllMessages); this.splitContainerFilters.Panel2.Controls.Add(this.grpCapsFilters); - this.splitContainerFilters.Size = new System.Drawing.Size(598, 390); + this.splitContainerFilters.Size = new System.Drawing.Size(599, 390); this.splitContainerFilters.SplitterDistance = 299; this.splitContainerFilters.SplitterWidth = 5; this.splitContainerFilters.TabIndex = 0; @@ -857,6 +911,35 @@ this.grpUDPFilters.TabStop = false; this.grpUDPFilters.Text = "UDP Packets"; // + // 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(287, 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"; + // // checkBoxCheckAllMessages // this.checkBoxCheckAllMessages.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); @@ -880,17 +963,47 @@ this.grpCapsFilters.Enabled = false; this.grpCapsFilters.Location = new System.Drawing.Point(3, 3); this.grpCapsFilters.Name = "grpCapsFilters"; - this.grpCapsFilters.Size = new System.Drawing.Size(288, 357); + this.grpCapsFilters.Size = new System.Drawing.Size(289, 357); this.grpCapsFilters.TabIndex = 1; this.grpCapsFilters.TabStop = false; this.grpCapsFilters.Text = "Capabilities Messages"; // + // 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(283, 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; + // // tabPageInspect // this.tabPageInspect.Controls.Add(this.splitContainerInspectorTab); this.tabPageInspect.Location = new System.Drawing.Point(4, 28); this.tabPageInspect.Name = "tabPageInspect"; - this.tabPageInspect.Size = new System.Drawing.Size(604, 396); + this.tabPageInspect.Size = new System.Drawing.Size(605, 396); this.tabPageInspect.TabIndex = 3; this.tabPageInspect.Text = "Inspector"; this.tabPageInspect.UseVisualStyleBackColor = true; @@ -912,7 +1025,7 @@ // splitContainerInspectorTab.Panel2 // this.splitContainerInspectorTab.Panel2.Controls.Add(this.tabControlInspectorResponse); - this.splitContainerInspectorTab.Size = new System.Drawing.Size(604, 396); + this.splitContainerInspectorTab.Size = new System.Drawing.Size(605, 396); this.splitContainerInspectorTab.SplitterDistance = 179; this.splitContainerInspectorTab.SplitterWidth = 5; this.splitContainerInspectorTab.TabIndex = 1; @@ -930,7 +1043,7 @@ this.tabControlInspectorRequest.Location = new System.Drawing.Point(0, 0); this.tabControlInspectorRequest.Name = "tabControlInspectorRequest"; this.tabControlInspectorRequest.SelectedIndex = 0; - this.tabControlInspectorRequest.Size = new System.Drawing.Size(604, 179); + this.tabControlInspectorRequest.Size = new System.Drawing.Size(605, 179); this.tabControlInspectorRequest.TabIndex = 0; // // tabPageDecodedRequest @@ -940,7 +1053,7 @@ 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(596, 149); + this.tabPageDecodedRequest.Size = new System.Drawing.Size(597, 149); this.tabPageDecodedRequest.TabIndex = 4; this.tabPageDecodedRequest.Text = "Request"; this.tabPageDecodedRequest.UseVisualStyleBackColor = true; @@ -952,7 +1065,7 @@ this.richTextBoxDecodedRequest.Location = new System.Drawing.Point(3, 3); this.richTextBoxDecodedRequest.Name = "richTextBoxDecodedRequest"; this.richTextBoxDecodedRequest.ShowSelectionMargin = true; - this.richTextBoxDecodedRequest.Size = new System.Drawing.Size(590, 143); + this.richTextBoxDecodedRequest.Size = new System.Drawing.Size(591, 143); this.richTextBoxDecodedRequest.TabIndex = 0; this.richTextBoxDecodedRequest.Text = ""; // @@ -1082,7 +1195,7 @@ this.tabControlInspectorResponse.Multiline = true; this.tabControlInspectorResponse.Name = "tabControlInspectorResponse"; this.tabControlInspectorResponse.SelectedIndex = 0; - this.tabControlInspectorResponse.Size = new System.Drawing.Size(604, 212); + this.tabControlInspectorResponse.Size = new System.Drawing.Size(605, 212); this.tabControlInspectorResponse.TabIndex = 0; // // tabPageDecodeResponse @@ -1092,7 +1205,7 @@ 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(596, 182); + this.tabPageDecodeResponse.Size = new System.Drawing.Size(597, 182); this.tabPageDecodeResponse.TabIndex = 6; this.tabPageDecodeResponse.Text = "Response"; this.tabPageDecodeResponse.UseVisualStyleBackColor = true; @@ -1104,7 +1217,7 @@ this.richTextBoxDecodedResponse.Location = new System.Drawing.Point(3, 3); this.richTextBoxDecodedResponse.Name = "richTextBoxDecodedResponse"; this.richTextBoxDecodedResponse.ShowSelectionMargin = true; - this.richTextBoxDecodedResponse.Size = new System.Drawing.Size(590, 176); + this.richTextBoxDecodedResponse.Size = new System.Drawing.Size(591, 176); this.richTextBoxDecodedResponse.TabIndex = 0; this.richTextBoxDecodedResponse.Text = ""; // @@ -1230,7 +1343,7 @@ this.tabPageInject.Location = new System.Drawing.Point(4, 28); this.tabPageInject.Name = "tabPageInject"; this.tabPageInject.Padding = new System.Windows.Forms.Padding(3); - this.tabPageInject.Size = new System.Drawing.Size(604, 396); + this.tabPageInject.Size = new System.Drawing.Size(605, 396); this.tabPageInject.TabIndex = 2; this.tabPageInject.Text = "Inject"; this.tabPageInject.UseVisualStyleBackColor = true; @@ -1917,118 +2030,6 @@ this.autoColorizeToolStripMenuItem.Text = "Auto Colorize"; this.autoColorizeToolStripMenuItem.Click += new System.EventHandler(this.autoColorizeToolStripMenuItem_Click); // - // listViewSessions - // - this.listViewSessions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeaderCounter, - this.columnHeaderProtocol, - this.columnHeaderType, - this.columnHeaderSize, - this.columnHeaderUrl, - this.columnHeaderContentType}); - 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(470, 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 = 59; - // - // columnHeaderType - // - this.columnHeaderType.Text = "Packet Type"; - this.columnHeaderType.Width = 151; - // - // columnHeaderSize - // - this.columnHeaderSize.Text = "Bytes"; - this.columnHeaderSize.Width = 64; - // - // columnHeaderUrl - // - this.columnHeaderUrl.Text = "Host/Address"; - this.columnHeaderUrl.Width = 312; - // - // columnHeaderContentType - // - this.columnHeaderContentType.Text = "Content Type"; - this.columnHeaderContentType.Width = 250; - // - // 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(287, 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(282, 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; - // // FormWinGridProxy // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); diff --git a/Programs/WinGridProxy/Form1.cs b/Programs/WinGridProxy/Form1.cs index d67dfa41..0ccde553 100644 --- a/Programs/WinGridProxy/Form1.cs +++ b/Programs/WinGridProxy/Form1.cs @@ -179,6 +179,7 @@ namespace WinGridProxy ListViewItem session = new ListViewItem(new string[] { PacketCounter.ToString(), "HTTPS", loginType, request.ToString().Length.ToString(), comboBoxLoginURL.Text, "xml-rpc"}); session.Tag = request; session.ImageIndex = (request is XmlRpcRequest) ? 1 : 0; + listViewSessions.Items.Add(session); } } @@ -661,11 +662,9 @@ namespace WinGridProxy enableDisableFilterByNameToolStripMenuItem.Text = String.Format("Capture {0} {1}", listViewSessions.FocusedItem.SubItems[2].Text, strPacketOrMessage); toolStripMenuItemSelectPacketName.Tag = enableDisableFilterByNameToolStripMenuItem.Tag = listViewSessions.FocusedItem.SubItems[2].Text; + toolStripMenuItemSelectPacketName.Text = String.Format("All {0} {1}", listViewSessions.FocusedItem.SubItems[2].Text, strPacketOrMessage); - // toolStripMenuItemSelectProtocol.Text = String.Format("All {0} {1}", listViewSessions.FocusedItem.SubItems[1].Text, strPacketOrMessage); - - // toolStripMenuItemSelectProtocol.Visible = enableDisableFilterByNameToolStripMenuItem.Visible = toolStripSeparatorSelectPacketProto.Visible = toolStripSeparatorFilterPacketByName.Visible = @@ -813,7 +812,19 @@ namespace WinGridProxy session["packet"] = OSD.FromString(item.SubItems[2].Text); session["size"] = OSD.FromString(item.SubItems[3].Text); session["host"] = OSD.FromString(item.SubItems[4].Text); - session["tag"] = OSD.FromObject(item.Tag); + + + + try + { + session["tag"] = OSD.FromBinary((byte[])item.Tag); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message + ": " + ex.StackTrace); + session["tag"] = OSD.FromBinary(Utils.EmptyBytes); + } + sessionArray.Add(session); } @@ -848,7 +859,7 @@ namespace WinGridProxy session["host"].AsString()})); addedItem.ImageIndex = session["image_index"].AsInteger(); - addedItem.Tag = session["tag"].ToString(); + addedItem.Tag = LitJson.JsonMapper.ToObject(Utils.BytesToString(session["tag"].AsBinary(), 0, session["tag"].AsBinary().Length)); } listViewSessions.EndUpdate(); @@ -884,7 +895,7 @@ namespace WinGridProxy /// /// The IMessage object /// A formatted string containing the names and values of the source object - public static string IMessageToString(IMessage message) + public static string IMessageToString(object message) { StringBuilder result = new StringBuilder(); // common/custom types @@ -892,6 +903,7 @@ namespace WinGridProxy foreach (FieldInfo messageField in message.GetType().GetFields()) { + // a byte array if (messageField.GetValue(message).GetType() == typeof(Byte[])) { @@ -920,7 +932,11 @@ namespace WinGridProxy nestedField.GetValue(nestedArrayObject), "D"), nestedField.GetValue(nestedArrayObject), nestedField.GetValue(nestedArrayObject).GetType().Name); - } + } + else if(nestedField.FieldType.IsInterface) + { + result.AppendLine(IMessageToString(nestedField.GetValue(nestedArrayObject))); + } else { result.AppendFormat("{0, 30}: {1} ({2})" + System.Environment.NewLine, @@ -941,6 +957,10 @@ namespace WinGridProxy messageField.GetValue(message), "D"), messageField.GetValue(message), messageField.FieldType.Name); } + else if (messageField.FieldType.IsInterface) + { + result.AppendLine(IMessageToString(messageField.GetValue(message))); + } else { result.AppendFormat("{0, 30}: {1} ({2})" + System.Environment.NewLine, @@ -952,6 +972,20 @@ namespace WinGridProxy return result.ToString(); } + private static string InterpretOptions(byte options) + { + return "[" + + ((options & Helpers.MSG_APPENDED_ACKS) != 0 ? "Ack" : " ") + + " " + + ((options & Helpers.MSG_RESENT) != 0 ? "Res" : " ") + + " " + + ((options & Helpers.MSG_RELIABLE) != 0 ? "Rel" : " ") + + " " + + ((options & Helpers.MSG_ZEROCODED) != 0 ? "Zer" : " ") + + "]" + ; + } + /// /// Creates a formatted string containing the values of a Packet /// @@ -962,7 +996,13 @@ namespace WinGridProxy StringBuilder result = new StringBuilder(); result.AppendFormat("Packet Type: {0}" + System.Environment.NewLine, packet.Type); + result.AppendLine("[Packet Header]"); + // payload + result.AppendFormat("Sequence: {0}" + System.Environment.NewLine, packet.Header.Sequence); + result.AppendFormat(" Options: {0}" + System.Environment.NewLine, InterpretOptions(packet.Header.Flags)); + result.AppendLine(); + result.AppendLine("[Packet Payload]"); foreach (FieldInfo packetField in packet.GetType().GetFields()) { object packetDataObject = packetField.GetValue(packet); @@ -1021,10 +1061,34 @@ namespace WinGridProxy } else { - result.AppendFormat("{0,30}: {1} [{2}]" + System.Environment.NewLine, - packetPropertyField.Name, - Utils.BytesToString((byte[])packetPropertyField.GetValue(packetDataObject, null)), - packetDataObject.GetType()); + // Decode the BinaryBucket + if (packetPropertyField.Name.Equals("BinaryBucket")) + { + byte[] bytes = (byte[])packetPropertyField.GetValue(packetDataObject, null); + string bbDecoded = String.Empty; + if (bytes.Length == 1) + { + bbDecoded = String.Format("{0}", bytes[0]); + } + else if (bytes.Length == 17) + { + bbDecoded = String.Format("{0} {1} ({2})", new UUID(bytes, 1).ToString(), bytes[0], (AssetType)bytes[0]); + } + else + { + bbDecoded = Utils.BytesToString(bytes); + } + + result.AppendFormat("{0,30}: {1}" + System.Environment.NewLine, + packetPropertyField.Name, + bbDecoded); + } + else + { + result.AppendFormat("{0,30}: {1}" + System.Environment.NewLine, + packetPropertyField.Name, + Utils.BytesToString((byte[])packetPropertyField.GetValue(packetDataObject, null))); + } } } else diff --git a/Programs/WinGridProxy/Form1.resx b/Programs/WinGridProxy/Form1.resx index 01fe664c..8a5feabb 100644 --- a/Programs/WinGridProxy/Form1.resx +++ b/Programs/WinGridProxy/Form1.resx @@ -120,6 +120,15 @@ 524, 17 + + 185, 54 + + + 17, 54 + + + 705, 17 + 309, 17 @@ -172,15 +181,6 @@ BQAD/wUACw== - - 185, 54 - - - 17, 54 - - - 705, 17 - 414, 17 diff --git a/docs/OpenMetaverse-docs.shfb b/docs/OpenMetaverse-docs.shfb index b673acdd..42556ffc 100644 --- a/docs/OpenMetaverse-docs.shfb +++ b/docs/OpenMetaverse-docs.shfb @@ -26,9 +26,12 @@ Image Encoding/Decoding The OpenMetaverse library primary namespace Capabilities is a method of transferring data between the client and Simulator, The Caps Client and EventQueue classes are contained within this namespace. - GUI Abstraction Layer for using the library in a winforms based application + Common GUI Components for WinForms applications Contains capabilities client/server related classes Classes for dealing with images (Textures), including encoding/decoding and our wrapper class for OpenJpeg + Common Interfaces used throughout the library + Message System classes and Utilities. Allows conversion to and from Strongly typed objects to OSD + The OpenMetaverse Messaging system containing a set of classes specifc to Linden simulators for converting to/from OSD into/from strongly typed classes. The OpenMetaverse Messaging system containing a set of classes specifc to Simian simulators for converting to/from OSD into/from strongly typed classes Packet information classes for UDP @@ -60,7 +63,7 @@ The OpenMetaverse project is an effort directed at understanding how Second Life <li> This research and documentation is protected under the exceptions granted in the Second Life Terms of Service section 4.1 and DMCA section 1201(f), and is formally endorsed by Linden Labs. </li> </ul> Summary, Parameter, Returns, AutoDocumentCtors, Namespace, TypeParameter - InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected + Protected, SealedProtected .\trunk\ @@ -72,8 +75,8 @@ The OpenMetaverse project is an effort directed at understanding how Second Life Help1xAndWebsite False 2.0.50727 - True - False + False + True False OpenMetaverse Library API Documentation @@ -88,7 +91,7 @@ The OpenMetaverse project is an effort directed at understanding how Second Life Local Msdn Blank - Prototype + hana MemberName Standard False