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