Merge branch 'ubitwork' of ssh://3dhosting.de/var/git/careminster into ubitwork

avinationmerge
ubit 2012-06-04 21:38:40 +02:00
commit b0f6c9330a
6 changed files with 96 additions and 43 deletions

View File

@ -258,10 +258,25 @@ namespace OpenSim.ApplicationPlugins.RemoteController
{ {
m_log.Info("[RADMIN]: Request to restart Region."); m_log.Info("[RADMIN]: Request to restart Region.");
CheckRegionParams(requestData, responseData);
Scene rebootedScene = null; Scene rebootedScene = null;
GetSceneFromRegionParams(requestData, responseData, out rebootedScene); bool restartAll = false;
IConfig startupConfig = m_configSource.Configs["Startup"];
if (startupConfig != null)
{
if (startupConfig.GetBoolean("InworldRestartShutsDown", false))
{
rebootedScene = m_application.SceneManager.CurrentOrFirstScene;
restartAll = true;
}
}
if (rebootedScene == null)
{
CheckRegionParams(requestData, responseData);
GetSceneFromRegionParams(requestData, responseData, out rebootedScene);
}
IRestartModule restartModule = rebootedScene.RequestModuleInterface<IRestartModule>(); IRestartModule restartModule = rebootedScene.RequestModuleInterface<IRestartModule>();
@ -324,11 +339,20 @@ namespace OpenSim.ApplicationPlugins.RemoteController
notice = false; notice = false;
} }
if (restartModule != null) List<Scene> restartList;
if (restartAll)
restartList = m_application.SceneManager.Scenes;
else
restartList = new List<Scene>() { rebootedScene };
foreach (Scene s in m_application.SceneManager.Scenes)
{ {
restartModule.ScheduleRestart(UUID.Zero, message, times.ToArray(), notice); restartModule = s.RequestModuleInterface<IRestartModule>();
responseData["success"] = true; if (restartModule != null)
restartModule.ScheduleRestart(UUID.Zero, message, times.ToArray(), notice);
} }
responseData["success"] = true;
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -346,7 +346,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// All manipulation of this set has to occur under an m_entityUpdates.SyncRoot lock /// All manipulation of this set has to occur under an m_entityUpdates.SyncRoot lock
/// ///
/// </value> /// </value>
protected HashSet<uint> m_killRecord; // protected HashSet<uint> m_killRecord;
// protected HashSet<uint> m_attachmentsSent; // protected HashSet<uint> m_attachmentsSent;
@ -472,7 +472,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
m_entityUpdates = new PriorityQueue(m_scene.Entities.Count); m_entityUpdates = new PriorityQueue(m_scene.Entities.Count);
m_entityProps = new PriorityQueue(m_scene.Entities.Count); m_entityProps = new PriorityQueue(m_scene.Entities.Count);
m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>(); m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>();
m_killRecord = new HashSet<uint>(); // m_killRecord = new HashSet<uint>();
// m_attachmentsSent = new HashSet<uint>(); // m_attachmentsSent = new HashSet<uint>();
m_assetService = m_scene.RequestModuleInterface<IAssetService>(); m_assetService = m_scene.RequestModuleInterface<IAssetService>();
@ -1574,17 +1574,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// We MUST lock for both manipulating the kill record and sending the packet, in order to avoid a race // We MUST lock for both manipulating the kill record and sending the packet, in order to avoid a race
// condition where a kill can be processed before an out-of-date update for the same object. // condition where a kill can be processed before an out-of-date update for the same object.
// ProcessEntityUpdates() also takes the m_killRecord lock. // ProcessEntityUpdates() also takes the m_killRecord lock.
lock (m_killRecord) // lock (m_killRecord)
{ // {
foreach (uint localID in localIDs) // foreach (uint localID in localIDs)
m_killRecord.Add(localID); // m_killRecord.Add(localID);
// The throttle queue used here must match that being used for updates. Otherwise, there is a // The throttle queue used here must match that being used for updates. Otherwise, there is a
// chance that a kill packet put on a separate queue will be sent to the client before an existing // chance that a kill packet put on a separate queue will be sent to the client before an existing
// update packet on another queue. Receiving updates after kills results in unowned and undeletable // update packet on another queue. Receiving updates after kills results in unowned and undeletable
// scene objects in a viewer until that viewer is relogged in. // scene objects in a viewer until that viewer is relogged in.
OutPacket(kill, ThrottleOutPacketType.Task); OutPacket(kill, ThrottleOutPacketType.Task);
} // }
} }
} }
@ -3802,11 +3802,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// If the object is an attachment we don't want it to be in the kill // If the object is an attachment we don't want it to be in the kill
// record. Else attaching from inworld and subsequently dropping // record. Else attaching from inworld and subsequently dropping
// it will no longer work. // it will no longer work.
lock (m_killRecord) // lock (m_killRecord)
{ // {
m_killRecord.Remove(part.LocalId); // m_killRecord.Remove(part.LocalId);
m_killRecord.Remove(part.ParentGroup.RootPart.LocalId); // m_killRecord.Remove(part.ParentGroup.RootPart.LocalId);
} // }
} }
else else
{ {
@ -3822,13 +3822,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// after the root prim has been deleted. // after the root prim has been deleted.
// //
// We ignore this for attachments because attaching something from inworld breaks unless we do. // We ignore this for attachments because attaching something from inworld breaks unless we do.
lock (m_killRecord) // lock (m_killRecord)
{ // {
if (m_killRecord.Contains(part.LocalId)) // if (m_killRecord.Contains(part.LocalId))
continue; // continue;
if (m_killRecord.Contains(part.ParentGroup.RootPart.LocalId)) // if (m_killRecord.Contains(part.ParentGroup.RootPart.LocalId))
continue; // continue;
} // }
} }
if (part.ParentGroup.IsAttachment && m_disableFacelights) if (part.ParentGroup.IsAttachment && m_disableFacelights)

View File

@ -867,7 +867,7 @@ namespace OpenSim.Region.Framework.Scenes
IsChildAgent = false; IsChildAgent = false;
Animator.TrySetMovementAnimation("SIT"); // Animator.TrySetMovementAnimation("SIT");
} }
else else
{ {

View File

@ -3252,9 +3252,9 @@ namespace OpenSim.Region.Physics.OdePlugin
} }
private void changeAddImpulse(Vector3 impulse) private void changeAddForce(Vector3 theforce)
{ {
m_forceacc += impulse *m_invTimeStep; m_forceacc += theforce;
if (!m_isSelected) if (!m_isSelected)
{ {
lock (this) lock (this)
@ -3960,7 +3960,7 @@ namespace OpenSim.Region.Physics.OdePlugin
break; break;
case changes.AddForce: case changes.AddForce:
changeAddImpulse((Vector3)arg); changeAddForce((Vector3)arg);
break; break;
case changes.AddAngForce: case changes.AddAngForce:

View File

@ -111,6 +111,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
protected Timer m_ShoutSayTimer; protected Timer m_ShoutSayTimer;
protected int m_SayShoutCount = 0; protected int m_SayShoutCount = 0;
private Dictionary<string, string> MovementAnimationsForLSL =
new Dictionary<string, string> {
{"FLY", "Flying"},
{"FLYSLOW", "FlyingSlow"},
{"HOVER_UP", "Hovering Up"},
{"HOVER_DOWN", "Hovering Down"},
{"HOVER", "Hovering"},
{"LAND", "Landing"},
{"FALLDOWN", "Falling Down"},
{"PREJUMP", "PreJumping"},
{"JUMP", "Jumping"},
{"STANDUP", "Standing Up"},
{"SOFT_LAND", "Soft Landing"},
{"STAND", "Standing"},
{"CROUCHWALK", "CrouchWalking"},
{"RUN", "Running"},
{"WALK", "Walking"},
{"CROUCH", "Crouching"},
{"TURNLEFT", "Turning Left"},
{"TURNRIGHT", "Turning Right"}
};
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID)
{ {
m_ShoutSayTimer = new Timer(1000); m_ShoutSayTimer = new Timer(1000);
@ -2523,7 +2545,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
else else
{ {
vel = m_host.Velocity; vel = m_host.ParentGroup.RootPart.Velocity;
} }
return new LSL_Vector(vel.X, vel.Y, vel.Z); return new LSL_Vector(vel.X, vel.Y, vel.Z);
@ -4820,14 +4842,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (m_host.RegionHandle == presence.RegionHandle) if (m_host.RegionHandle == presence.RegionHandle)
{ {
Dictionary<UUID, string> animationstateNames = DefaultAvatarAnimations.AnimStateNames;
if (presence != null) if (presence != null)
{ {
AnimationSet currentAnims = presence.Animator.Animations; if (presence.SitGround)
string currentAnimationState = String.Empty; return "Sitting on Ground";
if (animationstateNames.TryGetValue(currentAnims.DefaultAnimation.AnimID, out currentAnimationState)) if (presence.ParentID != 0 || presence.ParentUUID != UUID.Zero)
return currentAnimationState; return "Sitting";
string movementAnimation = presence.Animator.CurrentMovementAnimation;
string lslMovementAnimation;
if (MovementAnimationsForLSL.TryGetValue(movementAnimation, out lslMovementAnimation))
return lslMovementAnimation;
} }
} }

View File

@ -103,6 +103,8 @@ namespace OpenSim.Services.AuthenticationService
if ((user.UserFlags & impersonateFlag) == 0) if ((user.UserFlags & impersonateFlag) == 0)
return String.Empty; return String.Empty;
m_log.DebugFormat("[PASS AUTH]: Attempting impersonation");
List<UserAccount> accounts = m_UserAccountService.GetUserAccountsWhere(UUID.Zero, "UserLevel >= 200"); List<UserAccount> accounts = m_UserAccountService.GetUserAccountsWhere(UUID.Zero, "UserLevel >= 200");
if (accounts == null || accounts.Count == 0) if (accounts == null || accounts.Count == 0)
return String.Empty; return String.Empty;
@ -117,6 +119,8 @@ namespace OpenSim.Services.AuthenticationService
continue; continue;
} }
// m_log.DebugFormat("[PASS AUTH]: Trying {0}", data.PrincipalID);
hashed = Util.Md5Hash(password + ":" + hashed = Util.Md5Hash(password + ":" +
data.Data["passwordSalt"].ToString()); data.Data["passwordSalt"].ToString());
@ -125,13 +129,12 @@ namespace OpenSim.Services.AuthenticationService
m_log.DebugFormat("[PASS AUTH]: {0} {1} impersonating {2}, proceeding with login", a.FirstName, a.LastName, principalID); m_log.DebugFormat("[PASS AUTH]: {0} {1} impersonating {2}, proceeding with login", a.FirstName, a.LastName, principalID);
return GetToken(principalID, lifetime); return GetToken(principalID, lifetime);
} }
else // else
{ // {
m_log.DebugFormat( // m_log.DebugFormat(
"[AUTH SERVICE]: Salted hash {0} of given password did not match salted hash of {1} for PrincipalID {2}. Authentication failure.", // "[AUTH SERVICE]: Salted hash {0} of given password did not match salted hash of {1} for PrincipalID {2}. Authentication failure.",
hashed, data.Data["passwordHash"], principalID); // hashed, data.Data["passwordHash"], data.PrincipalID);
return String.Empty; // }
}
} }
m_log.DebugFormat("[PASS AUTH]: Impersonation of {0} failed", principalID); m_log.DebugFormat("[PASS AUTH]: Impersonation of {0} failed", principalID);