Merge branch 'master' into careminster
commit
824d7190c2
346
CONTRIBUTORS.txt
346
CONTRIBUTORS.txt
|
@ -1,173 +1,173 @@
|
||||||
The following people have contributed to OpenSim (Thank you
|
The following people have contributed to OpenSim (Thank you
|
||||||
for your effort!)
|
for your effort!)
|
||||||
|
|
||||||
Add your name in here if you have committed to OpenSim
|
Add your name in here if you have committed to OpenSim
|
||||||
|
|
||||||
= Current OpenSim Developers (in very rough order of appearance) =
|
= Current OpenSim Developers (in very rough order of appearance) =
|
||||||
These folks represent the current core team for OpenSim, and are the
|
These folks represent the current core team for OpenSim, and are the
|
||||||
people that make the day to day of OpenSim happen.
|
people that make the day to day of OpenSim happen.
|
||||||
|
|
||||||
* MW (Tribal Media AB)
|
* MW (Tribal Media AB)
|
||||||
* Adam Frisby (DeepThink Pty Ltd)
|
* Adam Frisby (DeepThink Pty Ltd)
|
||||||
* MingChen (DeepThink Pty Ltd)
|
* MingChen (DeepThink Pty Ltd)
|
||||||
* lbsa71 (Tribal Media AB)
|
* lbsa71 (Tribal Media AB)
|
||||||
* Sean Dague / sdague (IBM)
|
* Sean Dague / sdague (IBM)
|
||||||
* Tedd
|
* Tedd
|
||||||
* justincc
|
* justincc
|
||||||
* Teravus (w3z)
|
* Teravus (w3z)
|
||||||
* Johan Berntsson (3Di)
|
* Johan Berntsson (3Di)
|
||||||
* Ckrinke (Charles Krinke)
|
* Ckrinke (Charles Krinke)
|
||||||
* chi11ken (Genkii)
|
* chi11ken (Genkii)
|
||||||
* adjohn (Genkii)
|
* adjohn (Genkii)
|
||||||
* Dr Scofield aka Dirk Husemann (IBM Research - Zurich)
|
* Dr Scofield aka Dirk Husemann (IBM Research - Zurich)
|
||||||
* dahlia
|
* dahlia
|
||||||
* mikem (3Di)
|
* mikem (3Di)
|
||||||
* Melanie Thielker
|
* Melanie Thielker
|
||||||
* Homer_Horwitz
|
* Homer_Horwitz
|
||||||
* idb (Ian Brown)
|
* idb (Ian Brown)
|
||||||
* Diva (Crista Lopes, University of California, Irvine)
|
* Diva (Crista Lopes, University of California, Irvine)
|
||||||
* nlin (3Di)
|
* nlin (3Di)
|
||||||
* Arthur Rodrigo S Valadares (IBM)
|
* Arthur Rodrigo S Valadares (IBM)
|
||||||
|
|
||||||
|
|
||||||
= Past Open Sim Developers =
|
= Past Open Sim Developers =
|
||||||
These folks are alumns of the OpenSim core group, but are now
|
These folks are alumns of the OpenSim core group, but are now
|
||||||
currently not active. Their great contributions helped get us to
|
currently not active. Their great contributions helped get us to
|
||||||
where we are today.
|
where we are today.
|
||||||
|
|
||||||
* Gareth
|
* Gareth
|
||||||
* Andy-
|
* Andy-
|
||||||
* MorphW
|
* MorphW
|
||||||
* CW
|
* CW
|
||||||
* Babblefrog
|
* Babblefrog
|
||||||
* Danx0r
|
* Danx0r
|
||||||
* Dalien
|
* Dalien
|
||||||
* Darok
|
* Darok
|
||||||
* Alondria
|
* Alondria
|
||||||
|
|
||||||
|
|
||||||
= Additional OpenSim Contributors =
|
= Additional OpenSim Contributors =
|
||||||
These folks have contributed code patches to OpenSim to help make it
|
These folks have contributed code patches to OpenSim to help make it
|
||||||
what it is today.
|
what it is today.
|
||||||
|
|
||||||
* aduffy70
|
* aduffy70
|
||||||
* A_Biondi
|
* A_Biondi
|
||||||
* alex_carnell
|
* alex_carnell
|
||||||
* Alan Webb (IBM)
|
* Alan Webb (IBM)
|
||||||
* BigFootAg
|
* BigFootAg
|
||||||
* BlueWall Slade
|
* BlueWall Slade
|
||||||
* brianw/Sir_Ahzz
|
* brianw/Sir_Ahzz
|
||||||
* CharlieO
|
* CharlieO
|
||||||
* ChrisDown
|
* ChrisDown
|
||||||
* Chris Yeoh (IBM)
|
* Chris Yeoh (IBM)
|
||||||
* coyled
|
* coyled
|
||||||
* Daedius
|
* Daedius
|
||||||
* Dong Jun Lan (IBM)
|
* Dong Jun Lan (IBM)
|
||||||
* DoranZemlja
|
* DoranZemlja
|
||||||
* daTwitch
|
* daTwitch
|
||||||
* devalnor-#708
|
* devalnor-#708
|
||||||
* dmiles (Daxtron Labs)
|
* dmiles (Daxtron Labs)
|
||||||
* dslake (Intel)
|
* dslake (Intel)
|
||||||
* FredoChaplin
|
* FredoChaplin
|
||||||
* Gerhard
|
* Gerhard
|
||||||
* Godfrey
|
* Godfrey
|
||||||
* Grumly57
|
* Grumly57
|
||||||
* Ewe Loon
|
* Ewe Loon
|
||||||
* Fly-Man
|
* Fly-Man
|
||||||
* Flyte Xevious
|
* Flyte Xevious
|
||||||
* Imaze Rhiano
|
* Imaze Rhiano
|
||||||
* Intimidated
|
* Intimidated
|
||||||
* Jeremy Bongio (IBM)
|
* Jeremy Bongio (IBM)
|
||||||
* jhurliman
|
* jhurliman
|
||||||
* John R Sohn (XenReborn)
|
* John R Sohn (XenReborn)
|
||||||
* jonc
|
* jonc
|
||||||
* Junta Kohime
|
* Junta Kohime
|
||||||
* Kayne
|
* Kayne
|
||||||
* Kevin Cozens
|
* Kevin Cozens
|
||||||
* kinoc (Daxtron Labs)
|
* kinoc (Daxtron Labs)
|
||||||
* Kitto Flora
|
* Kitto Flora
|
||||||
* KittyLiu
|
* KittyLiu
|
||||||
* Kurt Taylor (IBM)
|
* Kurt Taylor (IBM)
|
||||||
* lulurun
|
* lulurun
|
||||||
* M.Igarashi
|
* M.Igarashi
|
||||||
* maimedleech
|
* maimedleech
|
||||||
* Mic Bowman
|
* Mic Bowman
|
||||||
* Michelle Argus
|
* Michelle Argus
|
||||||
* Michael Cortez (The Flotsam Project, http://osflotsam.org/)
|
* Michael Cortez (The Flotsam Project, http://osflotsam.org/)
|
||||||
* Mike Osias (IBM)
|
* Mike Osias (IBM)
|
||||||
* Mike Pitman (IBM)
|
* Mike Pitman (IBM)
|
||||||
* mikkopa/_someone - RealXtend
|
* mikkopa/_someone - RealXtend
|
||||||
* Misterblue (Intel)
|
* Misterblue (Intel)
|
||||||
* Mircea Kitsune
|
* Mircea Kitsune
|
||||||
* mpallari
|
* mpallari
|
||||||
* nornalbion
|
* nornalbion
|
||||||
* Omar Vera Ustariz (IBM)
|
* Omar Vera Ustariz (IBM)
|
||||||
* openlifegrid.com
|
* openlifegrid.com
|
||||||
* otakup0pe
|
* otakup0pe
|
||||||
* ralphos
|
* ralphos
|
||||||
* RemedyTomm
|
* RemedyTomm
|
||||||
* Revolution
|
* Revolution
|
||||||
* Richard Alimi (IBM)
|
* Richard Alimi (IBM)
|
||||||
* Rick Alther (IBM)
|
* Rick Alther (IBM)
|
||||||
* Rob Smart (IBM)
|
* Rob Smart (IBM)
|
||||||
* rtomita
|
* rtomita
|
||||||
* Ruud Lathorp
|
* Ruud Lathorp
|
||||||
* SachaMagne
|
* SachaMagne
|
||||||
* Salahzar Stenvaag
|
* Salahzar Stenvaag
|
||||||
* sempuki
|
* sempuki
|
||||||
* Snoopy
|
* Snoopy
|
||||||
* Strawberry Fride
|
* Strawberry Fride
|
||||||
* tglion
|
* tglion
|
||||||
* tlaukkan/Tommil (Tommi S. E. Laukkanen, Bubble Cloud)
|
* tlaukkan/Tommil (Tommi S. E. Laukkanen, Bubble Cloud)
|
||||||
* tyre
|
* tyre
|
||||||
* Vytek
|
* Vytek
|
||||||
* webmage (IBM)
|
* webmage (IBM)
|
||||||
* Xantor
|
* Xantor
|
||||||
* Y. Nitta
|
* Y. Nitta
|
||||||
* YZh
|
* YZh
|
||||||
* Zackary Geers aka Kunnis Basiat
|
* Zackary Geers aka Kunnis Basiat
|
||||||
* Zha Ewry
|
* Zha Ewry
|
||||||
|
|
||||||
|
|
||||||
= LSL Devs =
|
= LSL Devs =
|
||||||
|
|
||||||
* Alondria
|
* Alondria
|
||||||
* CharlieO
|
* CharlieO
|
||||||
* Tedd
|
* Tedd
|
||||||
* Melanie Thielker
|
* Melanie Thielker
|
||||||
|
|
||||||
|
|
||||||
= Testers =
|
= Testers =
|
||||||
|
|
||||||
* Ai Austin
|
* Ai Austin
|
||||||
* CharlieO (LSL)
|
* CharlieO (LSL)
|
||||||
* Ckrinke
|
* Ckrinke
|
||||||
* openlifegrid.com
|
* openlifegrid.com
|
||||||
|
|
||||||
|
|
||||||
This software uses components from the following developers:
|
This software uses components from the following developers:
|
||||||
* Sleepycat Software (Berkeley DB)
|
* Sleepycat Software (Berkeley DB)
|
||||||
* SQLite (Public Domain)
|
* SQLite (Public Domain)
|
||||||
* XmlRpcCS (http://xmlrpccs.sf.net/)
|
* XmlRpcCS (http://xmlrpccs.sf.net/)
|
||||||
* MySQL, Inc. (MySQL Connector/NET)
|
* MySQL, Inc. (MySQL Connector/NET)
|
||||||
* NUnit (http://www.nunit.org)
|
* NUnit (http://www.nunit.org)
|
||||||
* AGEIA Inc. (PhysX)
|
* AGEIA Inc. (PhysX)
|
||||||
* Russel L. Smith (ODE)
|
* Russel L. Smith (ODE)
|
||||||
* Prebuild (http://sourceforge.net/projects/dnpb/)
|
* Prebuild (http://sourceforge.net/projects/dnpb/)
|
||||||
* LibOpenMetaverse (http://lib.openmetaverse.org/)
|
* LibOpenMetaverse (http://lib.openmetaverse.org/)
|
||||||
* DotNetOpenMail v0.5.8b (http://dotnetopenmail.sourceforge.net)
|
* DotNetOpenMail v0.5.8b (http://dotnetopenmail.sourceforge.net)
|
||||||
* Prototype JavaScript Framework ajax (http://www.prototypejs.org/)
|
* Prototype JavaScript Framework ajax (http://www.prototypejs.org/)
|
||||||
* C5 GENERIC COLLECTION LIBRARY FOR C#/CLI
|
* C5 GENERIC COLLECTION LIBRARY FOR C#/CLI
|
||||||
* Nini (http://nini.sourceforge.net/)
|
* Nini (http://nini.sourceforge.net/)
|
||||||
* log4net (http://logging.apache.org/log4net/)
|
* log4net (http://logging.apache.org/log4net/)
|
||||||
* GlynnTucker.Cache (http://gtcache.sourceforge.net/)
|
* GlynnTucker.Cache (http://gtcache.sourceforge.net/)
|
||||||
* NDesk.Options 0.2.1 (http://www.ndesk.org/Options)
|
* NDesk.Options 0.2.1 (http://www.ndesk.org/Options)
|
||||||
|
|
||||||
Some plugins are based on Cable Beach
|
Some plugins are based on Cable Beach
|
||||||
Cable Beach is Copyright (c) 2008 Intel Corporation
|
Cable Beach is Copyright (c) 2008 Intel Corporation
|
||||||
see http://forge.opensimulator.org/gf/project/assetserver/
|
see http://forge.opensimulator.org/gf/project/assetserver/
|
||||||
|
|
||||||
In addition, we would like to thank:
|
In addition, we would like to thank:
|
||||||
* The Mono Project
|
* The Mono Project
|
||||||
* The NANT Developers
|
* The NANT Developers
|
||||||
* Microsoft (.NET, MSSQL-Adapters)
|
* Microsoft (.NET, MSSQL-Adapters)
|
||||||
|
|
|
@ -91,6 +91,9 @@ namespace OpenSim.Data.MySQL
|
||||||
rollbackStore = GridDataMySqlFile.ParseFileReadValue("rollback") == "true";
|
rollbackStore = GridDataMySqlFile.ParseFileReadValue("rollback") == "true";
|
||||||
opengridmode = GridDataMySqlFile.ParseFileReadValue("opengridmode") == "true";
|
opengridmode = GridDataMySqlFile.ParseFileReadValue("opengridmode") == "true";
|
||||||
|
|
||||||
|
if(rollbackStore)
|
||||||
|
m_log.Warn("[MysqlInventory] Enabling rollback mode in: " + rollbackDir);
|
||||||
|
|
||||||
database =
|
database =
|
||||||
new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling,
|
new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling,
|
||||||
settingPort);
|
settingPort);
|
||||||
|
|
|
@ -1007,6 +1007,26 @@ namespace OpenSim.Framework
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string GetRuntimeInformation()
|
||||||
|
{
|
||||||
|
string ru = String.Empty;
|
||||||
|
|
||||||
|
if (Environment.OSVersion.Platform == PlatformID.Unix)
|
||||||
|
ru = "Unix/Mono";
|
||||||
|
else
|
||||||
|
if (Environment.OSVersion.Platform == PlatformID.MacOSX)
|
||||||
|
ru = "OSX/Mono";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Type.GetType("Mono.Runtime") != null)
|
||||||
|
ru = "Win/Mono";
|
||||||
|
else
|
||||||
|
ru = "Win/.NET";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ru;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Is the given string a UUID?
|
/// Is the given string a UUID?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -332,7 +332,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
private AgentUpdateArgs lastarg;
|
private AgentUpdateArgs lastarg;
|
||||||
private bool m_IsActive = true;
|
private bool m_IsActive = true;
|
||||||
|
|
||||||
protected Dictionary<PacketType, PacketMethod> m_packetHandlers = new Dictionary<PacketType, PacketMethod>();
|
protected Dictionary<PacketType, PacketProcessor> m_packetHandlers = new Dictionary<PacketType, PacketProcessor>();
|
||||||
protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers
|
protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
protected LLImageManager m_imageManager;
|
protected LLImageManager m_imageManager;
|
||||||
|
@ -539,13 +539,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AddLocalPacketHandler(PacketType packetType, PacketMethod handler)
|
public bool AddLocalPacketHandler(PacketType packetType, PacketMethod handler)
|
||||||
|
{
|
||||||
|
return AddLocalPacketHandler(packetType, handler, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool AddLocalPacketHandler(PacketType packetType, PacketMethod handler, bool async)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
lock (m_packetHandlers)
|
lock (m_packetHandlers)
|
||||||
{
|
{
|
||||||
if (!m_packetHandlers.ContainsKey(packetType))
|
if (!m_packetHandlers.ContainsKey(packetType))
|
||||||
{
|
{
|
||||||
m_packetHandlers.Add(packetType, handler);
|
m_packetHandlers.Add(packetType, new PacketProcessor() { method = handler, Async = async });
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -576,15 +581,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
protected virtual bool ProcessPacketMethod(Packet packet)
|
protected virtual bool ProcessPacketMethod(Packet packet)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
PacketMethod method;
|
PacketProcessor pprocessor;
|
||||||
if (m_packetHandlers.TryGetValue(packet.Type, out method))
|
if (m_packetHandlers.TryGetValue(packet.Type, out pprocessor))
|
||||||
{
|
{
|
||||||
//there is a local handler for this packet type
|
//there is a local handler for this packet type
|
||||||
result = method(this, packet);
|
if (pprocessor.Async)
|
||||||
|
{
|
||||||
|
object obj = new AsyncPacketProcess(this, pprocessor.method, packet);
|
||||||
|
Util.FireAndForget(ProcessSpecificPacketAsync,obj);
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = pprocessor.method(this, packet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//there is not a local handler so see if there is a Global handler
|
//there is not a local handler so see if there is a Global handler
|
||||||
|
PacketMethod method = null;
|
||||||
bool found;
|
bool found;
|
||||||
lock (PacketHandlers)
|
lock (PacketHandlers)
|
||||||
{
|
{
|
||||||
|
@ -598,6 +613,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ProcessSpecificPacketAsync(object state)
|
||||||
|
{
|
||||||
|
AsyncPacketProcess packetObject = (AsyncPacketProcess)state;
|
||||||
|
packetObject.result = packetObject.Method(packetObject.ClientView, packetObject.Pack);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Packet Handling
|
#endregion Packet Handling
|
||||||
|
|
||||||
# region Setup
|
# region Setup
|
||||||
|
@ -4323,20 +4345,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
protected virtual void RegisterLocalPacketHandlers()
|
protected virtual void RegisterLocalPacketHandlers()
|
||||||
{
|
{
|
||||||
AddLocalPacketHandler(PacketType.LogoutRequest, HandleLogout);
|
AddLocalPacketHandler(PacketType.LogoutRequest, HandleLogout);
|
||||||
AddLocalPacketHandler(PacketType.AgentUpdate, HandleAgentUpdate);
|
AddLocalPacketHandler(PacketType.AgentUpdate, HandleAgentUpdate, false);
|
||||||
AddLocalPacketHandler(PacketType.ViewerEffect, HandleViewerEffect);
|
AddLocalPacketHandler(PacketType.ViewerEffect, HandleViewerEffect, false);
|
||||||
AddLocalPacketHandler(PacketType.AgentCachedTexture, HandleAgentTextureCached);
|
AddLocalPacketHandler(PacketType.AgentCachedTexture, HandleAgentTextureCached, false);
|
||||||
AddLocalPacketHandler(PacketType.MultipleObjectUpdate, HandleMultipleObjUpdate);
|
AddLocalPacketHandler(PacketType.MultipleObjectUpdate, HandleMultipleObjUpdate, false);
|
||||||
AddLocalPacketHandler(PacketType.MoneyTransferRequest, HandleMoneyTransferRequest);
|
AddLocalPacketHandler(PacketType.MoneyTransferRequest, HandleMoneyTransferRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.ParcelBuy, HandleParcelBuyRequest);
|
AddLocalPacketHandler(PacketType.ParcelBuy, HandleParcelBuyRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.UUIDGroupNameRequest, HandleUUIDGroupNameRequest);
|
AddLocalPacketHandler(PacketType.UUIDGroupNameRequest, HandleUUIDGroupNameRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectGroup, HandleObjectGroupRequest);
|
AddLocalPacketHandler(PacketType.ObjectGroup, HandleObjectGroupRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.GenericMessage, HandleGenericMessage);
|
AddLocalPacketHandler(PacketType.GenericMessage, HandleGenericMessage);
|
||||||
AddLocalPacketHandler(PacketType.AvatarPropertiesRequest, HandleAvatarPropertiesRequest);
|
AddLocalPacketHandler(PacketType.AvatarPropertiesRequest, HandleAvatarPropertiesRequest);
|
||||||
AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
|
AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
|
||||||
AddLocalPacketHandler(PacketType.AvatarPropertiesUpdate, HandlerAvatarPropertiesUpdate);
|
AddLocalPacketHandler(PacketType.AvatarPropertiesUpdate, HandlerAvatarPropertiesUpdate);
|
||||||
AddLocalPacketHandler(PacketType.ScriptDialogReply, HandlerScriptDialogReply);
|
AddLocalPacketHandler(PacketType.ScriptDialogReply, HandlerScriptDialogReply);
|
||||||
AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage);
|
AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage, false);
|
||||||
AddLocalPacketHandler(PacketType.AcceptFriendship, HandlerAcceptFriendship);
|
AddLocalPacketHandler(PacketType.AcceptFriendship, HandlerAcceptFriendship);
|
||||||
AddLocalPacketHandler(PacketType.DeclineFriendship, HandlerDeclineFriendship);
|
AddLocalPacketHandler(PacketType.DeclineFriendship, HandlerDeclineFriendship);
|
||||||
AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFrendship);
|
AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFrendship);
|
||||||
|
@ -4353,9 +4375,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
AddLocalPacketHandler(PacketType.ObjectAttach, HandleObjectAttach);
|
AddLocalPacketHandler(PacketType.ObjectAttach, HandleObjectAttach);
|
||||||
AddLocalPacketHandler(PacketType.ObjectDetach, HandleObjectDetach);
|
AddLocalPacketHandler(PacketType.ObjectDetach, HandleObjectDetach);
|
||||||
AddLocalPacketHandler(PacketType.ObjectDrop, HandleObjectDrop);
|
AddLocalPacketHandler(PacketType.ObjectDrop, HandleObjectDrop);
|
||||||
AddLocalPacketHandler(PacketType.SetAlwaysRun, HandleSetAlwaysRun);
|
AddLocalPacketHandler(PacketType.SetAlwaysRun, HandleSetAlwaysRun, false);
|
||||||
AddLocalPacketHandler(PacketType.CompleteAgentMovement, HandleCompleteAgentMovement);
|
AddLocalPacketHandler(PacketType.CompleteAgentMovement, HandleCompleteAgentMovement);
|
||||||
AddLocalPacketHandler(PacketType.AgentAnimation, HandleAgentAnimation);
|
AddLocalPacketHandler(PacketType.AgentAnimation, HandleAgentAnimation, false);
|
||||||
AddLocalPacketHandler(PacketType.AgentRequestSit, HandleAgentRequestSit);
|
AddLocalPacketHandler(PacketType.AgentRequestSit, HandleAgentRequestSit);
|
||||||
AddLocalPacketHandler(PacketType.AgentSit, HandleAgentSit);
|
AddLocalPacketHandler(PacketType.AgentSit, HandleAgentSit);
|
||||||
AddLocalPacketHandler(PacketType.SoundTrigger, HandleSoundTrigger);
|
AddLocalPacketHandler(PacketType.SoundTrigger, HandleSoundTrigger);
|
||||||
|
@ -4364,9 +4386,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
AddLocalPacketHandler(PacketType.UserInfoRequest, HandleUserInfoRequest);
|
AddLocalPacketHandler(PacketType.UserInfoRequest, HandleUserInfoRequest);
|
||||||
AddLocalPacketHandler(PacketType.UpdateUserInfo, HandleUpdateUserInfo);
|
AddLocalPacketHandler(PacketType.UpdateUserInfo, HandleUpdateUserInfo);
|
||||||
AddLocalPacketHandler(PacketType.SetStartLocationRequest, HandleSetStartLocationRequest);
|
AddLocalPacketHandler(PacketType.SetStartLocationRequest, HandleSetStartLocationRequest);
|
||||||
AddLocalPacketHandler(PacketType.AgentThrottle, HandleAgentThrottle);
|
AddLocalPacketHandler(PacketType.AgentThrottle, HandleAgentThrottle, false);
|
||||||
AddLocalPacketHandler(PacketType.AgentPause, HandleAgentPause);
|
AddLocalPacketHandler(PacketType.AgentPause, HandleAgentPause, false);
|
||||||
AddLocalPacketHandler(PacketType.AgentResume, HandleAgentResume);
|
AddLocalPacketHandler(PacketType.AgentResume, HandleAgentResume, false);
|
||||||
AddLocalPacketHandler(PacketType.ForceScriptControlRelease, HandleForceScriptControlRelease);
|
AddLocalPacketHandler(PacketType.ForceScriptControlRelease, HandleForceScriptControlRelease);
|
||||||
AddLocalPacketHandler(PacketType.ObjectLink, HandleObjectLink);
|
AddLocalPacketHandler(PacketType.ObjectLink, HandleObjectLink);
|
||||||
AddLocalPacketHandler(PacketType.ObjectDelink, HandleObjectDelink);
|
AddLocalPacketHandler(PacketType.ObjectDelink, HandleObjectDelink);
|
||||||
|
@ -4382,22 +4404,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
AddLocalPacketHandler(PacketType.ObjectRotation, HandleObjectRotation);
|
AddLocalPacketHandler(PacketType.ObjectRotation, HandleObjectRotation);
|
||||||
AddLocalPacketHandler(PacketType.ObjectFlagUpdate, HandleObjectFlagUpdate);
|
AddLocalPacketHandler(PacketType.ObjectFlagUpdate, HandleObjectFlagUpdate);
|
||||||
AddLocalPacketHandler(PacketType.ObjectImage, HandleObjectImage);
|
AddLocalPacketHandler(PacketType.ObjectImage, HandleObjectImage);
|
||||||
AddLocalPacketHandler(PacketType.ObjectGrab, HandleObjectGrab);
|
AddLocalPacketHandler(PacketType.ObjectGrab, HandleObjectGrab, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectGrabUpdate, HandleObjectGrabUpdate);
|
AddLocalPacketHandler(PacketType.ObjectGrabUpdate, HandleObjectGrabUpdate, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectDeGrab, HandleObjectDeGrab);
|
AddLocalPacketHandler(PacketType.ObjectDeGrab, HandleObjectDeGrab);
|
||||||
AddLocalPacketHandler(PacketType.ObjectSpinStart, HandleObjectSpinStart);
|
AddLocalPacketHandler(PacketType.ObjectSpinStart, HandleObjectSpinStart, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectSpinUpdate, HandleObjectSpinUpdate);
|
AddLocalPacketHandler(PacketType.ObjectSpinUpdate, HandleObjectSpinUpdate, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectSpinStop, HandleObjectSpinStop);
|
AddLocalPacketHandler(PacketType.ObjectSpinStop, HandleObjectSpinStop, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectDescription, HandleObjectDescription);
|
AddLocalPacketHandler(PacketType.ObjectDescription, HandleObjectDescription, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectName, HandleObjectName);
|
AddLocalPacketHandler(PacketType.ObjectName, HandleObjectName, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectPermissions, HandleObjectPermissions);
|
AddLocalPacketHandler(PacketType.ObjectPermissions, HandleObjectPermissions, false);
|
||||||
AddLocalPacketHandler(PacketType.Undo, HandleUndo);
|
AddLocalPacketHandler(PacketType.Undo, HandleUndo, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectDuplicateOnRay, HandleObjectDuplicateOnRay);
|
AddLocalPacketHandler(PacketType.ObjectDuplicateOnRay, HandleObjectDuplicateOnRay);
|
||||||
AddLocalPacketHandler(PacketType.RequestObjectPropertiesFamily, HandleRequestObjectPropertiesFamily);
|
AddLocalPacketHandler(PacketType.RequestObjectPropertiesFamily, HandleRequestObjectPropertiesFamily, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectIncludeInSearch, HandleObjectIncludeInSearch);
|
AddLocalPacketHandler(PacketType.ObjectIncludeInSearch, HandleObjectIncludeInSearch);
|
||||||
AddLocalPacketHandler(PacketType.ScriptAnswerYes, HandleScriptAnswerYes);
|
AddLocalPacketHandler(PacketType.ScriptAnswerYes, HandleScriptAnswerYes, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectClickAction, HandleObjectClickAction);
|
AddLocalPacketHandler(PacketType.ObjectClickAction, HandleObjectClickAction, false);
|
||||||
AddLocalPacketHandler(PacketType.ObjectMaterial, HandleObjectMaterial);
|
AddLocalPacketHandler(PacketType.ObjectMaterial, HandleObjectMaterial, false);
|
||||||
AddLocalPacketHandler(PacketType.RequestImage, HandleRequestImage);
|
AddLocalPacketHandler(PacketType.RequestImage, HandleRequestImage);
|
||||||
AddLocalPacketHandler(PacketType.TransferRequest, HandleTransferRequest);
|
AddLocalPacketHandler(PacketType.TransferRequest, HandleTransferRequest);
|
||||||
AddLocalPacketHandler(PacketType.AssetUploadRequest, HandleAssetUploadRequest);
|
AddLocalPacketHandler(PacketType.AssetUploadRequest, HandleAssetUploadRequest);
|
||||||
|
@ -4423,17 +4445,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
AddLocalPacketHandler(PacketType.RemoveTaskInventory, HandleRemoveTaskInventory);
|
AddLocalPacketHandler(PacketType.RemoveTaskInventory, HandleRemoveTaskInventory);
|
||||||
AddLocalPacketHandler(PacketType.MoveTaskInventory, HandleMoveTaskInventory);
|
AddLocalPacketHandler(PacketType.MoveTaskInventory, HandleMoveTaskInventory);
|
||||||
AddLocalPacketHandler(PacketType.RezScript, HandleRezScript);
|
AddLocalPacketHandler(PacketType.RezScript, HandleRezScript);
|
||||||
AddLocalPacketHandler(PacketType.MapLayerRequest, HandleMapLayerRequest);
|
AddLocalPacketHandler(PacketType.MapLayerRequest, HandleMapLayerRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.MapBlockRequest, HandleMapBlockRequest);
|
AddLocalPacketHandler(PacketType.MapBlockRequest, HandleMapBlockRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.MapNameRequest, HandleMapNameRequest);
|
AddLocalPacketHandler(PacketType.MapNameRequest, HandleMapNameRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.TeleportLandmarkRequest, HandleTeleportLandmarkRequest);
|
AddLocalPacketHandler(PacketType.TeleportLandmarkRequest, HandleTeleportLandmarkRequest);
|
||||||
AddLocalPacketHandler(PacketType.TeleportLocationRequest, HandleTeleportLocationRequest);
|
AddLocalPacketHandler(PacketType.TeleportLocationRequest, HandleTeleportLocationRequest);
|
||||||
AddLocalPacketHandler(PacketType.UUIDNameRequest, HandleUUIDNameRequest);
|
AddLocalPacketHandler(PacketType.UUIDNameRequest, HandleUUIDNameRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.RegionHandleRequest, HandleRegionHandleRequest);
|
AddLocalPacketHandler(PacketType.RegionHandleRequest, HandleRegionHandleRequest);
|
||||||
AddLocalPacketHandler(PacketType.ParcelInfoRequest, HandleParcelInfoRequest);
|
AddLocalPacketHandler(PacketType.ParcelInfoRequest, HandleParcelInfoRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.ParcelAccessListRequest, HandleParcelAccessListRequest);
|
AddLocalPacketHandler(PacketType.ParcelAccessListRequest, HandleParcelAccessListRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.ParcelAccessListUpdate, HandleParcelAccessListUpdate);
|
AddLocalPacketHandler(PacketType.ParcelAccessListUpdate, HandleParcelAccessListUpdate, false);
|
||||||
AddLocalPacketHandler(PacketType.ParcelPropertiesRequest, HandleParcelPropertiesRequest);
|
AddLocalPacketHandler(PacketType.ParcelPropertiesRequest, HandleParcelPropertiesRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.ParcelDivide, HandleParcelDivide);
|
AddLocalPacketHandler(PacketType.ParcelDivide, HandleParcelDivide);
|
||||||
AddLocalPacketHandler(PacketType.ParcelJoin, HandleParcelJoin);
|
AddLocalPacketHandler(PacketType.ParcelJoin, HandleParcelJoin);
|
||||||
AddLocalPacketHandler(PacketType.ParcelPropertiesUpdate, HandleParcelPropertiesUpdate);
|
AddLocalPacketHandler(PacketType.ParcelPropertiesUpdate, HandleParcelPropertiesUpdate);
|
||||||
|
@ -4447,7 +4469,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
AddLocalPacketHandler(PacketType.LandStatRequest, HandleLandStatRequest);
|
AddLocalPacketHandler(PacketType.LandStatRequest, HandleLandStatRequest);
|
||||||
AddLocalPacketHandler(PacketType.ParcelDwellRequest, HandleParcelDwellRequest);
|
AddLocalPacketHandler(PacketType.ParcelDwellRequest, HandleParcelDwellRequest);
|
||||||
AddLocalPacketHandler(PacketType.EstateOwnerMessage, HandleEstateOwnerMessage);
|
AddLocalPacketHandler(PacketType.EstateOwnerMessage, HandleEstateOwnerMessage);
|
||||||
AddLocalPacketHandler(PacketType.RequestRegionInfo, HandleRequestRegionInfo);
|
AddLocalPacketHandler(PacketType.RequestRegionInfo, HandleRequestRegionInfo, false);
|
||||||
AddLocalPacketHandler(PacketType.EstateCovenantRequest, HandleEstateCovenantRequest);
|
AddLocalPacketHandler(PacketType.EstateCovenantRequest, HandleEstateCovenantRequest);
|
||||||
AddLocalPacketHandler(PacketType.RequestGodlikePowers, HandleRequestGodlikePowers);
|
AddLocalPacketHandler(PacketType.RequestGodlikePowers, HandleRequestGodlikePowers);
|
||||||
AddLocalPacketHandler(PacketType.GodKickUser, HandleGodKickUser);
|
AddLocalPacketHandler(PacketType.GodKickUser, HandleGodKickUser);
|
||||||
|
@ -4462,13 +4484,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
AddLocalPacketHandler(PacketType.ActivateGestures, HandleActivateGestures);
|
AddLocalPacketHandler(PacketType.ActivateGestures, HandleActivateGestures);
|
||||||
AddLocalPacketHandler(PacketType.DeactivateGestures, HandleDeactivateGestures);
|
AddLocalPacketHandler(PacketType.DeactivateGestures, HandleDeactivateGestures);
|
||||||
AddLocalPacketHandler(PacketType.ObjectOwner, HandleObjectOwner);
|
AddLocalPacketHandler(PacketType.ObjectOwner, HandleObjectOwner);
|
||||||
AddLocalPacketHandler(PacketType.AgentFOV, HandleAgentFOV);
|
AddLocalPacketHandler(PacketType.AgentFOV, HandleAgentFOV, false);
|
||||||
AddLocalPacketHandler(PacketType.ViewerStats, HandleViewerStats);
|
AddLocalPacketHandler(PacketType.ViewerStats, HandleViewerStats);
|
||||||
AddLocalPacketHandler(PacketType.MapItemRequest, HandleMapItemRequest);
|
AddLocalPacketHandler(PacketType.MapItemRequest, HandleMapItemRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.TransferAbort, HandleTransferAbort);
|
AddLocalPacketHandler(PacketType.TransferAbort, HandleTransferAbort, false);
|
||||||
AddLocalPacketHandler(PacketType.MuteListRequest, HandleMuteListRequest);
|
AddLocalPacketHandler(PacketType.MuteListRequest, HandleMuteListRequest, false);
|
||||||
AddLocalPacketHandler(PacketType.UseCircuitCode, HandleUseCircuitCode);
|
AddLocalPacketHandler(PacketType.UseCircuitCode, HandleUseCircuitCode);
|
||||||
AddLocalPacketHandler(PacketType.AgentHeightWidth, HandleAgentHeightWidth);
|
AddLocalPacketHandler(PacketType.AgentHeightWidth, HandleAgentHeightWidth, false);
|
||||||
AddLocalPacketHandler(PacketType.InventoryDescendents, HandleInventoryDescendents);
|
AddLocalPacketHandler(PacketType.InventoryDescendents, HandleInventoryDescendents);
|
||||||
AddLocalPacketHandler(PacketType.DirPlacesQuery, HandleDirPlacesQuery);
|
AddLocalPacketHandler(PacketType.DirPlacesQuery, HandleDirPlacesQuery);
|
||||||
AddLocalPacketHandler(PacketType.DirFindQuery, HandleDirFindQuery);
|
AddLocalPacketHandler(PacketType.DirFindQuery, HandleDirFindQuery);
|
||||||
|
@ -15740,6 +15762,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct PacketProcessor
|
||||||
|
{
|
||||||
|
public PacketMethod method;
|
||||||
|
public bool Async;
|
||||||
|
}
|
||||||
|
public class AsyncPacketProcess
|
||||||
|
{
|
||||||
|
public bool result = false;
|
||||||
|
public readonly LLClientView ClientView = null;
|
||||||
|
public readonly Packet Pack = null;
|
||||||
|
public readonly PacketMethod Method = null;
|
||||||
|
public AsyncPacketProcess(LLClientView pClientview, PacketMethod pMethod, Packet pPack)
|
||||||
|
{
|
||||||
|
ClientView = pClientview;
|
||||||
|
Method = pMethod;
|
||||||
|
Pack = pPack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public static OSD BuildEvent(string eventName, OSD eventBody)
|
public static OSD BuildEvent(string eventName, OSD eventBody)
|
||||||
|
|
|
@ -964,7 +964,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packetInbox.Dequeue(100, ref incomingPacket))
|
if (packetInbox.Dequeue(100, ref incomingPacket))
|
||||||
Util.FireAndForget(ProcessInPacket, incomingPacket);
|
ProcessInPacket(incomingPacket);//, incomingPacket); Util.FireAndForget(ProcessInPacket, incomingPacket);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
|
@ -576,10 +576,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
StatsReporter.SetObjectCapacity(objectCapacity);
|
StatsReporter.SetObjectCapacity(objectCapacity);
|
||||||
|
|
||||||
|
// Old
|
||||||
|
/*
|
||||||
m_simulatorVersion = simulatorVersion
|
m_simulatorVersion = simulatorVersion
|
||||||
+ " (OS " + Util.GetOperatingSystemInformation() + ")"
|
+ " (OS " + Util.GetOperatingSystemInformation() + ")"
|
||||||
+ " ChilTasks:" + m_seeIntoRegionFromNeighbor.ToString()
|
+ " ChilTasks:" + m_seeIntoRegionFromNeighbor.ToString()
|
||||||
+ " PhysPrim:" + m_physicalPrim.ToString();
|
+ " PhysPrim:" + m_physicalPrim.ToString();
|
||||||
|
*/
|
||||||
|
|
||||||
|
m_simulatorVersion = simulatorVersion + " (" + Util.GetRuntimeInformation() + ")";
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -915,7 +920,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (showDialog)
|
if (showDialog)
|
||||||
{
|
{
|
||||||
m_dialogModule.SendNotificationToUsersInRegion(
|
m_dialogModule.SendNotificationToUsersInRegion(
|
||||||
UUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in " + (seconds / 60).ToString() + " Minutes");
|
UUID.Random(), String.Empty, RegionInfo.RegionName + String.Format(": Restarting in {0} Minutes", (int)(seconds / 60.0)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -946,6 +951,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// This causes the region to restart immediatley.
|
// This causes the region to restart immediatley.
|
||||||
public void RestartNow()
|
public void RestartNow()
|
||||||
{
|
{
|
||||||
|
IConfig startupConfig = m_config.Configs["Startup"];
|
||||||
|
if (startupConfig != null)
|
||||||
|
{
|
||||||
|
if (startupConfig.GetBoolean("InworldRestartShutsDown", false))
|
||||||
|
{
|
||||||
|
MainConsole.Instance.RunCommand("shutdown");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (PhysicsScene != null)
|
if (PhysicsScene != null)
|
||||||
{
|
{
|
||||||
PhysicsScene.Dispose();
|
PhysicsScene.Dispose();
|
||||||
|
@ -953,6 +968,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
m_log.Error("[REGION]: Closing");
|
m_log.Error("[REGION]: Closing");
|
||||||
Close();
|
Close();
|
||||||
|
|
||||||
m_log.Error("[REGION]: Firing Region Restart Message");
|
m_log.Error("[REGION]: Firing Region Restart Message");
|
||||||
base.Restart(0);
|
base.Restart(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1973,5 +1973,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int osGetSimulatorMemory()
|
||||||
|
{
|
||||||
|
CheckThreatLevel(ThreatLevel.Moderate, "osGetSimulatorMemory");
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
long pws = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
|
||||||
|
|
||||||
|
if (pws > Int32.MaxValue)
|
||||||
|
return Int32.MaxValue;
|
||||||
|
if (pws < 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return (int)pws;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,5 +163,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
key osGetMapTexture();
|
key osGetMapTexture();
|
||||||
key osGetRegionMapTexture(string regionName);
|
key osGetRegionMapTexture(string regionName);
|
||||||
LSL_List osGetRegionStats();
|
LSL_List osGetRegionStats();
|
||||||
|
|
||||||
|
int osGetSimulatorMemory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -637,5 +637,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
{
|
{
|
||||||
return m_OSSL_Functions.osGetRegionStats();
|
return m_OSSL_Functions.osGetRegionStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the amount of memory in use by the Simulator Daemon.
|
||||||
|
/// Amount in bytes - if >= 4GB, returns 4GB. (LSL is not 64-bit aware)
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public LSL_Integer osGetSimulatorMemory()
|
||||||
|
{
|
||||||
|
return m_OSSL_Functions.osGetSimulatorMemory();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,7 +107,15 @@
|
||||||
; Combine all contiguous regions into one large region
|
; Combine all contiguous regions into one large region
|
||||||
; Order your regions from South to North, West to East in your regions.ini and then set this to true
|
; Order your regions from South to North, West to East in your regions.ini and then set this to true
|
||||||
; Warning! Don't use this with regions that have existing content!, This will likely break them
|
; Warning! Don't use this with regions that have existing content!, This will likely break them
|
||||||
CombineContiguousRegions=false
|
CombineContiguousRegions = false
|
||||||
|
|
||||||
|
; If you have only one region in an instance, or to avoid the many bugs
|
||||||
|
; that you can trigger in modules by restarting a region, set this to
|
||||||
|
; true to make the entire instance exit instead of restarting the region.
|
||||||
|
; This is meant to be used on systems where some external system like
|
||||||
|
; Monit will restart any instance that exits, thereby making the shutdown
|
||||||
|
; into a restart.
|
||||||
|
;InworldRestartShutsDown = false
|
||||||
|
|
||||||
; ##
|
; ##
|
||||||
; ## STORAGE
|
; ## STORAGE
|
||||||
|
|
Loading…
Reference in New Issue