aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/Connectors/Friends/FriendsServicesConnector.cs
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-05-09 23:25:01 +0100
committerJustin Clark-Casey (justincc)2012-05-09 23:25:01 +0100
commitd8a78374aa11c5460d6e58a6f4110fca61dfded4 (patch)
tree4214094c092eeff11f2dcd60f71cfc294ab887be /OpenSim/Services/Connectors/Friends/FriendsServicesConnector.cs
parentImprove logging on the prim inventory script asset request path for future use. (diff)
downloadopensim-SC_OLD-d8a78374aa11c5460d6e58a6f4110fca61dfded4.zip
opensim-SC_OLD-d8a78374aa11c5460d6e58a6f4110fca61dfded4.tar.gz
opensim-SC_OLD-d8a78374aa11c5460d6e58a6f4110fca61dfded4.tar.bz2
opensim-SC_OLD-d8a78374aa11c5460d6e58a6f4110fca61dfded4.tar.xz
Where necessary, rename OpenSim/Services/Connectors/*.cs files to reflect the actual class names.
This is usually because the file name was singular (*Service*) but the class name was plural (*Services*). This is to make configuration easier rather than having to look in the c# code itself to find the slightly different name of the connector. This does not affect existing configuration since the files are being renamed rather than the classes.
Diffstat (limited to 'OpenSim/Services/Connectors/Friends/FriendsServicesConnector.cs')
-rw-r--r--OpenSim/Services/Connectors/Friends/FriendsServicesConnector.cs267
1 files changed, 267 insertions, 0 deletions
diff --git a/OpenSim/Services/Connectors/Friends/FriendsServicesConnector.cs b/OpenSim/Services/Connectors/Friends/FriendsServicesConnector.cs
new file mode 100644
index 0000000..b1dd84e
--- /dev/null
+++ b/OpenSim/Services/Connectors/Friends/FriendsServicesConnector.cs
@@ -0,0 +1,267 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using log4net;
29using System;
30using System.Collections.Generic;
31using System.IO;
32using System.Reflection;
33using Nini.Config;
34using OpenSim.Framework;
35using OpenSim.Framework.Communications;
36using OpenSim.Services.Interfaces;
37using FriendInfo = OpenSim.Services.Interfaces.FriendInfo;
38using OpenSim.Server.Base;
39using OpenMetaverse;
40
41namespace OpenSim.Services.Connectors.Friends
42{
43 public class FriendsServicesConnector : IFriendsService
44 {
45 private static readonly ILog m_log =
46 LogManager.GetLogger(
47 MethodBase.GetCurrentMethod().DeclaringType);
48
49 private string m_ServerURI = String.Empty;
50
51 public FriendsServicesConnector()
52 {
53 }
54
55 public FriendsServicesConnector(string serverURI)
56 {
57 m_ServerURI = serverURI.TrimEnd('/');
58 }
59
60 public FriendsServicesConnector(IConfigSource source)
61 {
62 Initialise(source);
63 }
64
65 public virtual void Initialise(IConfigSource source)
66 {
67 IConfig gridConfig = source.Configs["FriendsService"];
68 if (gridConfig == null)
69 {
70 m_log.Error("[FRIENDS SERVICE CONNECTOR]: FriendsService missing from OpenSim.ini");
71 throw new Exception("Friends connector init error");
72 }
73
74 string serviceURI = gridConfig.GetString("FriendsServerURI",
75 String.Empty);
76
77 if (serviceURI == String.Empty)
78 {
79 m_log.Error("[FRIENDS SERVICE CONNECTOR]: No Server URI named in section FriendsService");
80 throw new Exception("Friends connector init error");
81 }
82 m_ServerURI = serviceURI;
83 }
84
85
86 #region IFriendsService
87
88 public FriendInfo[] GetFriends(UUID PrincipalID)
89 {
90 Dictionary<string, object> sendData = new Dictionary<string, object>();
91
92 sendData["PRINCIPALID"] = PrincipalID.ToString();
93 sendData["METHOD"] = "getfriends";
94
95 return GetFriends(sendData, PrincipalID.ToString());
96 }
97
98 public FriendInfo[] GetFriends(string PrincipalID)
99 {
100 Dictionary<string, object> sendData = new Dictionary<string, object>();
101
102 sendData["PRINCIPALID"] = PrincipalID;
103 sendData["METHOD"] = "getfriends_string";
104
105 return GetFriends(sendData, PrincipalID);
106 }
107
108 protected FriendInfo[] GetFriends(Dictionary<string, object> sendData, string PrincipalID)
109 {
110 string reqString = ServerUtils.BuildQueryString(sendData);
111 string uri = m_ServerURI + "/friends";
112
113 try
114 {
115 string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
116 if (reply != string.Empty)
117 {
118 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
119
120 if (replyData != null)
121 {
122 if (replyData.ContainsKey("result") && (replyData["result"].ToString().ToLower() == "null"))
123 {
124 return new FriendInfo[0];
125 }
126
127 List<FriendInfo> finfos = new List<FriendInfo>();
128 Dictionary<string, object>.ValueCollection finfosList = replyData.Values;
129 //m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: get neighbours returned {0} elements", rinfosList.Count);
130 foreach (object f in finfosList)
131 {
132 if (f is Dictionary<string, object>)
133 {
134 FriendInfo finfo = new FriendInfo((Dictionary<string, object>)f);
135 finfos.Add(finfo);
136 }
137 else
138 m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: GetFriends {0} received invalid response type {1}",
139 PrincipalID, f.GetType());
140 }
141
142 // Success
143 return finfos.ToArray();
144 }
145 else
146 m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: GetFriends {0} received null response",
147 PrincipalID);
148
149 }
150 }
151 catch (Exception e)
152 {
153 m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
154 }
155
156 return new FriendInfo[0];
157
158 }
159
160 public bool StoreFriend(string PrincipalID, string Friend, int flags)
161 {
162
163 Dictionary<string, object> sendData = ToKeyValuePairs(PrincipalID, Friend, flags);
164
165 sendData["METHOD"] = "storefriend";
166
167 string reply = string.Empty;
168 string uri = m_ServerURI + "/friends";
169 try
170 {
171 reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
172 }
173 catch (Exception e)
174 {
175 m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
176 return false;
177 }
178
179 if (reply != string.Empty)
180 {
181 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
182
183 if ((replyData != null) && replyData.ContainsKey("Result") && (replyData["Result"] != null))
184 {
185 bool success = false;
186 Boolean.TryParse(replyData["Result"].ToString(), out success);
187 return success;
188 }
189 else
190 m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: StoreFriend {0} {1} received null response",
191 PrincipalID, Friend);
192 }
193 else
194 m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: StoreFriend received null reply");
195
196 return false;
197
198 }
199
200 public bool Delete(string PrincipalID, string Friend)
201 {
202 Dictionary<string, object> sendData = new Dictionary<string, object>();
203 sendData["PRINCIPALID"] = PrincipalID.ToString();
204 sendData["FRIEND"] = Friend;
205 sendData["METHOD"] = "deletefriend_string";
206
207 return Delete(sendData, PrincipalID, Friend);
208 }
209
210 public bool Delete(UUID PrincipalID, string Friend)
211 {
212 Dictionary<string, object> sendData = new Dictionary<string, object>();
213 sendData["PRINCIPALID"] = PrincipalID.ToString();
214 sendData["FRIEND"] = Friend;
215 sendData["METHOD"] = "deletefriend";
216
217 return Delete(sendData, PrincipalID.ToString(), Friend);
218 }
219
220 public bool Delete(Dictionary<string, object> sendData, string PrincipalID, string Friend)
221 {
222 string reply = string.Empty;
223 string uri = m_ServerURI + "/friends";
224 try
225 {
226 reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
227 }
228 catch (Exception e)
229 {
230 m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
231 return false;
232 }
233
234 if (reply != string.Empty)
235 {
236 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
237
238 if ((replyData != null) && replyData.ContainsKey("Result") && (replyData["Result"] != null))
239 {
240 bool success = false;
241 Boolean.TryParse(replyData["Result"].ToString(), out success);
242 return success;
243 }
244 else
245 m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: DeleteFriend {0} {1} received null response",
246 PrincipalID, Friend);
247 }
248 else
249 m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: DeleteFriend received null reply");
250
251 return false;
252 }
253
254 #endregion
255
256 public Dictionary<string, object> ToKeyValuePairs(string principalID, string friend, int flags)
257 {
258 Dictionary<string, object> result = new Dictionary<string, object>();
259 result["PrincipalID"] = principalID;
260 result["Friend"] = friend;
261 result["MyFlags"] = flags;
262
263 return result;
264 }
265
266 }
267} \ No newline at end of file