OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
HomeAgentHandlers.cs
Go to the documentation of this file.
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;
39 using OpenSim.Framework;
40 using OpenSim.Framework.Servers.HttpServer;
41 using OpenSim.Server.Handlers.Simulation;
43 
44 using OpenMetaverse;
45 using OpenMetaverse.StructuredData;
46 using Nini.Config;
47 using log4net;
48 
49 
50 namespace OpenSim.Server.Handlers.Hypergrid
51 {
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 
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);
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 
101  {
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 source, GridRegion gatekeeper, GridRegion destination,
121  AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, EntityTransferContext ctx, out string reason)
122  {
123  return m_UserAgentService.LoginAgentToGrid(source, aCircuit, gatekeeper, destination, fromLogin, out reason);
124  }
125 
126  }
127 
129  {
130  public string host;
131  public int port;
132  public string gatekeeperServerURI;
133  public string destinationServerURI;
134 
135  }
136 
137 }
HomeAgentHandler(IUserAgentService userAgentService, string loginServerIP, bool proxy)
override void UnpackData(OSDMap args, AgentDestinationData d, Hashtable request)
OpenMetaverse.StructuredData.OSDMap OSDMap
override AgentDestinationData CreateAgentDestinationData()
Circuit data for an agent. Connection information shared between regions that accept UDP connections ...
OpenSim.Services.Interfaces.GridRegion GridRegion
override bool CreateAgent(GridRegion source, GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, EntityTransferContext ctx, out string reason)
OpenSim.Server.Handlers.Simulation.Utils Utils
override GridRegion ExtractGatekeeper(AgentDestinationData d)