aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDiva Canto2010-02-26 08:46:30 -0800
committerDiva Canto2010-02-26 08:46:30 -0800
commitcc05bdf6aba5d74202cb5863a5d0f5950540e7bd (patch)
treedd6275ae206f9216bc027efcad48f0f88435f1d5
parentAdded server-side Friends in connector. Untested. (diff)
downloadopensim-SC-cc05bdf6aba5d74202cb5863a5d0f5950540e7bd.zip
opensim-SC-cc05bdf6aba5d74202cb5863a5d0f5950540e7bd.tar.gz
opensim-SC-cc05bdf6aba5d74202cb5863a5d0f5950540e7bd.tar.bz2
opensim-SC-cc05bdf6aba5d74202cb5863a5d0f5950540e7bd.tar.xz
* Friends out connector completed. Grid login retrieves friends correctly.
* Added friends configs to grid .inis
-rw-r--r--OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs241
-rw-r--r--bin/OpenSim.Server.HG.ini.example6
-rw-r--r--bin/OpenSim.Server.ini.example6
-rw-r--r--bin/config-include/Grid.ini2
-rw-r--r--bin/config-include/GridCommon.ini.example7
-rw-r--r--bin/config-include/GridHypergrid.ini2
6 files changed, 260 insertions, 4 deletions
diff --git a/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs b/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
new file mode 100644
index 0000000..b617138
--- /dev/null
+++ b/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
@@ -0,0 +1,241 @@
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.Framework.Servers.HttpServer;
37using OpenSim.Services.Interfaces;
38using FriendInfo = OpenSim.Services.Interfaces.FriendInfo;
39using OpenSim.Server.Base;
40using OpenMetaverse;
41
42namespace OpenSim.Services.Connectors
43{
44 public class FriendsServicesConnector : IFriendsService
45 {
46 private static readonly ILog m_log =
47 LogManager.GetLogger(
48 MethodBase.GetCurrentMethod().DeclaringType);
49
50 private string m_ServerURI = String.Empty;
51
52 public FriendsServicesConnector()
53 {
54 }
55
56 public FriendsServicesConnector(string serverURI)
57 {
58 m_ServerURI = serverURI.TrimEnd('/');
59 }
60
61 public FriendsServicesConnector(IConfigSource source)
62 {
63 Initialise(source);
64 }
65
66 public virtual void Initialise(IConfigSource source)
67 {
68 IConfig gridConfig = source.Configs["FriendsService"];
69 if (gridConfig == null)
70 {
71 m_log.Error("[FRIENDS CONNECTOR]: FriendsService missing from OpenSim.ini");
72 throw new Exception("Friends connector init error");
73 }
74
75 string serviceURI = gridConfig.GetString("FriendsServerURI",
76 String.Empty);
77
78 if (serviceURI == String.Empty)
79 {
80 m_log.Error("[FRIENDS CONNECTOR]: No Server URI named in section FriendsService");
81 throw new Exception("Friends connector init error");
82 }
83 m_ServerURI = serviceURI;
84 }
85
86
87 #region IFriendsService
88
89 public FriendInfo[] GetFriends(UUID PrincipalID)
90 {
91 Dictionary<string, object> sendData = new Dictionary<string, object>();
92
93 sendData["PRINCIPALID"] = PrincipalID.ToString();
94 sendData["METHOD"] = "getfriends";
95
96 string reqString = ServerUtils.BuildQueryString(sendData);
97
98 try
99 {
100 string reply = SynchronousRestFormsRequester.MakeRequest("POST",
101 m_ServerURI + "/friends",
102 reqString);
103 if (reply != string.Empty)
104 {
105 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
106
107 if (replyData != null)
108 {
109 if (replyData.ContainsKey("result") && (replyData["result"].ToString().ToLower() == "null"))
110 {
111 return new FriendInfo[0];
112 }
113
114 List<FriendInfo> finfos = new List<FriendInfo>();
115 Dictionary<string, object>.ValueCollection finfosList = replyData.Values;
116 //m_log.DebugFormat("[FRIENDS CONNECTOR]: get neighbours returned {0} elements", rinfosList.Count);
117 foreach (object f in finfosList)
118 {
119 if (f is Dictionary<string, object>)
120 {
121 FriendInfo finfo = new FriendInfo((Dictionary<string, object>)f);
122 finfos.Add(finfo);
123 }
124 else
125 m_log.DebugFormat("[FRIENDS CONNECTOR]: GetFriends {0} received invalid response type {1}",
126 PrincipalID, f.GetType());
127 }
128
129 // Success
130 return finfos.ToArray();
131 }
132
133 else
134 m_log.DebugFormat("[FRIENDS CONNECTOR]: GetFriends {0} received null response",
135 PrincipalID);
136
137 }
138 }
139 catch (Exception e)
140 {
141 m_log.DebugFormat("[FRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
142 }
143
144 return new FriendInfo[0];
145
146 }
147
148 public bool StoreFriend(UUID PrincipalID, string Friend, int flags)
149 {
150 FriendInfo finfo = new FriendInfo();
151 finfo.PrincipalID = PrincipalID;
152 finfo.Friend = Friend;
153 finfo.TheirFlags = flags;
154
155 Dictionary<string, object> sendData = finfo.ToKeyValuePairs();
156
157 sendData["METHOD"] = "storefriend";
158
159 string reqString = ServerUtils.BuildQueryString(sendData);
160
161 string reply = string.Empty;
162 try
163 {
164 reply = SynchronousRestFormsRequester.MakeRequest("POST",
165 m_ServerURI + "/friends",
166 ServerUtils.BuildQueryString(sendData));
167 }
168 catch (Exception e)
169 {
170 m_log.DebugFormat("[FRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
171 return false;
172 }
173
174 if (reply != string.Empty)
175 {
176 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
177
178 if ((replyData != null) && replyData.ContainsKey("Result") && (replyData["Result"] != null))
179 {
180 bool success = false;
181 Boolean.TryParse(replyData["Result"].ToString(), out success);
182 return success;
183 }
184 else
185 m_log.DebugFormat("[FRIENDS CONNECTOR]: StoreFriend {0} {1} received null response",
186 PrincipalID, Friend);
187 }
188 else
189 m_log.DebugFormat("[FRIENDS CONNECTOR]: StoreFriend received null reply");
190
191 return false;
192
193 }
194
195 public bool Delete(UUID PrincipalID, string Friend)
196 {
197 Dictionary<string, object> sendData = new Dictionary<string, object>();
198 sendData["PRINCIPALID"] = PrincipalID.ToString();
199 sendData["FRIENDS"] = Friend;
200 sendData["METHOD"] = "deletefriend";
201
202 string reqString = ServerUtils.BuildQueryString(sendData);
203
204 string reply = string.Empty;
205 try
206 {
207 reply = SynchronousRestFormsRequester.MakeRequest("POST",
208 m_ServerURI + "/friends",
209 ServerUtils.BuildQueryString(sendData));
210 }
211 catch (Exception e)
212 {
213 m_log.DebugFormat("[FRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
214 return false;
215 }
216
217 if (reply != string.Empty)
218 {
219 Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
220
221 if ((replyData != null) && replyData.ContainsKey("Result") && (replyData["Result"] != null))
222 {
223 bool success = false;
224 Boolean.TryParse(replyData["Result"].ToString(), out success);
225 return success;
226 }
227 else
228 m_log.DebugFormat("[FRIENDS CONNECTOR]: DeleteFriend {0} {1} received null response",
229 PrincipalID, Friend);
230 }
231 else
232 m_log.DebugFormat("[FRIENDS CONNECTOR]: DeleteFriend received null reply");
233
234 return false;
235
236 }
237
238 #endregion
239
240 }
241}
diff --git a/bin/OpenSim.Server.HG.ini.example b/bin/OpenSim.Server.HG.ini.example
index 732d123..97c2e06 100644
--- a/bin/OpenSim.Server.HG.ini.example
+++ b/bin/OpenSim.Server.HG.ini.example
@@ -11,7 +11,7 @@
11;; 11;;
12 12
13[Startup] 13[Startup]
14ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003/OpenSim.Server.Handlers.dll:InventoryServiceInConnector,8002/OpenSim.Server.Handlers.dll:FreeswitchServerConnector,8003/OpenSim.Server.Handlers.dll:GridServiceConnector,8003/OpenSim.Server.Handlers.dll:GridInfoServerInConnector,8003/OpenSim.Server.Handlers.dll:AuthenticationServiceConnector,8002/OpenSim.Server.Handlers.dll:OpenIdServerConnector,8003/OpenSim.Server.Handlers.dll:AvatarServiceConnector,8002/OpenSim.Server.Handlers.dll:LLLoginServiceInConnector,8003/OpenSim.Server.Handlers.dll:PresenceServiceConnector,8003/OpenSim.Server.Handlers.dll:UserAccountServiceConnector,8002/OpenSim.Server.Handlers.dll:GatekeeperServiceInConnector,8002/OpenSim.Server.Handlers.dll:UserAgentServerConnector,HGInventoryService@8002/OpenSim.Server.Handlers.dll:HGInventoryServiceInConnector,8002/OpenSim.Server.Handlers.dll:AssetServiceConnector" 14ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003/OpenSim.Server.Handlers.dll:InventoryServiceInConnector,8002/OpenSim.Server.Handlers.dll:FreeswitchServerConnector,8003/OpenSim.Server.Handlers.dll:GridServiceConnector,8003/OpenSim.Server.Handlers.dll:GridInfoServerInConnector,8003/OpenSim.Server.Handlers.dll:AuthenticationServiceConnector,8002/OpenSim.Server.Handlers.dll:OpenIdServerConnector,8003/OpenSim.Server.Handlers.dll:AvatarServiceConnector,8002/OpenSim.Server.Handlers.dll:LLLoginServiceInConnector,8003/OpenSim.Server.Handlers.dll:PresenceServiceConnector,8003/OpenSim.Server.Handlers.dll:UserAccountServiceConnector,8003/OpenSim.Server.Handlers.dll:FriendsServiceConnector,8002/OpenSim.Server.Handlers.dll:GatekeeperServiceInConnector,8002/OpenSim.Server.Handlers.dll:UserAgentServerConnector,HGInventoryService@8002/OpenSim.Server.Handlers.dll:HGInventoryServiceInConnector,8002/OpenSim.Server.Handlers.dll:AssetServiceConnector"
15 15
16; * This is common for all services, it's the network setup for the entire 16; * This is common for all services, it's the network setup for the entire
17; * server instance, if none if specified above 17; * server instance, if none if specified above
@@ -102,6 +102,10 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
102 ; for the server connector 102 ; for the server connector
103 LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService" 103 LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService"
104 104
105[FriendsService]
106 ; for the server connector
107 LocalServiceModule = "OpenSim.Services.FriendsService.dll:FriendsService"
108
105[LibraryService] 109[LibraryService]
106 LibraryName = "OpenSim Library" 110 LibraryName = "OpenSim Library"
107 DefaultLibrary = "./inventory/Libraries.xml" 111 DefaultLibrary = "./inventory/Libraries.xml"
diff --git a/bin/OpenSim.Server.ini.example b/bin/OpenSim.Server.ini.example
index e6508b1..e822e83 100644
--- a/bin/OpenSim.Server.ini.example
+++ b/bin/OpenSim.Server.ini.example
@@ -11,7 +11,7 @@
11; * 11; *
12[Startup] 12[Startup]
13 13
14ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003/OpenSim.Server.Handlers.dll:InventoryServiceInConnector,8002/OpenSim.Server.Handlers.dll:FreeswitchServerConnector,8003/OpenSim.Server.Handlers.dll:GridServiceConnector,8002/OpenSim.Server.Handlers.dll:GridInfoServerInConnector,8003/OpenSim.Server.Handlers.dll:AuthenticationServiceConnector,8002/OpenSim.Server.Handlers.dll:OpenIdServerConnector,8003/OpenSim.Server.Handlers.dll:AvatarServiceConnector,8002/OpenSim.Server.Handlers.dll:LLLoginServiceInConnector,8003/OpenSim.Server.Handlers.dll:PresenceServiceConnector,8003/OpenSim.Server.Handlers.dll:UserAccountServiceConnector" 14ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003/OpenSim.Server.Handlers.dll:InventoryServiceInConnector,8002/OpenSim.Server.Handlers.dll:FreeswitchServerConnector,8003/OpenSim.Server.Handlers.dll:GridServiceConnector,8002/OpenSim.Server.Handlers.dll:GridInfoServerInConnector,8003/OpenSim.Server.Handlers.dll:AuthenticationServiceConnector,8002/OpenSim.Server.Handlers.dll:OpenIdServerConnector,8003/OpenSim.Server.Handlers.dll:AvatarServiceConnector,8002/OpenSim.Server.Handlers.dll:LLLoginServiceInConnector,8003/OpenSim.Server.Handlers.dll:PresenceServiceConnector,8003/OpenSim.Server.Handlers.dll:UserAccountServiceConnector,8003/OpenSim.Server.Handlers.dll:FriendsServiceConnector"
15 15
16; * This is common for all services, it's the network setup for the entire 16; * This is common for all services, it's the network setup for the entire
17; * server instance, if none if specified above 17; * server instance, if none if specified above
@@ -104,6 +104,10 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
104 ; for the server connector 104 ; for the server connector
105 LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService" 105 LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService"
106 106
107[FriendsService]
108 ; for the server connector
109 LocalServiceModule = "OpenSim.Services.FriendsService.dll:FriendsService"
110
107[LibraryService] 111[LibraryService]
108 LibraryName = "OpenSim Library" 112 LibraryName = "OpenSim Library"
109 DefaultLibrary = "./inventory/Libraries.xml" 113 DefaultLibrary = "./inventory/Libraries.xml"
diff --git a/bin/config-include/Grid.ini b/bin/config-include/Grid.ini
index a656e7b..9dff325 100644
--- a/bin/config-include/Grid.ini
+++ b/bin/config-include/Grid.ini
@@ -36,4 +36,4 @@
36 DefaultLibrary = "./inventory/Libraries.xml" 36 DefaultLibrary = "./inventory/Libraries.xml"
37 37
38[Friends] 38[Friends]
39 Connector = "OpenSim.Services.Connectors.dll:FriendsServiceConnector" 39 Connector = "OpenSim.Services.Connectors.dll:FriendsServicesConnector"
diff --git a/bin/config-include/GridCommon.ini.example b/bin/config-include/GridCommon.ini.example
index a62868e..4717561 100644
--- a/bin/config-include/GridCommon.ini.example
+++ b/bin/config-include/GridCommon.ini.example
@@ -46,6 +46,13 @@
46 ; 46 ;
47 AuthenticationServerURI = "http://mygridserver.com:8003" 47 AuthenticationServerURI = "http://mygridserver.com:8003"
48 48
49[FriendsService]
50 ;
51 ; change this to your grid-wide friends server
52 ;
53 FriendsServerURI = "http://mygridserver.com:8003"
54
55
49[Modules] 56[Modules]
50 ;; Choose 0 or 1 cache modules, and the corresponding config file, if it exists. 57 ;; Choose 0 or 1 cache modules, and the corresponding config file, if it exists.
51 ;; Copy the config .example file into your own .ini file and change configs there 58 ;; Copy the config .example file into your own .ini file and change configs there
diff --git a/bin/config-include/GridHypergrid.ini b/bin/config-include/GridHypergrid.ini
index 36cefdc..b567817 100644
--- a/bin/config-include/GridHypergrid.ini
+++ b/bin/config-include/GridHypergrid.ini
@@ -42,4 +42,4 @@
42 AllowHypergridMapSearch = true 42 AllowHypergridMapSearch = true
43 43
44[Friends] 44[Friends]
45 Connector = "OpenSim.Services.Connectors.dll:FriendsServiceConnector" 45 Connector = "OpenSim.Services.Connectors.dll:FriendsServicesConnector"