aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Server/Handlers/Login
diff options
context:
space:
mode:
authorDiva Canto2009-12-31 14:59:26 -0800
committerDiva Canto2009-12-31 14:59:26 -0800
commit0ce9be653d2194877cb972cbce261eecb0cd58a8 (patch)
tree6294c927ce714d140165bb32c1a2dbd337f25ea2 /OpenSim/Server/Handlers/Login
parentMore progress on both the Simulation service and the Login service. Both stil... (diff)
downloadopensim-SC_OLD-0ce9be653d2194877cb972cbce261eecb0cd58a8.zip
opensim-SC_OLD-0ce9be653d2194877cb972cbce261eecb0cd58a8.tar.gz
opensim-SC_OLD-0ce9be653d2194877cb972cbce261eecb0cd58a8.tar.bz2
opensim-SC_OLD-0ce9be653d2194877cb972cbce261eecb0cd58a8.tar.xz
* Added the Login server handlers that were lost in yesterday's commit grief
* More beef to the LLLoginService * Better design for handling local simulation service
Diffstat (limited to 'OpenSim/Server/Handlers/Login')
-rw-r--r--OpenSim/Server/Handlers/Login/LLLoginHandlers.cs139
-rw-r--r--OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs93
2 files changed, 232 insertions, 0 deletions
diff --git a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
new file mode 100644
index 0000000..b973c11
--- /dev/null
+++ b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
@@ -0,0 +1,139 @@
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 System;
29using System.Collections;
30using System.IO;
31using System.Reflection;
32using System.Net;
33using System.Text;
34
35using OpenSim.Server.Base;
36using OpenSim.Server.Handlers.Base;
37using OpenSim.Services.Interfaces;
38using OpenSim.Framework;
39using OpenSim.Framework.Servers.HttpServer;
40
41using OpenMetaverse;
42using OpenMetaverse.StructuredData;
43using Nwc.XmlRpc;
44using Nini.Config;
45using log4net;
46
47
48namespace OpenSim.Server.Handlers.Login
49{
50 public class LLLoginHandlers
51 {
52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53
54 private ILoginService m_LocalService;
55
56 public LLLoginHandlers(ILoginService service)
57 {
58 m_LocalService = service;
59 }
60
61 public XmlRpcResponse HandleXMLRPCLogin(XmlRpcRequest request, IPEndPoint remoteClient)
62 {
63 Hashtable requestData = (Hashtable)request.Params[0];
64
65 if (requestData != null)
66 {
67 if (requestData.ContainsKey("first") && requestData["first"] != null &&
68 requestData.ContainsKey("last") && requestData["last"] != null &&
69 requestData.ContainsKey("passwd") && requestData["passwd"] != null)
70 {
71 string startLocation = string.Empty;
72 if (requestData.ContainsKey("start"))
73 startLocation = requestData["start"].ToString();
74
75 LoginResponse reply = null;
76 reply = m_LocalService.Login(requestData["first"].ToString(), requestData["last"].ToString(), requestData["passwd"].ToString(), startLocation);
77
78 XmlRpcResponse response = new XmlRpcResponse();
79 response.Value = reply.ToHashtable();
80 return response;
81
82 }
83 }
84
85 return FailedXMLRPCResponse();
86
87 }
88
89 public OSD HandleLLSDLogin(OSD request, IPEndPoint remoteClient)
90 {
91 if (request.Type == OSDType.Map)
92 {
93 OSDMap map = (OSDMap)request;
94
95 if (map.ContainsKey("first") && map.ContainsKey("last") && map.ContainsKey("passwd"))
96 {
97 string startLocation = string.Empty;
98
99 if (map.ContainsKey("start"))
100 startLocation = map["start"].AsString();
101
102 m_log.Info("[LOGIN]: LLSD Login Requested for: '" + map["first"].AsString() + "' '" + map["last"].AsString() + "' / " + startLocation);
103
104 LoginResponse reply = null;
105 reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation);
106 return reply.ToOSDMap();
107
108 }
109 }
110
111 return FailedOSDResponse();
112 }
113
114 private XmlRpcResponse FailedXMLRPCResponse()
115 {
116 Hashtable hash = new Hashtable();
117 hash["reason"] = "key";
118 hash["message"] = "Incomplete login credentials. Check your username and password.";
119 hash["login"] = "false";
120
121 XmlRpcResponse response = new XmlRpcResponse();
122 response.Value = hash;
123
124 return response;
125 }
126
127 private OSD FailedOSDResponse()
128 {
129 OSDMap map = new OSDMap();
130
131 map["reason"] = OSD.FromString("key");
132 map["message"] = OSD.FromString("Invalid login credentials. Check your username and passwd.");
133 map["login"] = OSD.FromString("false");
134
135 return map;
136 }
137 }
138
139}
diff --git a/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs b/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs
new file mode 100644
index 0000000..42ecd4d
--- /dev/null
+++ b/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs
@@ -0,0 +1,93 @@
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 System;
29using System.Collections.Generic;
30using System.Reflection;
31using log4net;
32using Nini.Config;
33using OpenSim.Server.Base;
34using OpenSim.Services.Interfaces;
35using OpenSim.Framework;
36using OpenSim.Framework.Servers.HttpServer;
37using OpenSim.Server.Handlers.Base;
38
39namespace OpenSim.Server.Handlers.Login
40{
41 public class LLLoginServiceInConnector : ServiceConnector
42 {
43 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
44
45 private ILoginService m_LoginService;
46
47 public LLLoginServiceInConnector(IConfigSource config, IHttpServer server, IScene scene) :
48 base(config, server, String.Empty)
49 {
50 string loginService = ReadLocalServiceFromConfig(config);
51
52 ISimulationService simService = scene.RequestModuleInterface<ISimulationService>();
53
54 Object[] args = new Object[] { config, simService };
55 m_LoginService = ServerUtils.LoadPlugin<ILoginService>(loginService, args);
56
57 InitializeHandlers(server);
58 }
59
60 public LLLoginServiceInConnector(IConfigSource config, IHttpServer server) :
61 base(config, server, String.Empty)
62 {
63 string loginService = ReadLocalServiceFromConfig(config);
64
65 Object[] args = new Object[] { config };
66
67 m_LoginService = ServerUtils.LoadPlugin<ILoginService>(loginService, args);
68
69 InitializeHandlers(server);
70 }
71
72 private string ReadLocalServiceFromConfig(IConfigSource config)
73 {
74 IConfig serverConfig = config.Configs["LoginService"];
75 if (serverConfig == null)
76 throw new Exception(String.Format("No section LoginService in config file"));
77
78 string loginService = serverConfig.GetString("LocalServiceModule", String.Empty);
79 if (loginService == string.Empty)
80 throw new Exception(String.Format("No LocalServiceModule for LoginService in config file"));
81
82 return loginService;
83 }
84
85 private void InitializeHandlers(IHttpServer server)
86 {
87 LLLoginHandlers loginHandlers = new LLLoginHandlers(m_LoginService);
88 server.AddXmlRPCHandler("Login_to_simulator", loginHandlers.HandleXMLRPCLogin, false);
89 server.SetDefaultLLSDHandler(loginHandlers.HandleLLSDLogin);
90 }
91
92 }
93}