clockwerk-opensim-stable – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 vero 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  
28 using System;
29 using System.Collections;
30 using System.IO;
31 using System.Reflection;
32 using System.Net;
33 using System.Text;
34  
35 using OpenSim.Server.Base;
36 using OpenSim.Server.Handlers.Base;
37 using OpenSim.Services.Interfaces;
38 using GridRegion = OpenSim.Services.Interfaces.GridRegion;
39 using OpenSim.Framework;
40 using OpenSim.Framework.Servers.HttpServer;
41 using OpenSim.Server.Handlers.Simulation;
42 using Utils = OpenSim.Server.Handlers.Simulation.Utils;
43  
44 using OpenMetaverse;
45 using OpenMetaverse.StructuredData;
46 using Nini.Config;
47 using log4net;
48  
49  
50 namespace OpenSim.Server.Handlers.Hypergrid
51 {
52 public class HomeAgentHandler : AgentPostHandler
53 {
54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
55 private IUserAgentService m_UserAgentService;
56  
57 private string m_LoginServerIP;
58  
59 public HomeAgentHandler(IUserAgentService userAgentService, string loginServerIP, bool proxy) :
60 base("/homeagent")
61 {
62 m_UserAgentService = userAgentService;
63 m_LoginServerIP = loginServerIP;
64 m_Proxy = proxy;
65 }
66  
67 protected override AgentDestinationData CreateAgentDestinationData()
68 {
69 return new ExtendedAgentDestinationData();
70 }
71  
72 protected override void UnpackData(OSDMap args, AgentDestinationData d, Hashtable request)
73 {
74 base.UnpackData(args, d, request);
75 ExtendedAgentDestinationData data = (ExtendedAgentDestinationData)d;
76 try
77 {
78 if (args.ContainsKey("gatekeeper_host") && args["gatekeeper_host"] != null)
79 data.host = args["gatekeeper_host"].AsString();
80 if (args.ContainsKey("gatekeeper_port") && args["gatekeeper_port"] != null)
81 Int32.TryParse(args["gatekeeper_port"].AsString(), out data.port);
82 if (args.ContainsKey("gatekeeper_serveruri") && args["gatekeeper_serveruri"] != null)
83 data.gatekeeperServerURI = args["gatekeeper_serveruri"];
84 if (args.ContainsKey("destination_serveruri") && args["destination_serveruri"] != null)
85 data.destinationServerURI = args["destination_serveruri"];
86  
87 }
88 catch (InvalidCastException)
89 {
90 m_log.ErrorFormat("[HOME AGENT HANDLER]: Bad cast in UnpackData");
91 }
92  
93 string callerIP = GetCallerIP(request);
94 // Verify if this call came from the login server
95 if (callerIP == m_LoginServerIP)
96 data.fromLogin = true;
97  
98 }
99  
100 protected override GridRegion ExtractGatekeeper(AgentDestinationData d)
101 {
102 if (d is ExtendedAgentDestinationData)
103 {
104 ExtendedAgentDestinationData data = (ExtendedAgentDestinationData)d;
105 GridRegion gatekeeper = new GridRegion();
106 gatekeeper.ServerURI = data.gatekeeperServerURI;
107 gatekeeper.ExternalHostName = data.host;
108 gatekeeper.HttpPort = (uint)data.port;
109 gatekeeper.InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
110  
111 return gatekeeper;
112 }
113 else
114 m_log.WarnFormat("[HOME AGENT HANDLER]: Wrong data type");
115  
116 return null;
117 }
118  
119  
120 protected override bool CreateAgent(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, out string reason)
121 {
122 return m_UserAgentService.LoginAgentToGrid(aCircuit, gatekeeper, destination, fromLogin, out reason);
123 }
124  
125 }
126  
127 public class ExtendedAgentDestinationData : AgentDestinationData
128 {
129 public string host;
130 public int port;
131 public string gatekeeperServerURI;
132 public string destinationServerURI;
133  
134 }
135  
136 }