diff --git a/LibreMetaverse.Utilities/RegistrationApi.cs b/LibreMetaverse.Utilities/RegistrationApi.cs index b515a40c..2e705693 100644 --- a/LibreMetaverse.Utilities/RegistrationApi.cs +++ b/LibreMetaverse.Utilities/RegistrationApi.cs @@ -138,7 +138,7 @@ namespace OpenMetaverse var request = new CapsClient(RegistrationApiCaps); request.OnComplete += GatherCapsResponse; - request.BeginGetResponse(postData, "application/x-www-form-urlencoded", REQUEST_TIMEOUT); + request.BeginGetResponse(postData, CapsBase.POST, "application/x-www-form-urlencoded", REQUEST_TIMEOUT); } private void GatherCapsResponse(CapsClient client, OSD response, Exception error) diff --git a/LibreMetaverse.Utilities/VoiceManager.cs b/LibreMetaverse.Utilities/VoiceManager.cs index 10e311d2..7a1b95ca 100644 --- a/LibreMetaverse.Utilities/VoiceManager.cs +++ b/LibreMetaverse.Utilities/VoiceManager.cs @@ -314,7 +314,7 @@ namespace OpenMetaverse.Utilities var request = new CapsClient(url); var body = new OSDMap(); request.OnComplete += callback; - request.BeginGetResponse(body, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(body, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); return true; } diff --git a/LibreMetaverse/AgentManager.cs b/LibreMetaverse/AgentManager.cs index 5d3d7167..92d0ab73 100644 --- a/LibreMetaverse/AgentManager.cs +++ b/LibreMetaverse/AgentManager.cs @@ -1631,7 +1631,7 @@ namespace OpenMetaverse var request = new CapsClient(offlineMsgsCap); request.OnComplete += OfflineMessageHandlerCallback; - request.BeginGetResponse(null, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(null, CapsBase.GET, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } /// @@ -1924,7 +1924,7 @@ namespace OpenMetaverse if (request != null) { ChatSessionAcceptInvitation acceptInvite = new ChatSessionAcceptInvitation {SessionID = session_id}; - request.BeginGetResponse(acceptInvite.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(acceptInvite.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); lock (GroupChatSessions.Dictionary) if (!GroupChatSessions.ContainsKey(session_id)) @@ -1963,7 +1963,7 @@ namespace OpenMetaverse startConference.SessionID = tmp_session_id; - request.BeginGetResponse(startConference.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(startConference.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { @@ -3776,7 +3776,7 @@ namespace OpenMetaverse NewDisplayName = newName }; - request.BeginGetResponse(msg.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(msg.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } /// @@ -3795,7 +3795,7 @@ namespace OpenMetaverse }; CapsClient request = Client.Network.CurrentSim.Caps.CreateCapsClient("UpdateAgentLanguage"); - request?.BeginGetResponse(msg.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request?.BeginGetResponse(msg.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } catch (Exception ex) { @@ -3857,7 +3857,7 @@ namespace OpenMetaverse OSDMap prefs = new OSDMap {["max"] = access}; req["access_prefs"] = prefs; - request.BeginGetResponse(req, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(req, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } /// @@ -3896,7 +3896,7 @@ namespace OpenMetaverse var postData = new OSDMap { ["hover_height"] = hoverHeight }; - request.BeginGetResponse(postData, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(postData, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } #endregion Misc @@ -4769,7 +4769,7 @@ namespace OpenMetaverse AgentID = memberID }; - request.BeginGetResponse(req.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(req.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { diff --git a/LibreMetaverse/AssetManager.cs b/LibreMetaverse/AssetManager.cs index 3972dccd..409a9baf 100644 --- a/LibreMetaverse/AssetManager.cs +++ b/LibreMetaverse/AssetManager.cs @@ -1126,7 +1126,7 @@ namespace OpenMetaverse Logger.Log("Bake upload failed during asset upload", Helpers.LogLevel.Warning, Client); callback(UUID.Zero); }; - upload.BeginGetResponse(textureData, "application/octet-stream", Client.Settings.CAPS_TIMEOUT); + upload.BeginGetResponse(textureData, CapsBase.POST, "application/octet-stream", Client.Settings.CAPS_TIMEOUT); return; } } @@ -1135,7 +1135,7 @@ namespace OpenMetaverse Logger.Log("Bake upload failed during uploader retrieval", Helpers.LogLevel.Warning, Client); callback(UUID.Zero); }; - request.BeginGetResponse(new OSDMap(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(new OSDMap(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { diff --git a/LibreMetaverse/AvatarManager.cs b/LibreMetaverse/AvatarManager.cs index 7d380d78..79e0b3e0 100644 --- a/LibreMetaverse/AvatarManager.cs +++ b/LibreMetaverse/AvatarManager.cs @@ -734,7 +734,7 @@ namespace OpenMetaverse callback(false, null, null); } }; - cap.BeginGetResponse(null, string.Empty, Client.Settings.CAPS_TIMEOUT); + cap.BeginGetResponse(null, CapsBase.GET, null, Client.Settings.CAPS_TIMEOUT); } /// diff --git a/LibreMetaverse/Capabilities/CapsBase.cs b/LibreMetaverse/Capabilities/CapsBase.cs index f4ac3da1..8f3da079 100644 --- a/LibreMetaverse/Capabilities/CapsBase.cs +++ b/LibreMetaverse/Capabilities/CapsBase.cs @@ -1,6 +1,6 @@ /* * Copyright (c) 2006-2016, openmetaverse.co - * Copyright (c) 2019, Cinderblocks Design Co. + * Copyright (c) 2019-2021, Sjofn LLC. * All rights reserved. * * - Redistribution and use in source and binary forms, with or without @@ -35,6 +35,14 @@ namespace OpenMetaverse.Http { public static class CapsBase { + #region http methods + public const string GET = "GET"; + public const string POST = "POST"; + public const string PUT = "PUT"; + public const string DELETE = "DELETE"; + public const string PATCH = "PATCH"; // rfc 5789 + #endregion http methods + public delegate void OpenWriteEventHandler(HttpWebRequest request); public delegate void DownloadProgressEventHandler(HttpWebRequest request, HttpWebResponse response, int bytesReceived, int totalBytesToReceive); public delegate void RequestCompletedEventHandler(HttpWebRequest request, HttpWebResponse response, byte[] responseData, Exception error); @@ -65,7 +73,17 @@ namespace OpenMetaverse.Http } } - public static HttpWebRequest UploadDataAsync(Uri address, X509Certificate2 clientCert, string contentType, byte[] data, + public static HttpWebRequest GetStringAsync(Uri address, X509Certificate2 clientCert, int millisecondsTimeout, + DownloadProgressEventHandler downloadProgressCallback, RequestCompletedEventHandler completedCallback) + { + // Create the request + HttpWebRequest request = SetupRequest(address, clientCert); + request.Method = GET; + DownloadDataAsync(request, millisecondsTimeout, downloadProgressCallback, completedCallback); + return request; + } + + public static HttpWebRequest PostDataAsync(Uri address, X509Certificate2 clientCert, string contentType, byte[] data, int millisecondsTimeout, OpenWriteEventHandler openWriteCallback, DownloadProgressEventHandler downloadProgressCallback, RequestCompletedEventHandler completedCallback) { @@ -74,7 +92,29 @@ namespace OpenMetaverse.Http request.ContentLength = data.Length; if (!string.IsNullOrEmpty(contentType)) request.ContentType = contentType; - request.Method = "POST"; + request.Method = POST; + + // Create an object to hold all of the state for this request + var state = new RequestState(request, data, millisecondsTimeout, openWriteCallback, + downloadProgressCallback, completedCallback); + + // Start the request for a stream to upload to + IAsyncResult result = request.BeginGetRequestStream(OpenWrite, state); + // Register a timeout for the request + ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, TimeoutCallback, state, millisecondsTimeout, true); + + return request; + } + public static HttpWebRequest PutDataAsync(Uri address, X509Certificate2 clientCert, string contentType, byte[] data, + int millisecondsTimeout, OpenWriteEventHandler openWriteCallback, DownloadProgressEventHandler downloadProgressCallback, + RequestCompletedEventHandler completedCallback) + { + // Create the request + var request = SetupRequest(address, clientCert); + request.ContentLength = data.Length; + if (!string.IsNullOrEmpty(contentType)) + request.ContentType = contentType; + request.Method = PUT; // Create an object to hold all of the state for this request var state = new RequestState(request, data, millisecondsTimeout, openWriteCallback, @@ -88,13 +128,49 @@ namespace OpenMetaverse.Http return request; } - public static HttpWebRequest DownloadStringAsync(Uri address, X509Certificate2 clientCert, int millisecondsTimeout, - DownloadProgressEventHandler downloadProgressCallback, RequestCompletedEventHandler completedCallback) + public static HttpWebRequest DeleteDataAsync(Uri address, X509Certificate2 clientCert, string contentType, byte[] data, + int millisecondsTimeout, OpenWriteEventHandler openWriteCallback, DownloadProgressEventHandler downloadProgressCallback, + RequestCompletedEventHandler completedCallback) { // Create the request - HttpWebRequest request = SetupRequest(address, clientCert); - request.Method = "GET"; - DownloadDataAsync(request, millisecondsTimeout, downloadProgressCallback, completedCallback); + var request = SetupRequest(address, clientCert); + request.ContentLength = data.Length; + if (!string.IsNullOrEmpty(contentType)) + request.ContentType = contentType; + request.Method = DELETE; + + // Create an object to hold all of the state for this request + var state = new RequestState(request, data, millisecondsTimeout, openWriteCallback, + downloadProgressCallback, completedCallback); + + // Start the request for a stream to upload to + IAsyncResult result = request.BeginGetRequestStream(OpenWrite, state); + // Register a timeout for the request + ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, TimeoutCallback, state, millisecondsTimeout, true); + + return request; + } + + public static HttpWebRequest PatchDataAsync(Uri address, X509Certificate2 clientCert, string contentType, byte[] data, + int millisecondsTimeout, OpenWriteEventHandler openWriteCallback, DownloadProgressEventHandler downloadProgressCallback, + RequestCompletedEventHandler completedCallback) + { + // Create the request + var request = SetupRequest(address, clientCert); + request.ContentLength = data.Length; + if (!string.IsNullOrEmpty(contentType)) + request.ContentType = contentType; + request.Method = PATCH; + + // Create an object to hold all of the state for this request + var state = new RequestState(request, data, millisecondsTimeout, openWriteCallback, + downloadProgressCallback, completedCallback); + + // Start the request for a stream to upload to + IAsyncResult result = request.BeginGetRequestStream(OpenWrite, state); + // Register a timeout for the request + ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, TimeoutCallback, state, millisecondsTimeout, true); + return request; } diff --git a/LibreMetaverse/Capabilities/CapsClient.cs b/LibreMetaverse/Capabilities/CapsClient.cs index 7a6403b2..aa8ea562 100644 --- a/LibreMetaverse/Capabilities/CapsClient.cs +++ b/LibreMetaverse/Capabilities/CapsClient.cs @@ -71,10 +71,10 @@ namespace OpenMetaverse.Http public void BeginGetResponse(int millisecondsTimeout) { - BeginGetResponse(null, null, millisecondsTimeout); + BeginGetResponse(null, CapsBase.GET, null, millisecondsTimeout); } - public void BeginGetResponse(OSD data, OSDFormat format, int millisecondsTimeout) + public void BeginGetResponse(OSD data, string method, OSDFormat format, int millisecondsTimeout) { byte[] postData; string contentType; @@ -96,10 +96,10 @@ namespace OpenMetaverse.Http break; } - BeginGetResponse(postData, contentType, millisecondsTimeout); + BeginGetResponse(postData, method, contentType, millisecondsTimeout); } - public void BeginGetResponse(byte[] postData, string contentType, int millisecondsTimeout) + public void BeginGetResponse(byte[] postData, string method, string contentType, int millisecondsTimeout) { _PostData = postData; _ContentType = contentType; @@ -110,18 +110,29 @@ namespace OpenMetaverse.Http _Request = null; } - if (postData == null) + if (postData == null || method == CapsBase.GET) { - // GET - //Logger.Log.Debug("[CapsClient] GET " + _Address); - _Request = CapsBase.DownloadStringAsync(_Address, _ClientCert, millisecondsTimeout, DownloadProgressHandler, + _Request = CapsBase.GetStringAsync(_Address, _ClientCert, millisecondsTimeout, DownloadProgressHandler, RequestCompletedHandler); } - else + else if (method == CapsBase.POST) { - // POST - //Logger.Log.Debug("[CapsClient] POST (" + postData.Length + " bytes) " + _Address); - _Request = CapsBase.UploadDataAsync(_Address, _ClientCert, contentType, postData, millisecondsTimeout, null, + _Request = CapsBase.PostDataAsync(_Address, _ClientCert, contentType, postData, millisecondsTimeout, null, + DownloadProgressHandler, RequestCompletedHandler); + } + else if (method == CapsBase.PUT) + { + _Request = CapsBase.PutDataAsync(_Address, _ClientCert, contentType, postData, millisecondsTimeout, null, + DownloadProgressHandler, RequestCompletedHandler); + } + else if (method == CapsBase.DELETE) + { + _Request = CapsBase.DeleteDataAsync(_Address, _ClientCert, contentType, postData, millisecondsTimeout, null, + DownloadProgressHandler, RequestCompletedHandler); + } + else if (method == CapsBase.PATCH) + { + _Request = CapsBase.PatchDataAsync(_Address, _ClientCert, contentType, postData, millisecondsTimeout, null, DownloadProgressHandler, RequestCompletedHandler); } } @@ -135,14 +146,14 @@ namespace OpenMetaverse.Http public OSD GetResponse(OSD data, OSDFormat format, int millisecondsTimeout) { - BeginGetResponse(data, format, millisecondsTimeout); + BeginGetResponse(data, CapsBase.POST, format, millisecondsTimeout); _ResponseEvent.WaitOne(millisecondsTimeout, false); return _Response; } - public OSD GetResponse(byte[] postData, string contentType, int millisecondsTimeout) + public OSD GetResponse(byte[] postData, string method, string contentType, int millisecondsTimeout) { - BeginGetResponse(postData, contentType, millisecondsTimeout); + BeginGetResponse(postData, method, contentType, millisecondsTimeout); _ResponseEvent.WaitOne(millisecondsTimeout, false); return _Response; } diff --git a/LibreMetaverse/Capabilities/EventQueueClient.cs b/LibreMetaverse/Capabilities/EventQueueClient.cs index 5e2b93dc..596db752 100644 --- a/LibreMetaverse/Capabilities/EventQueueClient.cs +++ b/LibreMetaverse/Capabilities/EventQueueClient.cs @@ -73,7 +73,7 @@ namespace OpenMetaverse.Http byte[] postData = OSDParser.SerializeLLSDXmlBytes(request); - _Request = CapsBase.UploadDataAsync(_Address, null, REQUEST_CONTENT_TYPE, postData, REQUEST_TIMEOUT, OpenWriteHandler, null, RequestCompletedHandler); + _Request = CapsBase.PostDataAsync(_Address, null, REQUEST_CONTENT_TYPE, postData, REQUEST_TIMEOUT, OpenWriteHandler, null, RequestCompletedHandler); } public void Stop(bool immediate) @@ -211,7 +211,7 @@ namespace OpenMetaverse.Http // Resume the connection. The event handler for the connection opening // just sets class _Request variable to the current HttpWebRequest - CapsBase.UploadDataAsync(_Address, null, REQUEST_CONTENT_TYPE, postData, REQUEST_TIMEOUT, + CapsBase.PostDataAsync(_Address, null, REQUEST_CONTENT_TYPE, postData, REQUEST_TIMEOUT, delegate(HttpWebRequest newRequest) { _Request = newRequest; }, null, RequestCompletedHandler); // If the event queue is dead at this point, turn it off since diff --git a/LibreMetaverse/Caps.cs b/LibreMetaverse/Caps.cs index 17e003bd..f5ab4ef9 100644 --- a/LibreMetaverse/Caps.cs +++ b/LibreMetaverse/Caps.cs @@ -258,7 +258,7 @@ namespace OpenMetaverse _SeedRequest = new CapsClient(new Uri(_SeedCapsURI), "SeedCaps"); _SeedRequest.OnComplete += SeedRequestCompleteHandler; - _SeedRequest.BeginGetResponse(req, OSDFormat.Xml, Simulator.Client.Settings.CAPS_TIMEOUT); + _SeedRequest.BeginGetResponse(req, CapsBase.POST, OSDFormat.Xml, Simulator.Client.Settings.CAPS_TIMEOUT); } private void SeedRequestCompleteHandler(CapsClient client, OSD result, Exception error) diff --git a/LibreMetaverse/FriendsManager.cs b/LibreMetaverse/FriendsManager.cs index 4a2ce3b0..a2453251 100644 --- a/LibreMetaverse/FriendsManager.cs +++ b/LibreMetaverse/FriendsManager.cs @@ -491,7 +491,7 @@ namespace OpenMetaverse /// /// Accept a friendship request /// - /// agentID of avatatar to form friendship with + /// agentID of avatar to form friendship with /// imSessionID of the friendship request message public void AcceptFriendship(UUID fromAgentID, UUID imSessionID) { @@ -520,11 +520,11 @@ namespace OpenMetaverse } /// - /// Accept friendship request. Only to be used if rerquest was sent via Offline Msg cap + /// Accept friendship request. Only to be used if request was sent via Offline Msg cap /// This can be determined by the presence of a /// value in /// - /// agentID of avatatar to form friendship with + /// agentID of avatar to form friendship with public void AcceptFriendshipCapability(UUID fromAgentID) { Uri acceptFriendshipCap = Client.Network.CurrentSim.Caps.CapabilityURI("AcceptFriendship"); @@ -533,11 +533,13 @@ namespace OpenMetaverse Logger.Log("AcceptFriendship capability not found.", Helpers.LogLevel.Warning); return; } - UriBuilder builder = new UriBuilder(acceptFriendshipCap); - // Second Life has some infintely stupid escaped agent name as part of the uri query. - // Hopefully we don't need it because it makes no goddamn sense at all. Period, but just in case: - // ?from={fromAgentID}&agent_name=\"This%20Sucks\" - builder.Query = $"from={fromAgentID}"; + UriBuilder builder = new UriBuilder(acceptFriendshipCap) + { + // Second Life has some infintely stupid escaped agent name as part of the uri query. + // Hopefully we don't need it because it makes no goddamn sense at all. Period, but just in case: + // ?from={fromAgentID}&agent_name=\"This%20Sucks\" + Query = $"from={fromAgentID}" + }; acceptFriendshipCap = builder.Uri; var request = new CapsClient(acceptFriendshipCap); @@ -571,7 +573,7 @@ namespace OpenMetaverse }; - request.BeginGetResponse(body, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(body, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } /// @@ -591,6 +593,53 @@ namespace OpenMetaverse FriendRequests.Remove(fromAgentID); } + /// + /// Decline friendship request. Only to be used if request was sent via Offline Msg cap + /// This can be determined by the presence of a + /// value in + /// + /// of friend + public void DeclineFriendshipCap(UUID fromAgentID) + { + Uri declineFriendshipCap = Client.Network.CurrentSim.Caps.CapabilityURI("DeclineFriendship"); + if (declineFriendshipCap == null) + { + Logger.Log("DeclineFriendship capability not found.", Helpers.LogLevel.Warning); + return; + } + UriBuilder builder = new UriBuilder(declineFriendshipCap) + { + Query = $"from={fromAgentID}" + }; + declineFriendshipCap = builder.Uri; + + var request = new CapsClient(declineFriendshipCap); + var body = new OSD(); + request.OnComplete += delegate (CapsClient client, OSD result, Exception error) + { + if (error != null) + { + Logger.Log($"AcceptFriendship failed for {fromAgentID}. ({error.Message})", + Helpers.LogLevel.Warning); + return; + } + + if (result != null) + { + var resMap = result as OSDMap; + if (!(resMap.ContainsKey("success") && resMap["success"].AsBoolean())) { return; } + + if (FriendRequests.ContainsKey(fromAgentID)) + { + FriendRequests.Remove(fromAgentID); + } + } + + + }; + request.BeginGetResponse(body, CapsBase.DELETE, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + } + /// /// Overload: Offer friendship to an avatar. /// diff --git a/LibreMetaverse/GridManager.cs b/LibreMetaverse/GridManager.cs index d3c682b7..8880af70 100644 --- a/LibreMetaverse/GridManager.cs +++ b/LibreMetaverse/GridManager.cs @@ -430,7 +430,7 @@ namespace OpenMetaverse OSDMap body = new OSDMap {["Flags"] = OSD.FromInteger((int) layer)}; request.OnComplete += new CapsClient.CompleteCallback(MapLayerResponseHandler); - request.BeginGetResponse(body, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(body, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } } diff --git a/LibreMetaverse/GroupManager.cs b/LibreMetaverse/GroupManager.cs index 6a9ef66d..b888606d 100644 --- a/LibreMetaverse/GroupManager.cs +++ b/LibreMetaverse/GroupManager.cs @@ -1058,7 +1058,7 @@ namespace OpenMetaverse }; OSDMap requestData = new OSDMap(1) {["group_id"] = @group}; - req.BeginGetResponse(requestData, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT * 4); + req.BeginGetResponse(requestData, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT * 4); return requestID; } @@ -1737,7 +1737,7 @@ namespace OpenMetaverse } OSDRequest["ban_ids"] = banIDs; - req.BeginGetResponse(OSDRequest, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + req.BeginGetResponse(OSDRequest, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } diff --git a/LibreMetaverse/ImportExport/ModelUploader.cs b/LibreMetaverse/ImportExport/ModelUploader.cs index d8d6f6f1..a5ad47e0 100644 --- a/LibreMetaverse/ImportExport/ModelUploader.cs +++ b/LibreMetaverse/ImportExport/ModelUploader.cs @@ -259,7 +259,7 @@ namespace OpenMetaverse.ImportExport callback?.Invoke(result); }; - request.BeginGetResponse(req, OSDFormat.Xml, 3 * 60 * 1000); + request.BeginGetResponse(req, CapsBase.POST, OSDFormat.Xml, 3 * 60 * 1000); } @@ -285,7 +285,7 @@ namespace OpenMetaverse.ImportExport callback?.Invoke(res); }; - request.BeginGetResponse(AssetResources(true), OSDFormat.Xml, 60 * 1000); + request.BeginGetResponse(AssetResources(true), CapsBase.POST, OSDFormat.Xml, 60 * 1000); } diff --git a/LibreMetaverse/InventoryManager.cs b/LibreMetaverse/InventoryManager.cs index 4d7d7957..882e64b8 100644 --- a/LibreMetaverse/InventoryManager.cs +++ b/LibreMetaverse/InventoryManager.cs @@ -629,7 +629,7 @@ namespace OpenMetaverse OSDRequest["items"] = items; - request.BeginGetResponse(OSDRequest, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(OSDRequest, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } } /// @@ -932,7 +932,7 @@ namespace OpenMetaverse } OSDMap req = new OSDMap(1) { ["folders"] = requestedFolders }; - request.BeginGetResponse(req, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(req, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } catch (Exception ex) { @@ -1794,7 +1794,7 @@ namespace OpenMetaverse request.OnComplete += CreateItemFromAssetResponse; request.UserData = new object[] { callback, data, Client.Settings.CAPS_TIMEOUT, query }; - request.BeginGetResponse(query, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(query, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } @@ -2002,7 +2002,7 @@ namespace OpenMetaverse ObjectID = objectID }; - request.BeginGetResponse(message.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(message.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { @@ -2156,7 +2156,7 @@ namespace OpenMetaverse // Make the request request.OnComplete += UploadInventoryAssetResponse; request.UserData = new object[] { new KeyValuePair(callback, data), notecardID }; - request.BeginGetResponse(query, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(query, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { @@ -2189,7 +2189,7 @@ namespace OpenMetaverse // Make the request request.OnComplete += UploadInventoryAssetResponse; request.UserData = new object[] { new KeyValuePair(callback, data), notecardID }; - request.BeginGetResponse(query, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(query, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { @@ -2217,7 +2217,7 @@ namespace OpenMetaverse // Make the request request.OnComplete += UploadInventoryAssetResponse; request.UserData = new object[] { new KeyValuePair(callback, data), gestureID }; - request.BeginGetResponse(query, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(query, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { @@ -2246,7 +2246,7 @@ namespace OpenMetaverse request.OnComplete += new CapsClient.CompleteCallback(UpdateScriptAgentInventoryResponse); request.UserData = new object[2] { new KeyValuePair(callback, data), itemID }; - request.BeginGetResponse(msg.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(msg.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { @@ -2279,7 +2279,7 @@ namespace OpenMetaverse request.OnComplete += new CapsClient.CompleteCallback(UpdateScriptAgentInventoryResponse); request.UserData = new object[2] { new KeyValuePair(callback, data), itemID }; - request.BeginGetResponse(msg.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(msg.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { @@ -3653,7 +3653,7 @@ namespace OpenMetaverse CapsClient upload = new CapsClient(new Uri(uploadURL), "CreateItemFromAsset"); upload.OnComplete += CreateItemFromAssetResponse; upload.UserData = new object[] { callback, itemData, millisecondsTimeout, request }; - upload.BeginGetResponse(itemData, "application/octet-stream", millisecondsTimeout); + upload.BeginGetResponse(itemData, CapsBase.POST, "application/octet-stream", millisecondsTimeout); } else if (status == "complete") { @@ -3732,7 +3732,7 @@ namespace OpenMetaverse CapsClient upload = new CapsClient(uploadURL, "UploadItemResponse"); upload.OnComplete += UploadInventoryAssetResponse; upload.UserData = new object[2] { kvp, (UUID)(((object[])client.UserData)[1]) }; - upload.BeginGetResponse(itemData, "application/octet-stream", Client.Settings.CAPS_TIMEOUT); + upload.BeginGetResponse(itemData, CapsBase.POST, "application/octet-stream", Client.Settings.CAPS_TIMEOUT); } else { @@ -3803,7 +3803,7 @@ namespace OpenMetaverse CapsClient upload = new CapsClient(new Uri(uploadURL), "ScriptAgentInventoryResponse"); upload.OnComplete += UpdateScriptAgentInventoryResponse; upload.UserData = new object[2] { kvp, (UUID)(((object[])client.UserData)[1]) }; - upload.BeginGetResponse(itemData, "application/octet-stream", Client.Settings.CAPS_TIMEOUT); + upload.BeginGetResponse(itemData, CapsBase.POST, "application/octet-stream", Client.Settings.CAPS_TIMEOUT); } else if (status == "complete" && callback != null) { diff --git a/LibreMetaverse/Login.cs b/LibreMetaverse/Login.cs index 974f73d8..5d5c8a35 100644 --- a/LibreMetaverse/Login.cs +++ b/LibreMetaverse/Login.cs @@ -1225,7 +1225,7 @@ namespace OpenMetaverse loginRequest.UserData = CurrentContext; UpdateLoginStatus(LoginStatus.ConnectingToLogin, $"Logging in as {loginParams.FirstName} {loginParams.LastName}..."); - loginRequest.BeginGetResponse(loginLLSD, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + loginRequest.BeginGetResponse(loginLLSD, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); #endregion } diff --git a/LibreMetaverse/ObjectManager.cs b/LibreMetaverse/ObjectManager.cs index f6829f4e..6f2721fe 100644 --- a/LibreMetaverse/ObjectManager.cs +++ b/LibreMetaverse/ObjectManager.cs @@ -1696,7 +1696,7 @@ namespace OpenMetaverse } }; - request.BeginGetResponse(req.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(req.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { @@ -1725,7 +1725,7 @@ namespace OpenMetaverse Logger.Log("ObjectMediaUpdate: " + error.Message, Helpers.LogLevel.Error, Client); } }; - request.BeginGetResponse(req.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(req.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { @@ -1781,7 +1781,7 @@ namespace OpenMetaverse } }; - request.BeginGetResponse(req.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(req.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { diff --git a/LibreMetaverse/ParcelManager.cs b/LibreMetaverse/ParcelManager.cs index 1fdf446e..e7101ce8 100644 --- a/LibreMetaverse/ParcelManager.cs +++ b/LibreMetaverse/ParcelManager.cs @@ -650,7 +650,7 @@ namespace OpenMetaverse OSDMap body = req.Serialize(); - request.BeginGetResponse(body, OSDFormat.Xml, simulator.Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(body, CapsBase.POST, OSDFormat.Xml, simulator.Client.Settings.CAPS_TIMEOUT); } else { @@ -1671,9 +1671,9 @@ namespace OpenMetaverse try { - OSD result = request.GetResponse(msg.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + OSDMap result = request.GetResponse(msg.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT) as OSDMap; RemoteParcelRequestReply response = new RemoteParcelRequestReply(); - response.Deserialize((OSDMap)result); + response.Deserialize(result); return response.ParcelID; } catch (Exception) @@ -1731,7 +1731,7 @@ namespace OpenMetaverse }; LandResourcesRequest param = new LandResourcesRequest {ParcelID = parcelID}; - request.BeginGetResponse(param.Serialize(), OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(param.Serialize(), CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } catch (Exception ex) diff --git a/LibreMetaverse/UserReport.cs b/LibreMetaverse/UserReport.cs index 68d3026e..aa6f49fe 100644 --- a/LibreMetaverse/UserReport.cs +++ b/LibreMetaverse/UserReport.cs @@ -165,7 +165,7 @@ namespace LibreMetaverse } }; - request.BeginGetResponse(report, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); + request.BeginGetResponse(report, CapsBase.POST, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } else { diff --git a/LibreMetaverse/Voice/VoiceControl.cs b/LibreMetaverse/Voice/VoiceControl.cs index 328a2f37..a8ab7540 100644 --- a/LibreMetaverse/Voice/VoiceControl.cs +++ b/LibreMetaverse/Voice/VoiceControl.cs @@ -34,6 +34,7 @@ using System.Threading; using OpenMetaverse; using OpenMetaverse.StructuredData; +using OpenMetaverse.Http; namespace OpenMetaverse.Voice { @@ -352,13 +353,13 @@ namespace OpenMetaverse.Voice void RequestVoiceProvision(System.Uri cap) { - Http.CapsClient capClient = new Http.CapsClient(cap, "ReqVoiceProvision"); + CapsClient capClient = new Http.CapsClient(cap, "ReqVoiceProvision"); capClient.OnComplete += cClient_OnComplete; OSD postData = new OSD(); // STEP 0 Logger.Log("Requesting voice capability", Helpers.LogLevel.Info); - capClient.BeginGetResponse(postData, OSDFormat.Xml, 10000); + capClient.BeginGetResponse(postData, CapsBase.POST, OSDFormat.Xml, 10000); } /// @@ -886,13 +887,13 @@ namespace OpenMetaverse.Voice { Logger.Log("Requesting region voice info", Helpers.LogLevel.Info); - parcelCap = new OpenMetaverse.Http.CapsClient(cap, "RequestParcelInfo"); + parcelCap = new CapsClient(cap, "RequestParcelInfo"); parcelCap.OnComplete += pCap_OnComplete; OSD postData = new OSD(); currentParcelCap = cap; - parcelCap.BeginGetResponse(postData, OSDFormat.Xml, 10000); + parcelCap.BeginGetResponse(postData, CapsBase.POST, OSDFormat.Xml, 10000); } /// diff --git a/Programs/GridProxy/GridProxy.cs b/Programs/GridProxy/GridProxy.cs index cfc69aee..a5a35016 100644 --- a/Programs/GridProxy/GridProxy.cs +++ b/Programs/GridProxy/GridProxy.cs @@ -1217,7 +1217,7 @@ namespace GridProxy remoteComplete.Set(); } ); - loginRequest.BeginGetResponse(content, "application/llsd+xml", 1000 * 100); + loginRequest.BeginGetResponse(content, CapsBase.POST, "application/llsd+xml", 1000 * 100); remoteComplete.WaitOne(1000 * 100, false); if (response == null)