diff --git a/OpenMetaverse.Http/CapsClient.cs b/OpenMetaverse.Http/CapsClient.cs index 8e24a2b7..f96e7e7d 100644 --- a/OpenMetaverse.Http/CapsClient.cs +++ b/OpenMetaverse.Http/CapsClient.cs @@ -27,6 +27,7 @@ using System; using System.Net; using System.Security.Cryptography.X509Certificates; +using System.Threading; using OpenMetaverse.StructuredData; namespace OpenMetaverse.Http @@ -66,23 +67,23 @@ namespace OpenMetaverse.Http _Client.DownloadStringCompleted += new CapsBase.DownloadStringCompletedEventHandler(Client_DownloadStringCompleted); } - public void StartRequest() + public void BeginGetResponse() { - StartRequest(null, null); + BeginGetResponse(null, null); } - public void StartRequest(OSD llsd) + public void BeginGetResponse(OSD data) { - byte[] postData = OSDParser.SerializeLLSDXmlBytes(llsd); - StartRequest(postData, null); + byte[] postData = OSDParser.SerializeLLSDXmlBytes(data); + BeginGetResponse(postData, null); } - public void StartRequest(byte[] postData) + public void BeginGetResponse(byte[] postData) { - StartRequest(postData, null); + BeginGetResponse(postData, null); } - public void StartRequest(byte[] postData, string contentType) + public void BeginGetResponse(byte[] postData, string contentType) { _PostData = postData; _ContentType = contentType; @@ -108,6 +109,38 @@ namespace OpenMetaverse.Http _Client.UploadDataAsync(_Client.Location, postData); } + public bool GetResponse(int millisecondsTimeout) + { + AutoResetEvent waitEvent = new AutoResetEvent(false); + OnComplete += delegate(CapsClient client, OSD result, Exception error) { waitEvent.Set(); }; + BeginGetResponse(); + return waitEvent.WaitOne(millisecondsTimeout, false); + } + + public bool GetResponse(OSD data, int millisecondsTimeout) + { + AutoResetEvent waitEvent = new AutoResetEvent(false); + OnComplete += delegate(CapsClient client, OSD result, Exception error) { waitEvent.Set(); }; + BeginGetResponse(data); + return waitEvent.WaitOne(millisecondsTimeout, false); + } + + public bool GetResponse(byte[] postData, int millisecondsTimeout) + { + AutoResetEvent waitEvent = new AutoResetEvent(false); + OnComplete += delegate(CapsClient client, OSD result, Exception error) { waitEvent.Set(); }; + BeginGetResponse(postData); + return waitEvent.WaitOne(millisecondsTimeout, false); + } + + public bool GetResponse(byte[] postData, string contentType, int millisecondsTimeout) + { + AutoResetEvent waitEvent = new AutoResetEvent(false); + OnComplete += delegate(CapsClient client, OSD result, Exception error) { waitEvent.Set(); }; + BeginGetResponse(postData, contentType); + return waitEvent.WaitOne(millisecondsTimeout, false); + } + public void Cancel() { if (_Client.IsBusy) @@ -159,7 +192,7 @@ namespace OpenMetaverse.Http // cache which will time out periodically. The CAPS server // interprets this as a generic error and returns a 502 to us // that we ignore - StartRequest(_PostData, _ContentType); + BeginGetResponse(_PostData, _ContentType); } else if (code != HttpStatusCode.OK) { @@ -210,7 +243,7 @@ namespace OpenMetaverse.Http // cache which will time out periodically. The CAPS server // interprets this as a generic error and returns a 502 to us // that we ignore - StartRequest(_PostData, _ContentType); + BeginGetResponse(_PostData, _ContentType); } else if (code != HttpStatusCode.OK) { diff --git a/OpenMetaverse.Utilities/RegistrationApi.cs b/OpenMetaverse.Utilities/RegistrationApi.cs index 170b1658..0e61272e 100644 --- a/OpenMetaverse.Utilities/RegistrationApi.cs +++ b/OpenMetaverse.Utilities/RegistrationApi.cs @@ -137,7 +137,7 @@ namespace OpenMetaverse CapsClient request = new CapsClient(RegistrationApiCaps); request.OnComplete += new CapsClient.CompleteCallback(GatherCapsResponse); - request.StartRequest(postData); + request.BeginGetResponse(postData); } private void GatherCapsResponse(CapsClient client, OSD response, Exception error) @@ -168,7 +168,7 @@ namespace OpenMetaverse CapsClient request = new CapsClient(_caps.GetErrorCodes); request.OnComplete += new CapsClient.CompleteCallback(GatherErrorMessagesResponse); - request.StartRequest(); + request.BeginGetResponse(); } private void GatherErrorMessagesResponse(CapsClient client, OSD response, Exception error) @@ -206,7 +206,7 @@ namespace OpenMetaverse CapsClient request = new CapsClient(_caps.GetLastNames); request.OnComplete += new CapsClient.CompleteCallback(GatherLastNamesResponse); - request.StartRequest(); + request.BeginGetResponse(); // FIXME: Block } @@ -250,7 +250,7 @@ namespace OpenMetaverse CapsClient request = new CapsClient(_caps.CheckName); request.OnComplete += new CapsClient.CompleteCallback(CheckNameResponse); - request.StartRequest(); + request.BeginGetResponse(); // FIXME: return false; @@ -316,7 +316,7 @@ namespace OpenMetaverse // Make the request CapsClient request = new CapsClient(_caps.CreateUser); request.OnComplete += new CapsClient.CompleteCallback(CreateUserResponse); - request.StartRequest(); + request.BeginGetResponse(); // FIXME: Block return UUID.Zero; diff --git a/OpenMetaverse.Utilities/VoiceManager.cs b/OpenMetaverse.Utilities/VoiceManager.cs index 71789868..4e3c1f1f 100644 --- a/OpenMetaverse.Utilities/VoiceManager.cs +++ b/OpenMetaverse.Utilities/VoiceManager.cs @@ -335,7 +335,7 @@ namespace OpenMetaverse.Utilities CapsClient request = new CapsClient(url); OSDMap body = new OSDMap(); request.OnComplete += new CapsClient.CompleteCallback(callback); - request.StartRequest(body); + request.BeginGetResponse(body); return true; } diff --git a/OpenMetaverse/AgentManager.cs b/OpenMetaverse/AgentManager.cs index 6685b642..bfb17454 100644 --- a/OpenMetaverse/AgentManager.cs +++ b/OpenMetaverse/AgentManager.cs @@ -1492,7 +1492,7 @@ namespace OpenMetaverse byte[] postData = StructuredData.OSDParser.SerializeLLSDXmlBytes(req); CapsClient request = new CapsClient(url); - request.StartRequest(postData); + request.BeginGetResponse(postData); } else { @@ -1527,7 +1527,7 @@ namespace OpenMetaverse byte[] postData = StructuredData.OSDParser.SerializeLLSDXmlBytes(req); CapsClient request = new CapsClient(url); - request.StartRequest(postData); + request.BeginGetResponse(postData); } else { @@ -3318,7 +3318,7 @@ namespace OpenMetaverse byte[] postData = OSDParser.SerializeLLSDXmlBytes(map); CapsClient request = new CapsClient(url); - request.StartRequest(postData); + request.BeginGetResponse(postData); } else { diff --git a/OpenMetaverse/Caps.cs b/OpenMetaverse/Caps.cs index b53fbfb0..0dbad13a 100644 --- a/OpenMetaverse/Caps.cs +++ b/OpenMetaverse/Caps.cs @@ -161,7 +161,7 @@ namespace OpenMetaverse _SeedRequest = new CapsClient(new Uri(_SeedCapsURI)); _SeedRequest.OnComplete += new CapsClient.CompleteCallback(SeedRequestCompleteHandler); - _SeedRequest.StartRequest(req); + _SeedRequest.BeginGetResponse(req); } private void SeedRequestCompleteHandler(CapsClient client, OSD result, Exception error) diff --git a/OpenMetaverse/GridManager.cs b/OpenMetaverse/GridManager.cs index 2c43af64..12728cfb 100644 --- a/OpenMetaverse/GridManager.cs +++ b/OpenMetaverse/GridManager.cs @@ -286,7 +286,7 @@ namespace OpenMetaverse CapsClient request = new CapsClient(url); request.OnComplete += new CapsClient.CompleteCallback(MapLayerResponseHandler); - request.StartRequest(body); + request.BeginGetResponse(body); } } diff --git a/OpenMetaverse/InventoryManager.cs b/OpenMetaverse/InventoryManager.cs index 5cca74d1..5572f19d 100644 --- a/OpenMetaverse/InventoryManager.cs +++ b/OpenMetaverse/InventoryManager.cs @@ -1843,7 +1843,7 @@ namespace OpenMetaverse request.OnComplete += new CapsClient.CompleteCallback(CreateItemFromAssetResponse); request.UserData = new object[] { progCallback, callback, data }; - request.StartRequest(query); + request.BeginGetResponse(query); } else { @@ -2050,7 +2050,7 @@ namespace OpenMetaverse CapsClient request = new CapsClient(url); request.OnComplete += new CapsClient.CompleteCallback(UploadNotecardAssetResponse); request.UserData = new object[2] { new KeyValuePair(callback, data), notecardID }; - request.StartRequest(postData); + request.BeginGetResponse(postData); } else { @@ -3002,7 +3002,7 @@ namespace OpenMetaverse upload.OnProgress += progCallback; upload.OnComplete += new CapsClient.CompleteCallback(CreateItemFromAssetResponse); upload.UserData = new object[] { null, callback, itemData }; - upload.StartRequest(itemData, "application/octet-stream"); + upload.BeginGetResponse(itemData, "application/octet-stream"); } else if (status == "complete") { @@ -3596,7 +3596,7 @@ namespace OpenMetaverse CapsClient upload = new CapsClient(new Uri(uploadURL)); upload.OnComplete += new CapsClient.CompleteCallback(UploadNotecardAssetResponse); upload.UserData = new object[2] { kvp, (UUID)(((object[])client.UserData)[1]) }; - upload.StartRequest(itemData, "application/octet-stream"); + upload.BeginGetResponse(itemData, "application/octet-stream"); } else if (status == "complete") { diff --git a/OpenMetaverse/Login.cs b/OpenMetaverse/Login.cs index 73eed7ff..ca1ca82a 100644 --- a/OpenMetaverse/Login.cs +++ b/OpenMetaverse/Login.cs @@ -1315,7 +1315,7 @@ namespace OpenMetaverse loginRequest.OnComplete += new CapsClient.CompleteCallback(LoginReplyLLSDHandler); loginRequest.UserData = CurrentContext; UpdateLoginStatus(LoginStatus.ConnectingToLogin, String.Format("Logging in as {0} {1}...", loginParams.FirstName, loginParams.LastName)); - loginRequest.StartRequest(OSDParser.SerializeLLSDXmlBytes(loginLLSD), "application/xml+llsd"); + loginRequest.BeginGetResponse(OSDParser.SerializeLLSDXmlBytes(loginLLSD), "application/xml+llsd"); #endregion } diff --git a/OpenMetaverse/ParcelManager.cs b/OpenMetaverse/ParcelManager.cs index 6f571031..dd4ed1d1 100644 --- a/OpenMetaverse/ParcelManager.cs +++ b/OpenMetaverse/ParcelManager.cs @@ -677,7 +677,7 @@ namespace OpenMetaverse byte[] postData = StructuredData.OSDParser.SerializeLLSDXmlBytes(body); CapsClient capsPost = new CapsClient(url); - capsPost.StartRequest(postData); + capsPost.BeginGetResponse(postData); } else diff --git a/Programs/GridProxy/GridProxy.cs b/Programs/GridProxy/GridProxy.cs index 8a33911f..b3fbe723 100644 --- a/Programs/GridProxy/GridProxy.cs +++ b/Programs/GridProxy/GridProxy.cs @@ -1100,7 +1100,7 @@ namespace GridProxy remoteComplete.Set(); } ); - loginRequest.StartRequest(content, "application/xml+llsd"); //xml+llsd + loginRequest.BeginGetResponse(content, "application/xml+llsd"); //xml+llsd remoteComplete.WaitOne(30000, false); if (response == null) { diff --git a/Programs/WinGridProxy/Form1.Designer.cs b/Programs/WinGridProxy/Form1.Designer.cs index 6e8ed2c8..1395ab27 100644 --- a/Programs/WinGridProxy/Form1.Designer.cs +++ b/Programs/WinGridProxy/Form1.Designer.cs @@ -50,10 +50,10 @@ this.label4 = new System.Windows.Forms.Label(); this.tabPageFilters = new System.Windows.Forms.TabPage(); this.splitContainer2 = new System.Windows.Forms.SplitContainer(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.grpUDPFilters = new System.Windows.Forms.GroupBox(); this.checkBox1 = new System.Windows.Forms.CheckBox(); this.checkedListBox1 = new System.Windows.Forms.CheckedListBox(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.grpCapsFilters = new System.Windows.Forms.GroupBox(); this.checkBox2 = new System.Windows.Forms.CheckBox(); this.button2 = new System.Windows.Forms.Button(); this.checkedListBox2 = new System.Windows.Forms.CheckedListBox(); @@ -85,8 +85,8 @@ this.splitContainer2.Panel1.SuspendLayout(); this.splitContainer2.Panel2.SuspendLayout(); this.splitContainer2.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); + this.grpUDPFilters.SuspendLayout(); + this.grpCapsFilters.SuspendLayout(); this.tabPageInspect.SuspendLayout(); this.tabControl2.SuspendLayout(); this.tabPageInspectorRAW.SuspendLayout(); @@ -297,28 +297,29 @@ // // splitContainer2.Panel1 // - this.splitContainer2.Panel1.Controls.Add(this.groupBox1); + this.splitContainer2.Panel1.Controls.Add(this.grpUDPFilters); // // splitContainer2.Panel2 // - this.splitContainer2.Panel2.Controls.Add(this.groupBox2); + this.splitContainer2.Panel2.Controls.Add(this.grpCapsFilters); this.splitContainer2.Size = new System.Drawing.Size(575, 350); this.splitContainer2.SplitterDistance = 289; this.splitContainer2.TabIndex = 0; // - // groupBox1 + // grpUDPFilters // - this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.grpUDPFilters.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.groupBox1.Controls.Add(this.checkBox1); - this.groupBox1.Controls.Add(this.checkedListBox1); - this.groupBox1.Location = new System.Drawing.Point(3, 3); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(280, 334); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "UDP Packets"; + this.grpUDPFilters.Controls.Add(this.checkBox1); + this.grpUDPFilters.Controls.Add(this.checkedListBox1); + this.grpUDPFilters.Enabled = false; + this.grpUDPFilters.Location = new System.Drawing.Point(3, 3); + this.grpUDPFilters.Name = "grpUDPFilters"; + this.grpUDPFilters.Size = new System.Drawing.Size(280, 334); + this.grpUDPFilters.TabIndex = 0; + this.grpUDPFilters.TabStop = false; + this.grpUDPFilters.Text = "UDP Packets"; // // checkBox1 // @@ -343,20 +344,21 @@ this.checkedListBox1.TabIndex = 0; this.checkedListBox1.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.checkedListBox1_ItemCheck); // - // groupBox2 + // grpCapsFilters // - this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.grpCapsFilters.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.groupBox2.Controls.Add(this.checkBox2); - this.groupBox2.Controls.Add(this.button2); - this.groupBox2.Controls.Add(this.checkedListBox2); - this.groupBox2.Location = new System.Drawing.Point(3, 3); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(279, 334); - this.groupBox2.TabIndex = 1; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Capabilities Messages"; + this.grpCapsFilters.Controls.Add(this.checkBox2); + this.grpCapsFilters.Controls.Add(this.button2); + this.grpCapsFilters.Controls.Add(this.checkedListBox2); + this.grpCapsFilters.Enabled = false; + this.grpCapsFilters.Location = new System.Drawing.Point(3, 3); + this.grpCapsFilters.Name = "grpCapsFilters"; + this.grpCapsFilters.Size = new System.Drawing.Size(279, 334); + this.grpCapsFilters.TabIndex = 1; + this.grpCapsFilters.TabStop = false; + this.grpCapsFilters.Text = "Capabilities Messages"; // // checkBox2 // @@ -373,7 +375,7 @@ // this.button2.Location = new System.Drawing.Point(198, 311); this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.Size = new System.Drawing.Size(75, 20); this.button2.TabIndex = 1; this.button2.Text = "Refresh"; this.button2.UseVisualStyleBackColor = true; @@ -511,35 +513,35 @@ // captureTrafficToolStripMenuItem // this.captureTrafficToolStripMenuItem.Name = "captureTrafficToolStripMenuItem"; - this.captureTrafficToolStripMenuItem.Size = new System.Drawing.Size(158, 22); + this.captureTrafficToolStripMenuItem.Size = new System.Drawing.Size(147, 22); this.captureTrafficToolStripMenuItem.Text = "Capture Traffic"; // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(155, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(144, 6); // // saveSessionsToolStripMenuItem // this.saveSessionsToolStripMenuItem.Name = "saveSessionsToolStripMenuItem"; - this.saveSessionsToolStripMenuItem.Size = new System.Drawing.Size(158, 22); + this.saveSessionsToolStripMenuItem.Size = new System.Drawing.Size(147, 22); this.saveSessionsToolStripMenuItem.Text = "Save Sessions"; // // loadSessionsToolStripMenuItem // this.loadSessionsToolStripMenuItem.Name = "loadSessionsToolStripMenuItem"; - this.loadSessionsToolStripMenuItem.Size = new System.Drawing.Size(158, 22); + this.loadSessionsToolStripMenuItem.Size = new System.Drawing.Size(147, 22); this.loadSessionsToolStripMenuItem.Text = "Load Sessions"; // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(155, 6); + this.toolStripSeparator2.Size = new System.Drawing.Size(144, 6); // // exitToolStripMenuItem // this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(158, 22); + this.exitToolStripMenuItem.Size = new System.Drawing.Size(147, 22); this.exitToolStripMenuItem.Text = "Exit"; // // Form1 @@ -566,10 +568,10 @@ this.splitContainer2.Panel1.ResumeLayout(false); this.splitContainer2.Panel2.ResumeLayout(false); this.splitContainer2.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); + this.grpUDPFilters.ResumeLayout(false); + this.grpUDPFilters.PerformLayout(); + this.grpCapsFilters.ResumeLayout(false); + this.grpCapsFilters.PerformLayout(); this.tabPageInspect.ResumeLayout(false); this.tabControl2.ResumeLayout(false); this.tabPageInspectorRAW.ResumeLayout(false); @@ -601,8 +603,8 @@ private System.Windows.Forms.SplitContainer splitContainer2; private System.Windows.Forms.CheckedListBox checkedListBox1; private System.Windows.Forms.CheckedListBox checkedListBox2; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox grpUDPFilters; + private System.Windows.Forms.GroupBox grpCapsFilters; private System.Windows.Forms.TabPage tabPageInject; private System.Windows.Forms.RichTextBox richTextBox1; private System.Windows.Forms.CheckBox checkBox1; diff --git a/Programs/WinGridProxy/Form1.cs b/Programs/WinGridProxy/Form1.cs index ad3794f1..8d8ff80a 100644 --- a/Programs/WinGridProxy/Form1.cs +++ b/Programs/WinGridProxy/Form1.cs @@ -191,6 +191,9 @@ namespace WinGridProxy proxy.Start(); IsProxyRunning = true; button1.Text = "Stop Proxy"; + + grpUDPFilters.Enabled = true; + grpCapsFilters.Enabled = true; } else if (button1.Text.StartsWith("Stop") && IsProxyRunning.Equals(true)) { @@ -200,6 +203,9 @@ namespace WinGridProxy IsProxyRunning = false; button1.Text = "Start Proxy"; textBoxProxyListenIP.Enabled = textBoxProxyPort.Enabled = textBoxLoginURL.Enabled = true; + + grpUDPFilters.Enabled = false; + grpCapsFilters.Enabled = false; } }