aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim.RegionServer/OpenSimMain.cs59
-rw-r--r--OpenSim.RegionServer/RegionInfo.cs12
-rw-r--r--OpenSim.RegionServer/SimClient.cs293
-rw-r--r--OpenSim.RegionServer/world/Avatar.cs6
-rw-r--r--OpenSim.RegionServer/world/AvatarUpdate.cs47
-rw-r--r--OpenSim.RegionServer/world/World.cs6
6 files changed, 228 insertions, 195 deletions
diff --git a/OpenSim.RegionServer/OpenSimMain.cs b/OpenSim.RegionServer/OpenSimMain.cs
index 7f2032d..ea6088b 100644
--- a/OpenSim.RegionServer/OpenSimMain.cs
+++ b/OpenSim.RegionServer/OpenSimMain.cs
@@ -67,7 +67,7 @@ namespace OpenSim
67 //private Dictionary<uint, SimClient> ClientThreads = new Dictionary<uint, SimClient>(); 67 //private Dictionary<uint, SimClient> ClientThreads = new Dictionary<uint, SimClient>();
68 private Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>(); 68 private Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>();
69 private DateTime startuptime; 69 private DateTime startuptime;
70 public RegionInfo regionData; 70 private RegionInfo regionData;
71 71
72 public Socket Server; 72 public Socket Server;
73 private IPEndPoint ServerIncoming; 73 private IPEndPoint ServerIncoming;
@@ -206,23 +206,29 @@ namespace OpenSim
206 agent_data.firstname = (string)requestData["firstname"]; 206 agent_data.firstname = (string)requestData["firstname"];
207 agent_data.lastname = (string)requestData["lastname"]; 207 agent_data.lastname = (string)requestData["lastname"];
208 agent_data.AgentID = new LLUUID((string)requestData["agent_id"]); 208 agent_data.AgentID = new LLUUID((string)requestData["agent_id"]);
209 agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); 209 agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
210 if(requestData.ContainsKey("child_agent") && requestData["child_agent"].Equals("1")) { 210 if (requestData.ContainsKey("child_agent") && requestData["child_agent"].Equals("1"))
211 agent_data.child=true; 211 {
212 } else { 212 agent_data.child = true;
213 agent_data.startpos = new LLVector3(Convert.ToUInt32(requestData["startpos_x"]),Convert.ToUInt32(requestData["startpos_y"]),Convert.ToUInt32(requestData["startpos_z"])); 213 }
214 agent_data.child=false; 214 else
215 } 215 {
216 216 agent_data.startpos = new LLVector3(Convert.ToUInt32(requestData["startpos_x"]), Convert.ToUInt32(requestData["startpos_y"]), Convert.ToUInt32(requestData["startpos_z"]));
217 if(((RemoteGridBase)gridServer).agentcircuits.ContainsKey((uint)agent_data.circuitcode)) { 217 agent_data.child = false;
218 ((RemoteGridBase)gridServer).agentcircuits[(uint)agent_data.circuitcode]=agent_data; 218 }
219 } else { 219
220 ((RemoteGridBase)gridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data); 220 if (((RemoteGridBase)gridServer).agentcircuits.ContainsKey((uint)agent_data.circuitcode))
221 } 221 {
222 ((RemoteGridBase)gridServer).agentcircuits[(uint)agent_data.circuitcode] = agent_data;
223 }
224 else
225 {
226 ((RemoteGridBase)gridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data);
227 }
222 228
223 return new XmlRpcResponse(); 229 return new XmlRpcResponse();
224 }); 230 });
225 231
226 httpServer.AddXmlRPCHandler("agent_crossing", 232 httpServer.AddXmlRPCHandler("agent_crossing",
227 delegate(XmlRpcRequest request) 233 delegate(XmlRpcRequest request)
228 { 234 {
@@ -230,18 +236,19 @@ namespace OpenSim
230 AgentCircuitData agent_data = new AgentCircuitData(); 236 AgentCircuitData agent_data = new AgentCircuitData();
231 agent_data.firstname = (string)requestData["firstname"]; 237 agent_data.firstname = (string)requestData["firstname"];
232 agent_data.lastname = (string)requestData["lastname"]; 238 agent_data.lastname = (string)requestData["lastname"];
233 agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); 239 agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
234 agent_data.startpos = new LLVector3(Single.Parse((string)requestData["pos_x"]),Single.Parse((string)requestData["pos_y"]),Single.Parse((string)requestData["pos_z"])); 240 agent_data.startpos = new LLVector3(Single.Parse((string)requestData["pos_x"]), Single.Parse((string)requestData["pos_y"]), Single.Parse((string)requestData["pos_z"]));
235 241
236 if(((RemoteGridBase)gridServer).agentcircuits.ContainsKey((uint)agent_data.circuitcode)) { 242 if (((RemoteGridBase)gridServer).agentcircuits.ContainsKey((uint)agent_data.circuitcode))
237 ((RemoteGridBase)gridServer).agentcircuits[(uint)agent_data.circuitcode].firstname = agent_data.firstname; 243 {
238 ((RemoteGridBase)gridServer).agentcircuits[(uint)agent_data.circuitcode].lastname = agent_data.lastname; 244 ((RemoteGridBase)gridServer).agentcircuits[(uint)agent_data.circuitcode].firstname = agent_data.firstname;
239 ((RemoteGridBase)gridServer).agentcircuits[(uint)agent_data.circuitcode].startpos = agent_data.startpos; 245 ((RemoteGridBase)gridServer).agentcircuits[(uint)agent_data.circuitcode].lastname = agent_data.lastname;
240 } 246 ((RemoteGridBase)gridServer).agentcircuits[(uint)agent_data.circuitcode].startpos = agent_data.startpos;
247 }
241 248
242 return new XmlRpcResponse(); 249 return new XmlRpcResponse();
243 }); 250 });
244 251
245 httpServer.AddRestHandler("GET", "/simstatus/", 252 httpServer.AddRestHandler("GET", "/simstatus/",
246 delegate(string request, string path, string param) 253 delegate(string request, string path, string param)
247 { 254 {
@@ -313,7 +320,7 @@ namespace OpenSim
313 pluginAssembly = null; 320 pluginAssembly = null;
314 return config; 321 return config;
315 } 322 }
316 323
317 private void OnReceivedData(IAsyncResult result) 324 private void OnReceivedData(IAsyncResult result)
318 { 325 {
319 ipeSender = new IPEndPoint(IPAddress.Any, 0); 326 ipeSender = new IPEndPoint(IPAddress.Any, 0);
@@ -342,7 +349,7 @@ namespace OpenSim
342 { 349 {
343 isChildAgent = ((RemoteGridBase)this.GridServers.GridServer).agentcircuits[useCircuit.CircuitCode.Code].child; 350 isChildAgent = ((RemoteGridBase)this.GridServers.GridServer).agentcircuits[useCircuit.CircuitCode.Code].child;
344 } 351 }
345 SimClient newuser = new SimClient(epSender, useCircuit, LocalWorld, _packetServer.ClientThreads, AssetCache, GridServers.GridServer, this, InventoryCache, m_sandbox, isChildAgent); 352 SimClient newuser = new SimClient(epSender, useCircuit, LocalWorld, _packetServer.ClientThreads, AssetCache, GridServers.GridServer, this, InventoryCache, m_sandbox, isChildAgent, this.regionData);
346 if ((this.GridServers.UserServer != null) && (user_accounts)) 353 if ((this.GridServers.UserServer != null) && (user_accounts))
347 { 354 {
348 newuser.UserServer = this.GridServers.UserServer; 355 newuser.UserServer = this.GridServers.UserServer;
diff --git a/OpenSim.RegionServer/RegionInfo.cs b/OpenSim.RegionServer/RegionInfo.cs
index abc674f..0d5e980 100644
--- a/OpenSim.RegionServer/RegionInfo.cs
+++ b/OpenSim.RegionServer/RegionInfo.cs
@@ -44,7 +44,7 @@ namespace OpenSim
44 //we really want to keep any server connection code out of here and out of the code code 44 //we really want to keep any server connection code out of here and out of the code code
45 // and put it in the server connection classes (those inheriting from IGridServer etc) 45 // and put it in the server connection classes (those inheriting from IGridServer etc)
46 string reqtext; 46 string reqtext;
47 reqtext = "<Root>"; 47 reqtext = "<Root>";
48 reqtext += "<authkey>" + this.GridSendKey + "</authkey>"; 48 reqtext += "<authkey>" + this.GridSendKey + "</authkey>";
49 reqtext += "<sim>"; 49 reqtext += "<sim>";
50 reqtext += "<uuid>" + this.SimUUID.ToString() + "</uuid>"; 50 reqtext += "<uuid>" + this.SimUUID.ToString() + "</uuid>";
@@ -55,9 +55,9 @@ namespace OpenSim
55 reqtext += "<region_locy>" + this.RegionLocY.ToString() + "</region_locy>"; 55 reqtext += "<region_locy>" + this.RegionLocY.ToString() + "</region_locy>";
56 reqtext += "<estate_id>1</estate_id>"; 56 reqtext += "<estate_id>1</estate_id>";
57 reqtext += "</sim>"; 57 reqtext += "</sim>";
58 reqtext += "</Root>"; 58 reqtext += "</Root>";
59 59
60 byte[] reqdata = (new System.Text.ASCIIEncoding()).GetBytes(reqtext); 60 byte[] reqdata = (new System.Text.ASCIIEncoding()).GetBytes(reqtext);
61 61
62 WebRequest GridSaveReq = WebRequest.Create(this.GridURL + "sims/" + this.SimUUID.ToString()); 62 WebRequest GridSaveReq = WebRequest.Create(this.GridURL + "sims/" + this.SimUUID.ToString());
63 GridSaveReq.Method = "POST"; 63 GridSaveReq.Method = "POST";
@@ -68,11 +68,11 @@ namespace OpenSim
68 stOut.Write(reqdata,0,reqdata.Length); 68 stOut.Write(reqdata,0,reqdata.Length);
69 stOut.Close(); 69 stOut.Close();
70 70
71 WebResponse gridresp = GridSaveReq.GetResponse(); 71 WebResponse gridresp = GridSaveReq.GetResponse();
72 StreamReader stIn = new StreamReader(gridresp.GetResponseStream(), Encoding.ASCII); 72 StreamReader stIn = new StreamReader(gridresp.GetResponseStream(), Encoding.ASCII);
73 string GridResponse = stIn.ReadToEnd(); 73 string GridResponse = stIn.ReadToEnd();
74 stIn.Close(); 74 stIn.Close();
75 gridresp.Close(); 75 gridresp.Close();
76 76
77 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("RegionInfo.CS:SaveToGrid() - Grid said: " + GridResponse); 77 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("RegionInfo.CS:SaveToGrid() - Grid said: " + GridResponse);
78 } 78 }
diff --git a/OpenSim.RegionServer/SimClient.cs b/OpenSim.RegionServer/SimClient.cs
index 52074b5..b729c6c 100644
--- a/OpenSim.RegionServer/SimClient.cs
+++ b/OpenSim.RegionServer/SimClient.cs
@@ -29,7 +29,7 @@ using System.Collections;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using libsecondlife; 30using libsecondlife;
31using libsecondlife.Packets; 31using libsecondlife.Packets;
32using Nwc.XmlRpc; 32using Nwc.XmlRpc;
33using System.Net; 33using System.Net;
34using System.Net.Sockets; 34using System.Net.Sockets;
35using System.IO; 35using System.IO;
@@ -55,13 +55,13 @@ namespace OpenSim
55 public LLUUID AgentID; 55 public LLUUID AgentID;
56 public LLUUID SessionID; 56 public LLUUID SessionID;
57 public LLUUID SecureSessionID = LLUUID.Zero; 57 public LLUUID SecureSessionID = LLUUID.Zero;
58 public bool m_child; 58 public bool m_child;
59 public uint CircuitCode; 59 public uint CircuitCode;
60 public world.Avatar ClientAvatar; 60 public world.Avatar ClientAvatar;
61 private UseCircuitCodePacket cirpack; 61 private UseCircuitCodePacket cirpack;
62 public Thread ClientThread; 62 public Thread ClientThread;
63 public EndPoint userEP; 63 public EndPoint userEP;
64 public LLVector3 startpos; 64 public LLVector3 startpos;
65 private BlockingQueue<QueItem> PacketQueue; 65 private BlockingQueue<QueItem> PacketQueue;
66 private Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>(); 66 private Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>();
67 private Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>(); 67 private Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>();
@@ -82,8 +82,9 @@ namespace OpenSim
82 private IUserServer m_userServer = null; 82 private IUserServer m_userServer = null;
83 private OpenSimNetworkHandler m_application; 83 private OpenSimNetworkHandler m_application;
84 private InventoryCache m_inventoryCache; 84 private InventoryCache m_inventoryCache;
85 private bool m_sandboxMode; 85 public bool m_sandboxMode;
86 private int cachedtextureserial = 0; 86 private int cachedtextureserial = 0;
87 private RegionInfo m_regionData;
87 88
88 protected static Dictionary<PacketType, PacketMethod> PacketHandlers = new Dictionary<PacketType, PacketMethod>(); //Global/static handlers for all clients 89 protected static Dictionary<PacketType, PacketMethod> PacketHandlers = new Dictionary<PacketType, PacketMethod>(); //Global/static handlers for all clients
89 90
@@ -97,7 +98,7 @@ namespace OpenSim
97 } 98 }
98 } 99 }
99 100
100 public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, World world, Dictionary<uint, SimClient> clientThreads, AssetCache assetCache, IGridServer gridServer, OpenSimNetworkHandler application, InventoryCache inventoryCache, bool sandboxMode, bool child) 101 public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, World world, Dictionary<uint, SimClient> clientThreads, AssetCache assetCache, IGridServer gridServer, OpenSimNetworkHandler application, InventoryCache inventoryCache, bool sandboxMode, bool child, RegionInfo regionDat)
101 { 102 {
102 m_world = world; 103 m_world = world;
103 m_clientThreads = clientThreads; 104 m_clientThreads = clientThreads;
@@ -106,16 +107,20 @@ namespace OpenSim
106 m_application = application; 107 m_application = application;
107 m_inventoryCache = inventoryCache; 108 m_inventoryCache = inventoryCache;
108 m_sandboxMode = sandboxMode; 109 m_sandboxMode = sandboxMode;
109 m_child=child; 110 m_child = child;
111 m_regionData = regionDat;
110 112
111 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request"); 113 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request");
112 cirpack = initialcirpack; 114 cirpack = initialcirpack;
113 userEP = remoteEP; 115 userEP = remoteEP;
114 if(m_gridServer.GetName() == "Remote") { 116 if (m_gridServer.GetName() == "Remote")
115 this.startpos=((RemoteGridBase)m_gridServer).agentcircuits[initialcirpack.CircuitCode.Code].startpos; 117 {
116 } else { 118 this.startpos = ((RemoteGridBase)m_gridServer).agentcircuits[initialcirpack.CircuitCode.Code].startpos;
117 this.startpos=new LLVector3(128.0f,128.0f,60f); 119 }
118 } 120 else
121 {
122 this.startpos = new LLVector3(128, 128, m_world.Terrain[(int)128, (int)128] + 1.0f); // new LLVector3(128.0f, 128.0f, 60f);
123 }
119 PacketQueue = new BlockingQueue<QueItem>(); 124 PacketQueue = new BlockingQueue<QueItem>();
120 125
121 this.UploadAssets = new AgentAssetUpload(this, m_assetCache, m_inventoryCache); 126 this.UploadAssets = new AgentAssetUpload(this, m_assetCache, m_inventoryCache);
@@ -137,115 +142,128 @@ namespace OpenSim
137 this.AddLocalPacketHandler(PacketType.MultipleObjectUpdate, this.MultipleObjUpdate); 142 this.AddLocalPacketHandler(PacketType.MultipleObjectUpdate, this.MultipleObjUpdate);
138 } 143 }
139 144
140 public void CrossSimBorder(LLVector3 avatarpos) { // VERY VERY BASIC 145 public void CrossSimBorder(LLVector3 avatarpos)
141 LLVector3 newpos = avatarpos; 146 { // VERY VERY BASIC
142 uint neighbourx=((OpenSimMain)m_application).regionData.RegionLocX; 147 LLVector3 newpos = this.m_regionData.RegionLocX;
143 uint neighboury=((OpenSimMain)m_application).regionData.RegionLocY; 148 uint neighboury = this.m_regionData.RegionLocY;
144 149
145 if(avatarpos.X<0) { 150 if (avatarpos.X < 0)
146 neighbourx-=1; 151 {
147 newpos.X=254; 152 neighbourx -= 1;
148 } 153 newpos.X = 254;
149 if(avatarpos.X>255) { 154 }
150 neighbourx+=1; 155 if (avatarpos.X > 255)
151 newpos.X=1; 156 {
152 } 157 neighbourx += 1;
153 if(avatarpos.Y<0) { 158 newpos.X = 1;
154 neighboury-=1; 159 }
155 newpos.Y=254; 160 if (avatarpos.Y < 0)
156 } 161 {
157 if(avatarpos.Y>255) { 162 neighboury -= 1;
158 neighbourx+=1; 163 newpos.Y = 254;
159 newpos.Y=1; 164 }
160 } 165 if (avatarpos.Y > 255)
161 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimClient.cs:CrossSimBorder() - Crossing border to neighbouring sim at [" + neighbourx.ToString() + "," + neighboury.ToString() + "]"); 166 {
162 167 neighbourx += 1;
163 Hashtable SimParams; 168 newpos.Y = 1;
164 ArrayList SendParams; 169 }
165 XmlRpcRequest GridReq; 170 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimClient.cs:CrossSimBorder() - Crossing border to neighbouring sim at [" + neighbourx.ToString() + "," + neighboury.ToString() + "]");
166 XmlRpcResponse GridResp; 171
167 foreach(Hashtable borderingSim in ((RemoteGridBase)m_gridServer).neighbours) { 172 Hashtable SimParams;
168 if(((string)borderingSim["region_locx"]).Equals(neighbourx.ToString()) && ((string)borderingSim["region_locy"]).Equals(neighboury.ToString())) { 173 ArrayList SendParams;
169 SimParams = new Hashtable(); 174 XmlRpcRequest GridReq;
170 SimParams["firstname"] = this.ClientAvatar.firstname; 175 XmlRpcResponse GridResp;
171 SimParams["lastname"] = this.ClientAvatar.lastname; 176 foreach (Hashtable borderingSim in ((RemoteGridBase)m_gridServer).neighbours)
172 SimParams["circuit_code"] = this.CircuitCode.ToString(); 177 {
173 SimParams["pos_x"] = newpos.X.ToString(); 178 if (((string)borderingSim["region_locx"]).Equals(neighbourx.ToString()) && ((string)borderingSim["region_locy"]).Equals(neighboury.ToString()))
174 SimParams["pos_y"] = newpos.Y.ToString(); 179 {
175 SimParams["pos_z"] = newpos.Z.ToString(); 180 SimParams = new Hashtable();
176 SendParams = new ArrayList(); 181 SimParams["firstname"] = this.ClientAvatar.firstname;
177 SendParams.Add(SimParams); 182 SimParams["lastname"] = this.ClientAvatar.lastname;
178 183 SimParams["circuit_code"] = this.CircuitCode.ToString();
179 GridReq = new XmlRpcRequest("agent_crossing", SendParams); 184 SimParams["pos_x"] = newpos.X.ToString();
180 GridResp = GridReq.Send("http://" + borderingSim["sim_ip"] + ":" + borderingSim["sim_port"], 3000); 185 SimParams["pos_y"] = newpos.Y.ToString();
181 186 SimParams["pos_z"] = newpos.Z.ToString();
182 CrossedRegionPacket NewSimPack = new CrossedRegionPacket(); 187 SendParams = new ArrayList();
183 NewSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock(); 188 SendParams.Add(SimParams);
184 NewSimPack.AgentData.AgentID=this.AgentID; 189
185 NewSimPack.AgentData.SessionID=this.SessionID; 190 GridReq = new XmlRpcRequest("agent_crossing", SendParams);
186 NewSimPack.Info = new CrossedRegionPacket.InfoBlock(); 191 GridResp = GridReq.Send("http://" + borderingSim["sim_ip"] + ":" + borderingSim["sim_port"], 3000);
187 NewSimPack.Info.Position=newpos; 192
188 NewSimPack.Info.LookAt=new LLVector3(0.99f, 0.042f, 0); // copied from Avatar.cs - SHOULD BE DYNAMIC!!!!!!!!!! 193 CrossedRegionPacket NewSimPack = new CrossedRegionPacket();
189 NewSimPack.RegionData = new libsecondlife.Packets.CrossedRegionPacket.RegionDataBlock(); 194 NewSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock();
190 NewSimPack.RegionData.RegionHandle=Helpers.UIntsToLong((uint)(Convert.ToInt32(borderingSim["region_locx"]) * 256), (uint)(Convert.ToInt32(borderingSim["region_locy"]) * 256)); 195 NewSimPack.AgentData.AgentID = this.AgentID;
191 196 NewSimPack.AgentData.SessionID = this.SessionID;
192 System.Net.IPAddress neighbourIP = System.Net.IPAddress.Parse((string)borderingSim["sim_ip"]); 197 NewSimPack.Info = new CrossedRegionPacket.InfoBlock();
193 byte[] byteIP = neighbourIP.GetAddressBytes(); 198 NewSimPack.Info.Position = newpos;
194 NewSimPack.RegionData.SimIP = (uint)byteIP[3] << 24; 199 NewSimPack.Info.LookAt = new LLVector3(0.99f, 0.042f, 0); // copied from Avatar.cs - SHOULD BE DYNAMIC!!!!!!!!!!
195 NewSimPack.RegionData.SimIP += (uint)byteIP[2] << 16; 200 NewSimPack.RegionData = new libsecondlife.Packets.CrossedRegionPacket.RegionDataBlock();
196 NewSimPack.RegionData.SimIP += (uint)byteIP[1] << 8; 201 NewSimPack.RegionData.RegionHandle = Helpers.UIntsToLong((uint)(Convert.ToInt32(borderingSim["region_locx"]) * 256), (uint)(Convert.ToInt32(borderingSim["region_locy"]) * 256));
197 NewSimPack.RegionData.SimIP += (uint)byteIP[0]; 202
198 NewSimPack.RegionData.SimPort = (ushort)Convert.ToInt32(borderingSim["sim_port"]); 203 System.Net.IPAddress neighbourIP = System.Net.IPAddress.Parse((string)borderingSim["sim_ip"]);
199 NewSimPack.RegionData.SeedCapability = new byte[0]; 204 byte[] byteIP = neighbourIP.GetAddressBytes();
200 lock(PacketQueue) { 205 NewSimPack.RegionData.SimIP = (uint)byteIP[3] << 24;
201 ProcessOutPacket(NewSimPack); 206 NewSimPack.RegionData.SimIP += (uint)byteIP[2] << 16;
202 DowngradeClient(); 207 NewSimPack.RegionData.SimIP += (uint)byteIP[1] << 8;
203 } 208 NewSimPack.RegionData.SimIP += (uint)byteIP[0];
204 } 209 NewSimPack.RegionData.SimPort = (ushort)Convert.ToInt32(borderingSim["sim_port"]);
205 } 210 NewSimPack.RegionData.SeedCapability = new byte[0];
206 } 211 lock (PacketQueue)
207 212 {
208 public void UpgradeClient() { 213 ProcessOutPacket(NewSimPack);
209 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimClient.cs:UpgradeClient() - upgrading child to full agent"); 214 DowngradeClient();
210 this.m_child=false; 215 }
211 this.m_world.RemoveViewerAgent(this); 216 }
212 this.startpos=((RemoteGridBase)m_gridServer).agentcircuits[CircuitCode].startpos; 217 }
213 ((RemoteGridBase)m_gridServer).agentcircuits[CircuitCode].child=false; 218 }
214 this.InitNewClient(); 219
215 } 220 public void UpgradeClient()
216 221 {
217 public void DowngradeClient() { 222 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimClient.cs:UpgradeClient() - upgrading child to full agent");
218 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimClient.cs:UpgradeClient() - changing full agent to child"); 223 this.m_child = false;
219 this.m_child=true; 224 this.m_world.RemoveViewerAgent(this);
220 this.m_world.RemoveViewerAgent(this); 225 if (!this.m_sandboxMode)
221 this.m_world.AddViewerAgent(this); 226 {
222 } 227 this.startpos = ((RemoteGridBase)m_gridServer).agentcircuits[CircuitCode].startpos;
223 228 ((RemoteGridBase)m_gridServer).agentcircuits[CircuitCode].child = false;
224 public void KillClient() { 229 }
225 KillObjectPacket kill = new KillObjectPacket(); 230 this.InitNewClient();
226 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; 231 }
227 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); 232
228 kill.ObjectData[0].ID = this.ClientAvatar.localid; 233 public void DowngradeClient()
229 foreach (SimClient client in m_clientThreads.Values) 234 {
230 { 235 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimClient.cs:UpgradeClient() - changing full agent to child");
231 client.OutPacket(kill); 236 this.m_child = true;
232 } 237 this.m_world.RemoveViewerAgent(this);
233 if (this.m_userServer != null) 238 this.m_world.AddViewerAgent(this);
234 { 239 }
235 this.m_inventoryCache.ClientLeaving(this.AgentID, this.m_userServer); 240
236 } 241 public void KillClient()
237 else 242 {
238 { 243 KillObjectPacket kill = new KillObjectPacket();
239 this.m_inventoryCache.ClientLeaving(this.AgentID, null); 244 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
240 } 245 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
241 246 kill.ObjectData[0].ID = this.ClientAvatar.localid;
242 m_world.RemoveViewerAgent(this); 247 foreach (SimClient client in m_clientThreads.Values)
243 248 {
244 m_clientThreads.Remove(this.CircuitCode); 249 client.OutPacket(kill);
245 m_application.RemoveClientCircuit(this.CircuitCode); 250 }
246 this.ClientThread.Abort(); 251 if (this.m_userServer != null)
247 } 252 {
248 253 this.m_inventoryCache.ClientLeaving(this.AgentID, this.m_userServer);
254 }
255 else
256 {
257 this.m_inventoryCache.ClientLeaving(this.AgentID, null);
258 }
259
260 m_world.RemoveViewerAgent(this);
261
262 m_clientThreads.Remove(this.CircuitCode);
263 m_application.RemoveClientCircuit(this.CircuitCode);
264 this.ClientThread.Abort();
265 }
266
249 public static bool AddPacketHandler(PacketType packetType, PacketMethod handler) 267 public static bool AddPacketHandler(PacketType packetType, PacketMethod handler)
250 { 268 {
251 bool result = false; 269 bool result = false;
@@ -346,9 +364,9 @@ namespace OpenSim
346 switch (Pack.Type) 364 switch (Pack.Type)
347 { 365 {
348 case PacketType.CompleteAgentMovement: 366 case PacketType.CompleteAgentMovement:
349 if(this.m_child) this.UpgradeClient(); 367 if (this.m_child) this.UpgradeClient();
350 ClientAvatar.CompleteMovement(m_world); 368 ClientAvatar.CompleteMovement(m_world);
351 ClientAvatar.SendInitialPosition(); 369 ClientAvatar.SendInitialPosition();
352 break; 370 break;
353 case PacketType.RegionHandshakeReply: 371 case PacketType.RegionHandshakeReply:
354 m_world.SendLayerData(this); 372 m_world.SendLayerData(this);
@@ -595,18 +613,19 @@ namespace OpenSim
595 } 613 }
596 break; 614 break;
597 case PacketType.AgentAnimation: 615 case PacketType.AgentAnimation:
598 if(!m_child) { 616 if (!m_child)
599 AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack; 617 {
600 for (int i = 0; i < AgentAni.AnimationList.Length; i++) 618 AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack;
601 { 619 for (int i = 0; i < AgentAni.AnimationList.Length; i++)
602 if (AgentAni.AnimationList[i].StartAnim) 620 {
603 { 621 if (AgentAni.AnimationList[i].StartAnim)
604 ClientAvatar.current_anim = AgentAni.AnimationList[i].AnimID; 622 {
605 ClientAvatar.anim_seq = 1; 623 ClientAvatar.current_anim = AgentAni.AnimationList[i].AnimID;
606 ClientAvatar.SendAnimPack(); 624 ClientAvatar.anim_seq = 1;
607 } 625 ClientAvatar.SendAnimPack();
608 } 626 }
609 } 627 }
628 }
610 break; 629 break;
611 case PacketType.ObjectSelect: 630 case PacketType.ObjectSelect:
612 ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack; 631 ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack;
@@ -912,7 +931,7 @@ namespace OpenSim
912 } 931 }
913 } 932 }
914 #region Packet handlers 933 #region Packet handlers
915 934
916 protected virtual bool Logout(SimClient simClient, Packet packet) 935 protected virtual bool Logout(SimClient simClient, Packet packet)
917 { 936 {
918 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got a logout request"); 937 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got a logout request");
diff --git a/OpenSim.RegionServer/world/Avatar.cs b/OpenSim.RegionServer/world/Avatar.cs
index b6b8282..54043fc 100644
--- a/OpenSim.RegionServer/world/Avatar.cs
+++ b/OpenSim.RegionServer/world/Avatar.cs
@@ -44,7 +44,7 @@ namespace OpenSim.world
44 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)"); 44 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)");
45 ControllingClient = TheClient; 45 ControllingClient = TheClient;
46 localid = 8880000 + (this.m_world._localNumber++); 46 localid = 8880000 + (this.m_world._localNumber++);
47 Pos = ControllingClient.startpos; 47 Pos = ControllingClient.startpos;
48 visualParams = new byte[218]; 48 visualParams = new byte[218];
49 for (int i = 0; i < 218; i++) 49 for (int i = 0; i < 218; i++)
50 { 50 {
@@ -59,7 +59,7 @@ namespace OpenSim.world
59 this.Wearables[0].ItemID = LLUUID.Random(); 59 this.Wearables[0].ItemID = LLUUID.Random();
60 60
61 this.avatarAppearanceTexture = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); 61 this.avatarAppearanceTexture = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
62 62
63 } 63 }
64 64
65 public PhysicsActor PhysActor 65 public PhysicsActor PhysActor
@@ -307,7 +307,7 @@ namespace OpenSim.world
307 handshake.RegionInfo.TerrainStartHeight11 = 10; 307 handshake.RegionInfo.TerrainStartHeight11 = 10;
308 handshake.RegionInfo.SimAccess = 13; 308 handshake.RegionInfo.SimAccess = 13;
309 handshake.RegionInfo.WaterHeight = 20; 309 handshake.RegionInfo.WaterHeight = 20;
310 handshake.RegionInfo.RegionFlags = 72458694 -32; 310 handshake.RegionInfo.RegionFlags = 72458694 - 32;
311 handshake.RegionInfo.SimName = _enc.GetBytes(m_regionName + "\0"); 311 handshake.RegionInfo.SimName = _enc.GetBytes(m_regionName + "\0");
312 handshake.RegionInfo.SimOwner = new LLUUID("00000000-0000-0000-0000-000000000000"); 312 handshake.RegionInfo.SimOwner = new LLUUID("00000000-0000-0000-0000-000000000000");
313 handshake.RegionInfo.TerrainBase0 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975"); 313 handshake.RegionInfo.TerrainBase0 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975");
diff --git a/OpenSim.RegionServer/world/AvatarUpdate.cs b/OpenSim.RegionServer/world/AvatarUpdate.cs
index c2f2456..6c0ace7 100644
--- a/OpenSim.RegionServer/world/AvatarUpdate.cs
+++ b/OpenSim.RegionServer/world/AvatarUpdate.cs
@@ -59,24 +59,31 @@ namespace OpenSim.world
59 } 59 }
60 60
61 } 61 }
62 this.positionLastFrame = pos2; 62 this.positionLastFrame = pos2;
63 63
64 if(this._physActor.Position.X < 0) { 64 if (!this.ControllingClient.m_sandboxMode)
65 ControllingClient.CrossSimBorder(new LLVector3(this._physActor.Position.X,this._physActor.Position.Y,this._physActor.Position.Z)); 65 {
66 } 66 if (pos2.X < 0)
67 67 {
68 if(this._physActor.Position.Y < 0) { 68 ControllingClient.CrossSimBorder(new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z));
69 ControllingClient.CrossSimBorder(new LLVector3(this._physActor.Position.X,this._physActor.Position.Y,this._physActor.Position.Z)); 69 }
70 } 70
71 71 if (pos2.Y < 0)
72 if(this._physActor.Position.X > 255) { 72 {
73 ControllingClient.CrossSimBorder(new LLVector3(this._physActor.Position.X,this._physActor.Position.Y,this._physActor.Position.Z)); 73 ControllingClient.CrossSimBorder(new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z));
74 } 74 }
75 75
76 if(this._physActor.Position.Y > 255) { 76 if (pos2.X > 255)
77 ControllingClient.CrossSimBorder(new LLVector3(this._physActor.Position.X,this._physActor.Position.Y,this._physActor.Position.Z)); 77 {
78 } 78 ControllingClient.CrossSimBorder(new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z));
79 79 }
80
81 if (pos2.Y > 255)
82 {
83 ControllingClient.CrossSimBorder(new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z));
84 }
85 }
86
80 } 87 }
81 88
82 public ObjectUpdatePacket CreateUpdatePacket() 89 public ObjectUpdatePacket CreateUpdatePacket()
@@ -106,8 +113,8 @@ namespace OpenSim.world
106 { 113 {
107 System.Text.Encoding _enc = System.Text.Encoding.ASCII; 114 System.Text.Encoding _enc = System.Text.Encoding.ASCII;
108 //send a objectupdate packet with information about the clients avatar 115 //send a objectupdate packet with information about the clients avatar
109 116
110 ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); 117 ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
111 objupdate.RegionData.RegionHandle = m_regionHandle; 118 objupdate.RegionData.RegionHandle = m_regionHandle;
112 objupdate.RegionData.TimeDilation = 64096; 119 objupdate.RegionData.TimeDilation = 64096;
113 objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; 120 objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
diff --git a/OpenSim.RegionServer/world/World.cs b/OpenSim.RegionServer/world/World.cs
index 425a135..749305f 100644
--- a/OpenSim.RegionServer/world/World.cs
+++ b/OpenSim.RegionServer/world/World.cs
@@ -371,13 +371,13 @@ namespace OpenSim.world
371 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world"); 371 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world");
372 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake "); 372 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake ");
373 newAvatar.SendRegionHandshake(this); 373 newAvatar.SendRegionHandshake(this);
374 if(!agentClient.m_child) { 374 if(!agentClient.m_child) {
375 PhysicsVector pVec = new PhysicsVector(newAvatar.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z); 375 PhysicsVector pVec = new PhysicsVector(newAvatar.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z);
376 lock (this.LockPhysicsEngine) 376 lock (this.LockPhysicsEngine)
377 { 377 {
378 newAvatar.PhysActor = this.phyScene.AddAvatar(pVec); 378 newAvatar.PhysActor = this.phyScene.AddAvatar(pVec);
379 } 379 }
380 } 380 }
381 lock (Entities) 381 lock (Entities)
382 { 382 {
383 this.Entities.Add(agentClient.AgentID, newAvatar); 383 this.Entities.Add(agentClient.AgentID, newAvatar);
@@ -385,7 +385,7 @@ namespace OpenSim.world
385 lock (Avatars) 385 lock (Avatars)
386 { 386 {
387 this.Avatars.Add(agentClient.AgentID, newAvatar); 387 this.Avatars.Add(agentClient.AgentID, newAvatar);
388 } 388 }
389 389
390 } 390 }
391 391