diff options
17 files changed, 678 insertions, 428 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 7ebb5de..e57aaa0 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs | |||
@@ -998,6 +998,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
998 | string firstname = (string) requestData["user_firstname"]; | 998 | string firstname = (string) requestData["user_firstname"]; |
999 | string lastname = (string) requestData["user_lastname"]; | 999 | string lastname = (string) requestData["user_lastname"]; |
1000 | string passwd = (string) requestData["user_password"]; | 1000 | string passwd = (string) requestData["user_password"]; |
1001 | |||
1001 | uint regX = Convert.ToUInt32((Int32) requestData["start_region_x"]); | 1002 | uint regX = Convert.ToUInt32((Int32) requestData["start_region_x"]); |
1002 | uint regY = Convert.ToUInt32((Int32) requestData["start_region_y"]); | 1003 | uint regY = Convert.ToUInt32((Int32) requestData["start_region_y"]); |
1003 | 1004 | ||
@@ -1005,28 +1006,25 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1005 | if (requestData.Contains("user_email")) | 1006 | if (requestData.Contains("user_email")) |
1006 | email = (string)requestData["user_email"]; | 1007 | email = (string)requestData["user_email"]; |
1007 | 1008 | ||
1008 | UUID scopeID = m_app.SceneManager.CurrentOrFirstScene.RegionInfo.ScopeID; | 1009 | Scene scene = m_app.SceneManager.CurrentOrFirstScene; |
1009 | 1010 | UUID scopeID = scene.RegionInfo.ScopeID; | |
1010 | UserAccount account = m_app.SceneManager.CurrentOrFirstScene.UserAccountService.GetUserAccount(scopeID, firstname, lastname); | ||
1011 | |||
1012 | if (null != account) | ||
1013 | throw new Exception(String.Format("Account {0} {1} already exists", firstname, lastname)); | ||
1014 | 1011 | ||
1015 | account = new UserAccount(scopeID, firstname, lastname, email); | 1012 | UserAccount account = CreateUser(scopeID, firstname, lastname, passwd, email); |
1016 | 1013 | ||
1017 | bool success = m_app.SceneManager.CurrentOrFirstScene.UserAccountService.StoreUserAccount(account); | 1014 | if (null == account) |
1018 | |||
1019 | if (!success) | ||
1020 | throw new Exception(String.Format("failed to create new user {0} {1}", | 1015 | throw new Exception(String.Format("failed to create new user {0} {1}", |
1021 | firstname, lastname)); | 1016 | firstname, lastname)); |
1022 | 1017 | ||
1023 | // Store the password | 1018 | // Set home position |
1024 | m_app.SceneManager.CurrentOrFirstScene.AuthenticationService.SetPassword(account.PrincipalID, passwd); | ||
1025 | 1019 | ||
1026 | GridRegion home = m_app.SceneManager.CurrentOrFirstScene.GridService.GetRegionByPosition(scopeID, | 1020 | GridRegion home = scene.GridService.GetRegionByPosition(scopeID, |
1027 | (int)(regX * Constants.RegionSize), (int)(regY * Constants.RegionSize)); | 1021 | (int)(regX * Constants.RegionSize), (int)(regY * Constants.RegionSize)); |
1028 | if (home == null) | 1022 | if (null == home) { |
1029 | m_log.WarnFormat("[RADMIN]: Unable to set home region for newly created user account {0} {1}", firstname, lastname); | 1023 | m_log.WarnFormat("[RADMIN]: Unable to set home region for newly created user account {0} {1}", firstname, lastname); |
1024 | } else { | ||
1025 | scene.GridUserService.SetHome(account.PrincipalID.ToString(), home.RegionID, new Vector3(128, 128, 0), new Vector3(0, 1, 0)); | ||
1026 | m_log.DebugFormat("[RADMIN]: Set home region {0} for updated user account {1} {2}", home.RegionID, firstname, lastname); | ||
1027 | } | ||
1030 | 1028 | ||
1031 | // Establish the avatar's initial appearance | 1029 | // Establish the avatar's initial appearance |
1032 | 1030 | ||
@@ -1169,9 +1167,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1169 | /// <item><term>start_region_y</term> | 1167 | /// <item><term>start_region_y</term> |
1170 | /// <description>avatar's start region coordinates, Y | 1168 | /// <description>avatar's start region coordinates, Y |
1171 | /// value (changeable)</description></item> | 1169 | /// value (changeable)</description></item> |
1172 | /// <item><term>about_real_world</term> | 1170 | /// <item><term>about_real_world (not implemented yet)</term> |
1173 | /// <description>"about" text of avatar owner (changeable)</description></item> | 1171 | /// <description>"about" text of avatar owner (changeable)</description></item> |
1174 | /// <item><term>about_virtual_world</term> | 1172 | /// <item><term>about_virtual_world (not implemented yet)</term> |
1175 | /// <description>"about" text of avatar (changeable)</description></item> | 1173 | /// <description>"about" text of avatar (changeable)</description></item> |
1176 | /// </list> | 1174 | /// </list> |
1177 | /// | 1175 | /// |
@@ -1182,6 +1180,10 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1182 | /// <description>true or false</description></item> | 1180 | /// <description>true or false</description></item> |
1183 | /// <item><term>error</term> | 1181 | /// <item><term>error</term> |
1184 | /// <description>error message if success is false</description></item> | 1182 | /// <description>error message if success is false</description></item> |
1183 | /// <item><term>avatar_uuid</term> | ||
1184 | /// <description>UUID of the updated avatar | ||
1185 | /// account; UUID.Zero if failed. | ||
1186 | /// </description></item> | ||
1185 | /// </list> | 1187 | /// </list> |
1186 | /// </remarks> | 1188 | /// </remarks> |
1187 | 1189 | ||
@@ -1189,31 +1191,34 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1189 | { | 1191 | { |
1190 | m_log.Info("[RADMIN]: UpdateUserAccount: new request"); | 1192 | m_log.Info("[RADMIN]: UpdateUserAccount: new request"); |
1191 | m_log.Warn("[RADMIN]: This method needs update for 0.7"); | 1193 | m_log.Warn("[RADMIN]: This method needs update for 0.7"); |
1194 | |||
1195 | FailIfRemoteAdminDisabled("UpdateUserAccount"); | ||
1196 | |||
1192 | XmlRpcResponse response = new XmlRpcResponse(); | 1197 | XmlRpcResponse response = new XmlRpcResponse(); |
1193 | Hashtable responseData = new Hashtable(); | 1198 | Hashtable responseData = new Hashtable(); |
1194 | 1199 | ||
1195 | //lock (rslock) | 1200 | lock (rslock) |
1196 | //{ | 1201 | { |
1197 | // try | 1202 | try |
1198 | // { | 1203 | { |
1199 | // Hashtable requestData = (Hashtable) request.Params[0]; | 1204 | Hashtable requestData = (Hashtable) request.Params[0]; |
1200 | 1205 | ||
1201 | // // check completeness | 1206 | // check completeness |
1202 | // checkStringParameters(request, new string[] { | 1207 | checkStringParameters(request, new string[] { |
1203 | // "password", "user_firstname", | 1208 | "password", "user_firstname", |
1204 | // "user_lastname"}); | 1209 | "user_lastname"}); |
1205 | 1210 | ||
1206 | // // check password | 1211 | // check password |
1207 | // if (!String.IsNullOrEmpty(m_requiredPassword) && | 1212 | if (!String.IsNullOrEmpty(m_requiredPassword) && |
1208 | // (string) requestData["password"] != m_requiredPassword) throw new Exception("wrong password"); | 1213 | (string) requestData["password"] != m_requiredPassword) throw new Exception("wrong password"); |
1209 | 1214 | ||
1210 | // // do the job | 1215 | // do the job |
1211 | // string firstname = (string) requestData["user_firstname"]; | 1216 | string firstname = (string) requestData["user_firstname"]; |
1212 | // string lastname = (string) requestData["user_lastname"]; | 1217 | string lastname = (string) requestData["user_lastname"]; |
1213 | 1218 | ||
1214 | // string passwd = String.Empty; | 1219 | string passwd = String.Empty; |
1215 | // uint? regX = null; | 1220 | uint? regX = null; |
1216 | // uint? regY = null; | 1221 | uint? regY = null; |
1217 | // uint? ulaX = null; | 1222 | // uint? ulaX = null; |
1218 | // uint? ulaY = null; | 1223 | // uint? ulaY = null; |
1219 | // uint? ulaZ = null; | 1224 | // uint? ulaZ = null; |
@@ -1223,11 +1228,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1223 | // string aboutFirstLive = String.Empty; | 1228 | // string aboutFirstLive = String.Empty; |
1224 | // string aboutAvatar = String.Empty; | 1229 | // string aboutAvatar = String.Empty; |
1225 | 1230 | ||
1226 | // if (requestData.ContainsKey("user_password")) passwd = (string) requestData["user_password"]; | 1231 | if (requestData.ContainsKey("user_password")) passwd = (string) requestData["user_password"]; |
1227 | // if (requestData.ContainsKey("start_region_x")) | 1232 | if (requestData.ContainsKey("start_region_x")) |
1228 | // regX = Convert.ToUInt32((Int32) requestData["start_region_x"]); | 1233 | regX = Convert.ToUInt32((Int32) requestData["start_region_x"]); |
1229 | // if (requestData.ContainsKey("start_region_y")) | 1234 | if (requestData.ContainsKey("start_region_y")) |
1230 | // regY = Convert.ToUInt32((Int32) requestData["start_region_y"]); | 1235 | regY = Convert.ToUInt32((Int32) requestData["start_region_y"]); |
1231 | 1236 | ||
1232 | // if (requestData.ContainsKey("start_lookat_x")) | 1237 | // if (requestData.ContainsKey("start_lookat_x")) |
1233 | // ulaX = Convert.ToUInt32((Int32) requestData["start_lookat_x"]); | 1238 | // ulaX = Convert.ToUInt32((Int32) requestData["start_lookat_x"]); |
@@ -1247,21 +1252,18 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1247 | // if (requestData.ContainsKey("about_virtual_world")) | 1252 | // if (requestData.ContainsKey("about_virtual_world")) |
1248 | // aboutAvatar = (string)requestData["about_virtual_world"]; | 1253 | // aboutAvatar = (string)requestData["about_virtual_world"]; |
1249 | 1254 | ||
1250 | // UserProfileData userProfile | 1255 | Scene scene = m_app.SceneManager.CurrentOrFirstScene; |
1251 | // = m_app.CommunicationsManager.UserService.GetUserProfile(firstname, lastname); | 1256 | UUID scopeID = scene.RegionInfo.ScopeID; |
1252 | 1257 | UserAccount account = scene.UserAccountService.GetUserAccount(scopeID, firstname, lastname); | |
1253 | // if (null == userProfile) | ||
1254 | // throw new Exception(String.Format("avatar {0} {1} does not exist", firstname, lastname)); | ||
1255 | 1258 | ||
1256 | // if (!String.IsNullOrEmpty(passwd)) | 1259 | if (null == account) |
1257 | // { | 1260 | throw new Exception(String.Format("avatar {0} {1} does not exist", firstname, lastname)); |
1258 | // m_log.DebugFormat("[RADMIN]: UpdateUserAccount: updating password for avatar {0} {1}", firstname, lastname); | ||
1259 | // string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(passwd) + ":" + String.Empty); | ||
1260 | // userProfile.PasswordHash = md5PasswdHash; | ||
1261 | // } | ||
1262 | 1261 | ||
1263 | // if (null != regX) userProfile.HomeRegionX = (uint) regX; | 1262 | if (!String.IsNullOrEmpty(passwd)) |
1264 | // if (null != regY) userProfile.HomeRegionY = (uint) regY; | 1263 | { |
1264 | m_log.DebugFormat("[RADMIN]: UpdateUserAccount: updating password for avatar {0} {1}", firstname, lastname); | ||
1265 | ChangeUserPassword(firstname, lastname, passwd); | ||
1266 | } | ||
1265 | 1267 | ||
1266 | // if (null != usaX) userProfile.HomeLocationX = (uint) usaX; | 1268 | // if (null != usaX) userProfile.HomeLocationX = (uint) usaX; |
1267 | // if (null != usaY) userProfile.HomeLocationY = (uint) usaY; | 1269 | // if (null != usaY) userProfile.HomeLocationY = (uint) usaY; |
@@ -1274,35 +1276,48 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1274 | // if (String.Empty != aboutFirstLive) userProfile.FirstLifeAboutText = aboutFirstLive; | 1276 | // if (String.Empty != aboutFirstLive) userProfile.FirstLifeAboutText = aboutFirstLive; |
1275 | // if (String.Empty != aboutAvatar) userProfile.AboutText = aboutAvatar; | 1277 | // if (String.Empty != aboutAvatar) userProfile.AboutText = aboutAvatar; |
1276 | 1278 | ||
1277 | // // User has been created. Now establish gender and appearance. | 1279 | // Set home position |
1278 | 1280 | ||
1279 | // updateUserAppearance(responseData, requestData, userProfile.ID); | 1281 | if ((null != regX) && (null != regY)) |
1282 | { | ||
1283 | GridRegion home = scene.GridService.GetRegionByPosition(scopeID, | ||
1284 | (int)(regX * Constants.RegionSize), (int)(regY * Constants.RegionSize)); | ||
1285 | if (null == home) { | ||
1286 | m_log.WarnFormat("[RADMIN]: Unable to set home region for updated user account {0} {1}", firstname, lastname); | ||
1287 | } else { | ||
1288 | scene.GridUserService.SetHome(account.PrincipalID.ToString(), home.RegionID, new Vector3(128, 128, 0), new Vector3(0, 1, 0)); | ||
1289 | m_log.DebugFormat("[RADMIN]: Set home region {0} for updated user account {1} {2}", home.RegionID, firstname, lastname); | ||
1290 | } | ||
1291 | } | ||
1280 | 1292 | ||
1281 | // if (!m_app.CommunicationsManager.UserService.UpdateUserProfile(userProfile)) | 1293 | // User has been created. Now establish gender and appearance. |
1282 | // throw new Exception("did not manage to update user profile"); | ||
1283 | 1294 | ||
1284 | // responseData["success"] = true; | 1295 | updateUserAppearance(responseData, requestData, account.PrincipalID); |
1285 | 1296 | ||
1286 | // response.Value = responseData; | 1297 | responseData["success"] = true; |
1298 | responseData["avatar_uuid"] = account.PrincipalID.ToString(); | ||
1287 | 1299 | ||
1288 | // m_log.InfoFormat("[RADMIN]: UpdateUserAccount: account for user {0} {1} updated, UUID {2}", | 1300 | response.Value = responseData; |
1289 | // firstname, lastname, | ||
1290 | // userProfile.ID); | ||
1291 | // } | ||
1292 | // catch (Exception e) | ||
1293 | // { | ||
1294 | // m_log.ErrorFormat("[RADMIN] UpdateUserAccount: failed: {0}", e.Message); | ||
1295 | // m_log.DebugFormat("[RADMIN] UpdateUserAccount: failed: {0}", e.ToString()); | ||
1296 | 1301 | ||
1297 | // responseData["success"] = false; | 1302 | m_log.InfoFormat("[RADMIN]: UpdateUserAccount: account for user {0} {1} updated, UUID {2}", |
1298 | // responseData["error"] = e.Message; | 1303 | firstname, lastname, |
1304 | account.PrincipalID); | ||
1305 | } | ||
1306 | catch (Exception e) | ||
1307 | { | ||
1299 | 1308 | ||
1300 | // response.Value = responseData; | 1309 | m_log.ErrorFormat("[RADMIN] UpdateUserAccount: failed: {0}", e.Message); |
1301 | // } | 1310 | m_log.DebugFormat("[RADMIN] UpdateUserAccount: failed: {0}", e.ToString()); |
1302 | //} | ||
1303 | 1311 | ||
1304 | m_log.Info("[RADMIN]: UpdateUserAccount: request complete"); | 1312 | responseData["success"] = false; |
1305 | return response; | 1313 | responseData["avatar_uuid"] = UUID.Zero.ToString(); |
1314 | responseData["error"] = e.Message; | ||
1315 | |||
1316 | response.Value = responseData; | ||
1317 | } | ||
1318 | m_log.Info("[RADMIN]: UpdateUserAccount: request complete"); | ||
1319 | return response; | ||
1320 | } | ||
1306 | } | 1321 | } |
1307 | 1322 | ||
1308 | /// <summary> | 1323 | /// <summary> |
@@ -1316,73 +1331,74 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1316 | private void updateUserAppearance(Hashtable responseData, Hashtable requestData, UUID userid) | 1331 | private void updateUserAppearance(Hashtable responseData, Hashtable requestData, UUID userid) |
1317 | { | 1332 | { |
1318 | m_log.DebugFormat("[RADMIN] updateUserAppearance"); | 1333 | m_log.DebugFormat("[RADMIN] updateUserAppearance"); |
1319 | m_log.Warn("[RADMIN]: This method needs update for 0.7"); | ||
1320 | 1334 | ||
1321 | //string dmale = m_config.GetString("default_male", "Default Male"); | 1335 | string dmale = m_config.GetString("default_male", "Default Male"); |
1322 | //string dfemale = m_config.GetString("default_female", "Default Female"); | 1336 | string dfemale = m_config.GetString("default_female", "Default Female"); |
1323 | //string dneut = m_config.GetString("default_female", "Default Default"); | 1337 | string dneut = m_config.GetString("default_female", "Default Default"); |
1324 | string model = String.Empty; | 1338 | string model = String.Empty; |
1325 | 1339 | ||
1326 | //// Has a gender preference been supplied? | 1340 | // Has a gender preference been supplied? |
1327 | 1341 | ||
1328 | //if (requestData.Contains("gender")) | 1342 | if (requestData.Contains("gender")) |
1329 | //{ | 1343 | { |
1330 | // switch ((string)requestData["gender"]) | 1344 | switch ((string)requestData["gender"]) |
1331 | // { | 1345 | { |
1332 | // case "m" : | 1346 | case "m" : |
1333 | // model = dmale; | 1347 | case "male" : |
1334 | // break; | 1348 | model = dmale; |
1335 | // case "f" : | 1349 | break; |
1336 | // model = dfemale; | 1350 | case "f" : |
1337 | // break; | 1351 | case "female" : |
1338 | // case "n" : | 1352 | model = dfemale; |
1339 | // default : | 1353 | break; |
1340 | // model = dneut; | 1354 | case "n" : |
1341 | // break; | 1355 | case "neutral" : |
1342 | // } | 1356 | default : |
1343 | //} | 1357 | model = dneut; |
1344 | 1358 | break; | |
1345 | //// Has an explicit model been specified? | 1359 | } |
1346 | 1360 | } | |
1347 | //if (requestData.Contains("model")) | 1361 | |
1348 | //{ | 1362 | // Has an explicit model been specified? |
1349 | // model = (string)requestData["model"]; | 1363 | |
1350 | //} | 1364 | if (requestData.Contains("model") && (String.IsNullOrEmpty((string)requestData["gender"]))) |
1351 | 1365 | { | |
1352 | //// No appearance attributes were set | 1366 | model = (string)requestData["model"]; |
1353 | 1367 | } | |
1354 | //if (model == String.Empty) | 1368 | |
1355 | //{ | 1369 | // No appearance attributes were set |
1356 | // m_log.DebugFormat("[RADMIN] Appearance update not requested"); | 1370 | |
1357 | // return; | 1371 | if (String.IsNullOrEmpty(model)) |
1358 | //} | 1372 | { |
1359 | 1373 | m_log.DebugFormat("[RADMIN] Appearance update not requested"); | |
1360 | //m_log.DebugFormat("[RADMIN] Setting appearance for avatar {0}, using model {1}", userid, model); | 1374 | return; |
1361 | 1375 | } | |
1362 | //string[] nomens = model.Split(); | 1376 | |
1363 | //if (nomens.Length != 2) | 1377 | m_log.DebugFormat("[RADMIN] Setting appearance for avatar {0}, using model <{1}>", userid, model); |
1364 | //{ | 1378 | |
1365 | // m_log.WarnFormat("[RADMIN] User appearance not set for {0}. Invalid model name : <{1}>", userid, model); | 1379 | string[] nomens = model.Split(); |
1366 | // // nomens = dmodel.Split(); | 1380 | if (nomens.Length != 2) |
1367 | // return; | 1381 | { |
1368 | //} | 1382 | m_log.WarnFormat("[RADMIN] User appearance not set for {0}. Invalid model name : <{1}>", userid, model); |
1369 | 1383 | // nomens = dmodel.Split(); | |
1370 | //UserProfileData mprof = m_app.CommunicationsManager.UserService.GetUserProfile(nomens[0], nomens[1]); | 1384 | return; |
1371 | 1385 | } | |
1372 | //// Is this the first time one of the default models has been used? Create it if that is the case | 1386 | |
1373 | //// otherwise default to male. | 1387 | Scene scene = m_app.SceneManager.CurrentOrFirstScene; |
1374 | 1388 | UUID scopeID = scene.RegionInfo.ScopeID; | |
1375 | //if (mprof == null) | 1389 | UserAccount mprof = scene.UserAccountService.GetUserAccount(scopeID, nomens[0], nomens[1]); |
1376 | //{ | 1390 | |
1377 | // m_log.WarnFormat("[RADMIN] Requested model ({0}) not found. Appearance unchanged", model); | 1391 | if (mprof == null) |
1378 | // return; | 1392 | { |
1379 | //} | 1393 | m_log.WarnFormat("[RADMIN] Requested model ({0}) not found. Appearance unchanged", model); |
1380 | 1394 | return; | |
1381 | //// Set current user's appearance. This bit is easy. The appearance structure is populated with | 1395 | } |
1382 | //// actual asset ids, however to complete the magic we need to populate the inventory with the | 1396 | |
1383 | //// assets in question. | 1397 | // Set current user's appearance. This bit is easy. The appearance structure is populated with |
1384 | 1398 | // actual asset ids, however to complete the magic we need to populate the inventory with the | |
1385 | //establishAppearance(userid, mprof.ID); | 1399 | // assets in question. |
1400 | |||
1401 | establishAppearance(userid, mprof.PrincipalID); | ||
1386 | 1402 | ||
1387 | m_log.DebugFormat("[RADMIN] Finished setting appearance for avatar {0}, using model {1}", | 1403 | m_log.DebugFormat("[RADMIN] Finished setting appearance for avatar {0}, using model {1}", |
1388 | userid, model); | 1404 | userid, model); |
@@ -1397,116 +1413,312 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1397 | private void establishAppearance(UUID dest, UUID srca) | 1413 | private void establishAppearance(UUID dest, UUID srca) |
1398 | { | 1414 | { |
1399 | m_log.DebugFormat("[RADMIN] Initializing inventory for {0} from {1}", dest, srca); | 1415 | m_log.DebugFormat("[RADMIN] Initializing inventory for {0} from {1}", dest, srca); |
1416 | Scene scene = m_app.SceneManager.CurrentOrFirstScene; | ||
1400 | AvatarAppearance ava = null; | 1417 | AvatarAppearance ava = null; |
1401 | AvatarData avatar = m_app.SceneManager.CurrentOrFirstScene.AvatarService.GetAvatar(srca); | 1418 | AvatarData avatar = scene.AvatarService.GetAvatar(srca); |
1402 | if (avatar != null) | 1419 | if (avatar != null) |
1403 | ava = avatar.ToAvatarAppearance(srca); | 1420 | ava = avatar.ToAvatarAppearance(srca); |
1404 | 1421 | ||
1405 | // If the model has no associated appearance we're done. | 1422 | // If the model has no associated appearance we're done. |
1406 | |||
1407 | // if (ava == null) | ||
1408 | // { | ||
1409 | // return new AvatarAppearance(); | ||
1410 | // } | ||
1411 | |||
1412 | if (ava == null) | 1423 | if (ava == null) |
1413 | return; | 1424 | return; |
1414 | 1425 | ||
1415 | UICallback sic = new UICallback(); | 1426 | // Simple appearance copy or copy Clothing and Bodyparts folders? |
1416 | UICallback dic = new UICallback(); | 1427 | bool copyFolders = m_config.GetBoolean("copy_folders", false); |
1417 | IInventoryService iserv = m_app.SceneManager.CurrentOrFirstScene.InventoryService; | 1428 | |
1429 | if (!copyFolders) | ||
1430 | { | ||
1431 | // Simple copy of wearables and appearance update | ||
1432 | try | ||
1433 | { | ||
1434 | copyWearablesAndAttachments(dest, srca, ava); | ||
1418 | 1435 | ||
1436 | AvatarData adata = new AvatarData(ava); | ||
1437 | scene.AvatarService.SetAvatar(dest, adata); | ||
1438 | } | ||
1439 | catch (Exception e) | ||
1440 | { | ||
1441 | m_log.WarnFormat("[RADMIN] Error transferring appearance for {0} : {1}", | ||
1442 | dest, e.Message); | ||
1443 | } | ||
1444 | |||
1445 | return; | ||
1446 | } | ||
1447 | |||
1448 | // Copy Clothing and Bodypart folders and appearance update | ||
1419 | try | 1449 | try |
1420 | { | 1450 | { |
1421 | Dictionary<UUID,UUID> imap = new Dictionary<UUID,UUID>(); | 1451 | Dictionary<UUID,UUID> imap = new Dictionary<UUID,UUID>(); |
1452 | copyInventoryFolders(dest, srca, AssetType.Clothing, imap, ava); | ||
1453 | copyInventoryFolders(dest, srca, AssetType.Bodypart, imap, ava); | ||
1422 | 1454 | ||
1423 | iserv.GetUserInventory(dest, dic.callback); | 1455 | AvatarWearable[] wearables = ava.Wearables; |
1424 | iserv.GetUserInventory(srca, sic.callback); | ||
1425 | |||
1426 | dic.GetInventory(); | ||
1427 | sic.GetInventory(); | ||
1428 | 1456 | ||
1429 | if (sic.OK && dic.OK) | 1457 | for (int i=0; i<wearables.Length; i++) |
1430 | { | 1458 | { |
1431 | InventoryFolderImpl efolder; | 1459 | if (imap.ContainsKey(wearables[i].ItemID)) |
1432 | InventoryFolderImpl srcf = sic.root.FindFolderForType(5); | 1460 | { |
1433 | InventoryFolderImpl dstf = dic.root.FindFolderForType(5); | 1461 | AvatarWearable dw = new AvatarWearable(); |
1462 | dw.AssetID = wearables[i].AssetID; | ||
1463 | dw.ItemID = imap[wearables[i].ItemID]; | ||
1464 | ava.SetWearable(i, dw); | ||
1465 | } | ||
1466 | } | ||
1467 | |||
1468 | AvatarData adata = new AvatarData(ava); | ||
1469 | scene.AvatarService.SetAvatar(dest, adata); | ||
1470 | } | ||
1471 | catch (Exception e) | ||
1472 | { | ||
1473 | m_log.WarnFormat("[RADMIN] Error transferring appearance for {0} : {1}", | ||
1474 | dest, e.Message); | ||
1475 | } | ||
1434 | 1476 | ||
1435 | if (srcf == null || dstf == null) | 1477 | return; |
1436 | throw new Exception("Cannot locate clothing folder(s)"); | 1478 | } |
1479 | |||
1480 | /// <summary> | ||
1481 | /// This method is called by establishAppearance to do a copy all inventory items | ||
1482 | /// worn or attached to the Clothing inventory folder of the receiving avatar. | ||
1483 | /// In parallel the avatar wearables and attachments are updated. | ||
1484 | /// </summary> | ||
1485 | |||
1486 | private void copyWearablesAndAttachments(UUID dest, UUID srca, AvatarAppearance ava) | ||
1487 | { | ||
1488 | IInventoryService iserv = m_app.SceneManager.CurrentOrFirstScene.InventoryService; | ||
1437 | 1489 | ||
1438 | foreach (InventoryFolderImpl folder in sic.folders) | 1490 | // Get Clothing folder of receiver |
1491 | InventoryFolderBase dstf = iserv.GetFolderForType(dest, AssetType.Clothing); | ||
1492 | |||
1493 | if (dstf == null) | ||
1494 | throw new Exception("Cannot locate folder(s)"); | ||
1495 | |||
1496 | // Missing destination folder? This should *never* be the case | ||
1497 | if (dstf.Type != (short)AssetType.Clothing) | ||
1498 | { | ||
1499 | dstf = new InventoryFolderBase(); | ||
1500 | dstf.ID = UUID.Random(); | ||
1501 | dstf.Name = "Clothing"; | ||
1502 | dstf.Owner = dest; | ||
1503 | dstf.Type = (short)AssetType.Clothing; | ||
1504 | dstf.ParentID = iserv.GetRootFolder(dest).ID; | ||
1505 | dstf.Version = 1; | ||
1506 | iserv.AddFolder(dstf); // store base record | ||
1507 | m_log.ErrorFormat("[RADMIN] Created folder for destination {0}", srca); | ||
1508 | } | ||
1509 | |||
1510 | // Wearables | ||
1511 | AvatarWearable[] wearables = ava.Wearables; | ||
1512 | AvatarWearable wearable; | ||
1513 | |||
1514 | for (int i=0; i<wearables.Length; i++) | ||
1515 | { | ||
1516 | wearable = wearables[i]; | ||
1517 | if (wearable.ItemID != UUID.Zero) | ||
1518 | { | ||
1519 | // Get inventory item and copy it | ||
1520 | InventoryItemBase item = new InventoryItemBase(wearable.ItemID, srca); | ||
1521 | item = iserv.GetItem(item); | ||
1522 | |||
1523 | if (item != null) | ||
1439 | { | 1524 | { |
1440 | if (folder.ParentID == srcf.ID) | 1525 | InventoryItemBase dsti = new InventoryItemBase(UUID.Random(), dest); |
1441 | { | 1526 | dsti.Name = item.Name; |
1442 | efolder = new InventoryFolderImpl(); | 1527 | dsti.Description = item.Description; |
1443 | efolder.ID = UUID.Random(); | 1528 | dsti.InvType = item.InvType; |
1444 | efolder.Name = folder.Name; | 1529 | dsti.CreatorId = item.CreatorId; |
1445 | efolder.Type = folder.Type; | 1530 | dsti.CreatorIdAsUuid = item.CreatorIdAsUuid; |
1446 | efolder.Version = folder.Version; | 1531 | dsti.NextPermissions = item.NextPermissions; |
1447 | efolder.Owner = dest; | 1532 | dsti.CurrentPermissions = item.CurrentPermissions; |
1448 | dstf.AddChildFolder(efolder); | 1533 | dsti.BasePermissions = item.BasePermissions; |
1449 | iserv.AddFolder(efolder); | 1534 | dsti.EveryOnePermissions = item.EveryOnePermissions; |
1450 | m_log.DebugFormat("[RADMIN] Added outfile folder {0} to folder {1}", efolder.ID, srcf.ID); | 1535 | dsti.GroupPermissions = item.GroupPermissions; |
1451 | foreach (InventoryItemBase item in sic.items) | 1536 | dsti.AssetType = item.AssetType; |
1452 | { | 1537 | dsti.AssetID = item.AssetID; |
1453 | if (item.Folder == folder.ID) | 1538 | dsti.GroupID = item.GroupID; |
1454 | { | 1539 | dsti.GroupOwned = item.GroupOwned; |
1455 | InventoryItemBase dsti = new InventoryItemBase(); | 1540 | dsti.SalePrice = item.SalePrice; |
1456 | dsti.ID = UUID.Random(); | 1541 | dsti.SaleType = item.SaleType; |
1457 | dsti.Name = item.Name; | 1542 | dsti.Flags = item.Flags; |
1458 | dsti.Description = item.Description; | 1543 | dsti.CreationDate = item.CreationDate; |
1459 | dsti.InvType = item.InvType; | 1544 | dsti.Folder = dstf.ID; |
1460 | dsti.AssetType = item.AssetType; | 1545 | |
1461 | dsti.Flags = item.Flags; | 1546 | iserv.AddItem(dsti); |
1462 | dsti.AssetID = item.AssetID; | 1547 | m_log.DebugFormat("[RADMIN] Added item {0} to folder {1}", dsti.ID, dstf.ID); |
1463 | dsti.Folder = efolder.ID; | 1548 | |
1464 | dsti.Owner = dest; | 1549 | // Wear item |
1465 | dsti.BasePermissions = item.BasePermissions; | 1550 | AvatarWearable dw = new AvatarWearable(); |
1466 | dsti.NextPermissions = item.NextPermissions; | 1551 | dw.AssetID = wearable.AssetID; |
1467 | dsti.CurrentPermissions = item.CurrentPermissions; | 1552 | dw.ItemID = dsti.ID; |
1468 | dsti.GroupPermissions = item.GroupPermissions; | 1553 | ava.SetWearable(i, dw); |
1469 | dsti.EveryOnePermissions = item.EveryOnePermissions; | ||
1470 | iserv.AddItem(dsti); | ||
1471 | imap.Add(item.ID, dsti.ID); | ||
1472 | m_log.DebugFormat("[RADMIN] Added item {0} to folder {1}", dsti.ID, efolder.ID); | ||
1473 | } | ||
1474 | } | ||
1475 | } | ||
1476 | } | 1554 | } |
1477 | 1555 | else | |
1478 | // Update appearance tables | ||
1479 | AvatarWearable[] wearables = ava.Wearables; | ||
1480 | for (int i=0; i<wearables.Length; i++) | ||
1481 | { | 1556 | { |
1482 | if (imap.ContainsKey(wearables[i].ItemID)) | 1557 | m_log.WarnFormat("[RADMIN] Error transferring {0} to folder {1}", wearable.ItemID, dstf.ID); |
1483 | { | ||
1484 | AvatarWearable dw = new AvatarWearable(); | ||
1485 | dw.AssetID = wearables[i].AssetID; | ||
1486 | dw.ItemID = imap[wearables[i].ItemID]; | ||
1487 | ava.SetWearable(i, dw); | ||
1488 | } | ||
1489 | } | 1558 | } |
1490 | } | 1559 | } |
1491 | else | 1560 | } |
1561 | |||
1562 | // Attachments | ||
1563 | Dictionary<int, UUID[]> attachments = ava.GetAttachmentDictionary(); | ||
1564 | |||
1565 | foreach (KeyValuePair<int, UUID[]> kvp in attachments) | ||
1566 | { | ||
1567 | int attachpoint = kvp.Key; | ||
1568 | UUID itemID = kvp.Value[0]; | ||
1569 | |||
1570 | if (itemID != UUID.Zero) | ||
1492 | { | 1571 | { |
1493 | throw new Exception("Unable to load both inventories"); | 1572 | // Get inventory item and copy it |
1573 | InventoryItemBase item = new InventoryItemBase(itemID, srca); | ||
1574 | item = iserv.GetItem(item); | ||
1575 | |||
1576 | if (item != null) | ||
1577 | { | ||
1578 | InventoryItemBase dsti = new InventoryItemBase(UUID.Random(), dest); | ||
1579 | dsti.Name = item.Name; | ||
1580 | dsti.Description = item.Description; | ||
1581 | dsti.InvType = item.InvType; | ||
1582 | dsti.CreatorId = item.CreatorId; | ||
1583 | dsti.CreatorIdAsUuid = item.CreatorIdAsUuid; | ||
1584 | dsti.NextPermissions = item.NextPermissions; | ||
1585 | dsti.CurrentPermissions = item.CurrentPermissions; | ||
1586 | dsti.BasePermissions = item.BasePermissions; | ||
1587 | dsti.EveryOnePermissions = item.EveryOnePermissions; | ||
1588 | dsti.GroupPermissions = item.GroupPermissions; | ||
1589 | dsti.AssetType = item.AssetType; | ||
1590 | dsti.AssetID = item.AssetID; | ||
1591 | dsti.GroupID = item.GroupID; | ||
1592 | dsti.GroupOwned = item.GroupOwned; | ||
1593 | dsti.SalePrice = item.SalePrice; | ||
1594 | dsti.SaleType = item.SaleType; | ||
1595 | dsti.Flags = item.Flags; | ||
1596 | dsti.CreationDate = item.CreationDate; | ||
1597 | dsti.Folder = dstf.ID; | ||
1598 | |||
1599 | iserv.AddItem(dsti); | ||
1600 | m_log.DebugFormat("[RADMIN] Added item {0} to folder {1}", dsti.ID, dstf.ID); | ||
1601 | |||
1602 | // Attach item | ||
1603 | ava.SetAttachment(attachpoint, dsti.ID, dsti.AssetID); | ||
1604 | m_log.DebugFormat("[RADMIN] Attached {0}", dsti.ID); | ||
1605 | } | ||
1606 | else | ||
1607 | { | ||
1608 | m_log.WarnFormat("[RADMIN] Error transferring {0} to folder {1}", itemID, dstf.ID); | ||
1609 | } | ||
1494 | } | 1610 | } |
1611 | } | ||
1495 | 1612 | ||
1496 | AvatarData adata = new AvatarData(ava); | 1613 | |
1497 | m_app.SceneManager.CurrentOrFirstScene.AvatarService.SetAvatar(dest, adata); | 1614 | } |
1615 | |||
1616 | /// <summary> | ||
1617 | /// This method is called by establishAppearance to copy inventory folders to make | ||
1618 | /// copies of Clothing and Bodyparts inventory folders and attaches worn attachments | ||
1619 | /// </summary> | ||
1620 | |||
1621 | private void copyInventoryFolders(UUID dest, UUID srca, AssetType assettype, Dictionary<UUID,UUID> imap, | ||
1622 | AvatarAppearance ava) | ||
1623 | { | ||
1624 | IInventoryService iserv = m_app.SceneManager.CurrentOrFirstScene.InventoryService; | ||
1625 | |||
1626 | InventoryFolderBase srcf = iserv.GetFolderForType(srca, assettype); | ||
1627 | InventoryFolderBase dstf = iserv.GetFolderForType(dest, assettype); | ||
1628 | |||
1629 | if (srcf == null || dstf == null) | ||
1630 | throw new Exception("Cannot locate folder(s)"); | ||
1631 | |||
1632 | // Missing source folder? This should *never* be the case | ||
1633 | if (srcf.Type != (short)assettype) | ||
1634 | { | ||
1635 | srcf = new InventoryFolderBase(); | ||
1636 | srcf.ID = UUID.Random(); | ||
1637 | if (assettype == AssetType.Clothing) { | ||
1638 | srcf.Name = "Clothing"; | ||
1639 | } else { | ||
1640 | srcf.Name = "Body Parts"; | ||
1641 | } | ||
1642 | srcf.Owner = srca; | ||
1643 | srcf.Type = (short)assettype; | ||
1644 | srcf.ParentID = iserv.GetRootFolder(srca).ID; | ||
1645 | srcf.Version = 1; | ||
1646 | iserv.AddFolder(srcf); // store base record | ||
1647 | m_log.ErrorFormat("[RADMIN] Created folder for source {0}", srca); | ||
1498 | } | 1648 | } |
1499 | catch (Exception e) | 1649 | |
1650 | // Missing destination folder? This should *never* be the case | ||
1651 | if (dstf.Type != (short)assettype) | ||
1500 | { | 1652 | { |
1501 | m_log.WarnFormat("[RADMIN] Error transferring inventory for {0} : {1}", | 1653 | dstf = new InventoryFolderBase(); |
1502 | dest, e.Message); | 1654 | dstf.ID = UUID.Random(); |
1503 | return; | 1655 | dstf.Name = assettype.ToString(); |
1656 | dstf.Owner = dest; | ||
1657 | dstf.Type = (short)assettype; | ||
1658 | dstf.ParentID = iserv.GetRootFolder(dest).ID; | ||
1659 | dstf.Version = 1; | ||
1660 | iserv.AddFolder(dstf); // store base record | ||
1661 | m_log.ErrorFormat("[RADMIN] Created folder for destination {0}", srca); | ||
1504 | } | 1662 | } |
1505 | 1663 | ||
1506 | return; | 1664 | InventoryFolderBase efolder; |
1665 | List<InventoryFolderBase> folders = iserv.GetFolderContent(srca, srcf.ID).Folders; | ||
1666 | |||
1667 | foreach (InventoryFolderBase folder in folders) | ||
1668 | { | ||
1669 | |||
1670 | efolder = new InventoryFolderBase(); | ||
1671 | efolder.ID = UUID.Random(); | ||
1672 | efolder.Name = folder.Name; | ||
1673 | efolder.Owner = dest; | ||
1674 | efolder.Type = folder.Type; | ||
1675 | efolder.Version = folder.Version; | ||
1676 | efolder.ParentID = dstf.ID; | ||
1677 | iserv.AddFolder(efolder); | ||
1678 | |||
1679 | m_log.DebugFormat("[RADMIN] Added folder {0} to folder {1}", efolder.ID, srcf.ID); | ||
1680 | |||
1681 | List<InventoryItemBase> items = iserv.GetFolderContent(srca, folder.ID).Items; | ||
1682 | |||
1683 | foreach (InventoryItemBase item in items) | ||
1684 | { | ||
1685 | InventoryItemBase dsti = new InventoryItemBase(UUID.Random(), dest); | ||
1686 | dsti.Name = item.Name; | ||
1687 | dsti.Description = item.Description; | ||
1688 | dsti.InvType = item.InvType; | ||
1689 | dsti.CreatorId = item.CreatorId; | ||
1690 | dsti.CreatorIdAsUuid = item.CreatorIdAsUuid; | ||
1691 | dsti.NextPermissions = item.NextPermissions; | ||
1692 | dsti.CurrentPermissions = item.CurrentPermissions; | ||
1693 | dsti.BasePermissions = item.BasePermissions; | ||
1694 | dsti.EveryOnePermissions = item.EveryOnePermissions; | ||
1695 | dsti.GroupPermissions = item.GroupPermissions; | ||
1696 | dsti.AssetType = item.AssetType; | ||
1697 | dsti.AssetID = item.AssetID; | ||
1698 | dsti.GroupID = item.GroupID; | ||
1699 | dsti.GroupOwned = item.GroupOwned; | ||
1700 | dsti.SalePrice = item.SalePrice; | ||
1701 | dsti.SaleType = item.SaleType; | ||
1702 | dsti.Flags = item.Flags; | ||
1703 | dsti.CreationDate = item.CreationDate; | ||
1704 | dsti.Folder = efolder.ID; | ||
1705 | |||
1706 | iserv.AddItem(dsti); | ||
1707 | imap.Add(item.ID, dsti.ID); | ||
1708 | m_log.DebugFormat("[RADMIN] Added item {0} to folder {1}", dsti.ID, efolder.ID); | ||
1709 | |||
1710 | // Attach item, if original is attached | ||
1711 | int attachpoint = ava.GetAttachpoint(item.ID); | ||
1712 | if (attachpoint != 0) | ||
1713 | { | ||
1714 | ava.SetAttachment(attachpoint, dsti.ID, dsti.AssetID); | ||
1715 | m_log.DebugFormat("[RADMIN] Attached {0}", dsti.ID); | ||
1716 | } | ||
1717 | } | ||
1718 | } | ||
1507 | } | 1719 | } |
1508 | 1720 | ||
1509 | ///<summary> | 1721 | /// <summary> |
1510 | /// This method is called if a given model avatar name can not be found. If the external | 1722 | /// This method is called if a given model avatar name can not be found. If the external |
1511 | /// file has already been loaded once, then control returns immediately. If not, then it | 1723 | /// file has already been loaded once, then control returns immediately. If not, then it |
1512 | /// looks for a default appearance file. This file contains XML definitions of zero or more named | 1724 | /// looks for a default appearance file. This file contains XML definitions of zero or more named |
@@ -1557,9 +1769,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1557 | bool include = false; | 1769 | bool include = false; |
1558 | bool select = false; | 1770 | bool select = false; |
1559 | 1771 | ||
1560 | UICallback uic; | 1772 | Scene scene = m_app.SceneManager.CurrentOrFirstScene; |
1561 | IInventoryService iserv = m_app.SceneManager.CurrentOrFirstScene.InventoryService; | 1773 | IInventoryService iserv = scene.InventoryService; |
1562 | IAssetService aserv = m_app.SceneManager.CurrentOrFirstScene.AssetService; | 1774 | IAssetService aserv = scene.AssetService; |
1563 | 1775 | ||
1564 | doc.LoadXml(File.ReadAllText(dafn)); | 1776 | doc.LoadXml(File.ReadAllText(dafn)); |
1565 | 1777 | ||
@@ -1596,29 +1808,31 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1596 | passwd = GetStringAttribute(avatar,"password",passwd); | 1808 | passwd = GetStringAttribute(avatar,"password",passwd); |
1597 | 1809 | ||
1598 | string[] nomens = name.Split(); | 1810 | string[] nomens = name.Split(); |
1599 | UUID scopeID = m_app.SceneManager.CurrentOrFirstScene.RegionInfo.ScopeID; | 1811 | UUID scopeID = scene.RegionInfo.ScopeID; |
1600 | UserAccount account = m_app.SceneManager.CurrentOrFirstScene.UserAccountService.GetUserAccount(scopeID, nomens[0], nomens[1]); | 1812 | UserAccount account = scene.UserAccountService.GetUserAccount(scopeID, nomens[0], nomens[1]); |
1601 | if (null == account) | 1813 | if (null == account) |
1602 | { | 1814 | { |
1603 | account = new UserAccount(scopeID, nomens[0], nomens[1], email); | 1815 | account = CreateUser(scopeID, nomens[0], nomens[1], passwd, email); |
1604 | bool success = m_app.SceneManager.CurrentOrFirstScene.UserAccountService.StoreUserAccount(account); | 1816 | if (null == account) |
1605 | if (!success) | ||
1606 | { | 1817 | { |
1607 | m_log.ErrorFormat("[RADMIN] Avatar {0} {1} was not created", nomens[0], nomens[1]); | 1818 | m_log.ErrorFormat("[RADMIN] Avatar {0} {1} was not created", nomens[0], nomens[1]); |
1608 | return false; | 1819 | return false; |
1609 | } | 1820 | } |
1610 | // !!! REFACTORING PROBLEM: need to set the password | ||
1611 | |||
1612 | GridRegion home = m_app.SceneManager.CurrentOrFirstScene.GridService.GetRegionByPosition(scopeID, | ||
1613 | (int)(regX * Constants.RegionSize), (int)(regY * Constants.RegionSize)); | ||
1614 | if (home != null) | ||
1615 | m_app.SceneManager.CurrentOrFirstScene.GridUserService.SetHome(account.PrincipalID.ToString(), home.RegionID, new Vector3(128, 128, 0), new Vector3(0, 1, 0)); | ||
1616 | } | 1821 | } |
1617 | else | 1822 | |
1618 | { | 1823 | // Set home position |
1619 | ID = account.PrincipalID; | 1824 | |
1825 | GridRegion home = scene.GridService.GetRegionByPosition(scopeID, | ||
1826 | (int)(regX * Constants.RegionSize), (int)(regY * Constants.RegionSize)); | ||
1827 | if (null == home) { | ||
1828 | m_log.WarnFormat("[RADMIN]: Unable to set home region for newly created user account {0} {1}", nomens[0], nomens[1]); | ||
1829 | } else { | ||
1830 | scene.GridUserService.SetHome(account.PrincipalID.ToString(), home.RegionID, new Vector3(128, 128, 0), new Vector3(0, 1, 0)); | ||
1831 | m_log.DebugFormat("[RADMIN]: Set home region {0} for updated user account {1} {2}", home.RegionID, nomens[0], nomens[1]); | ||
1620 | } | 1832 | } |
1621 | 1833 | ||
1834 | ID = account.PrincipalID; | ||
1835 | |||
1622 | m_log.DebugFormat("[RADMIN] User {0}[{1}] created or retrieved", name, ID); | 1836 | m_log.DebugFormat("[RADMIN] User {0}[{1}] created or retrieved", name, ID); |
1623 | include = true; | 1837 | include = true; |
1624 | } | 1838 | } |
@@ -1635,46 +1849,36 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1635 | 1849 | ||
1636 | if (include) | 1850 | if (include) |
1637 | { | 1851 | { |
1638 | uic = new UICallback(); | 1852 | // Setup for appearance processing |
1639 | // Request the inventory | 1853 | AvatarData adata = scene.AvatarService.GetAvatar(ID); |
1640 | iserv.GetUserInventory(ID, uic.callback); | ||
1641 | |||
1642 | // While the inventory is being fetched, setup for appearance processing | ||
1643 | AvatarData adata = m_app.SceneManager.CurrentOrFirstScene.AvatarService.GetAvatar(ID); | ||
1644 | if (adata != null) | 1854 | if (adata != null) |
1645 | mava = adata.ToAvatarAppearance(ID); | 1855 | mava = adata.ToAvatarAppearance(ID); |
1646 | else | 1856 | else |
1647 | mava = new AvatarAppearance(); | 1857 | mava = new AvatarAppearance(); |
1648 | 1858 | ||
1859 | AvatarWearable[] wearables = mava.Wearables; | ||
1860 | for (int i=0; i<wearables.Length; i++) | ||
1649 | { | 1861 | { |
1650 | AvatarWearable[] wearables = mava.Wearables; | 1862 | wearables[i] = new AvatarWearable(); |
1651 | for (int i=0; i<wearables.Length; i++) | ||
1652 | { | ||
1653 | wearables[i] = new AvatarWearable(); | ||
1654 | } | ||
1655 | } | 1863 | } |
1656 | 1864 | ||
1657 | // Wait for the inventory to arrive | ||
1658 | uic.GetInventory(); | ||
1659 | |||
1660 | // We can only get dresssed if an inventory is forthcoming | ||
1661 | if (uic.OK) | ||
1662 | try | 1865 | try |
1663 | { | 1866 | { |
1664 | m_log.DebugFormat("[RADMIN] {0} folders, {1} items in inventory", | 1867 | // m_log.DebugFormat("[RADMIN] {0} folders, {1} items in inventory", |
1665 | uic.folders.Count, uic.items.Count); | 1868 | // uic.folders.Count, uic.items.Count); |
1666 | 1869 | ||
1667 | InventoryFolderImpl cfolder = uic.root.FindFolderForType(5); | 1870 | InventoryFolderBase cfolder = iserv.GetFolderForType(ID, AssetType.Clothing); |
1668 | 1871 | ||
1669 | // This should *never* be the case | 1872 | // This should *never* be the case |
1670 | if (cfolder == null) | 1873 | if (cfolder == null || cfolder.Type != (short)AssetType.Clothing) |
1671 | { | 1874 | { |
1672 | cfolder = new InventoryFolderImpl(); | 1875 | cfolder = new InventoryFolderBase(); |
1876 | cfolder.ID = UUID.Random(); | ||
1673 | cfolder.Name = "Clothing"; | 1877 | cfolder.Name = "Clothing"; |
1674 | cfolder.Type = 5; | ||
1675 | cfolder.Version = 1; | ||
1676 | cfolder.Owner = ID; | 1878 | cfolder.Owner = ID; |
1677 | uic.root.AddChildFolder(cfolder); // make connection | 1879 | cfolder.Type = (short)AssetType.Clothing; |
1880 | cfolder.ParentID = iserv.GetRootFolder(ID).ID; | ||
1881 | cfolder.Version = 1; | ||
1678 | iserv.AddFolder(cfolder); // store base record | 1882 | iserv.AddFolder(cfolder); // store base record |
1679 | m_log.ErrorFormat("[RADMIN] Created clothing folder for {0}/{1}", name, ID); | 1883 | m_log.ErrorFormat("[RADMIN] Created clothing folder for {0}/{1}", name, ID); |
1680 | } | 1884 | } |
@@ -1683,7 +1887,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1683 | // default appearance XMl file. | 1887 | // default appearance XMl file. |
1684 | 1888 | ||
1685 | XmlNodeList outfits = avatar.GetElementsByTagName("Ensemble"); | 1889 | XmlNodeList outfits = avatar.GetElementsByTagName("Ensemble"); |
1686 | InventoryFolderImpl efolder; | 1890 | InventoryFolderBase efolder; |
1687 | string oname; | 1891 | string oname; |
1688 | UUID assetid; | 1892 | UUID assetid; |
1689 | 1893 | ||
@@ -1694,13 +1898,16 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1694 | 1898 | ||
1695 | oname = GetStringAttribute(outfit,"name",""); | 1899 | oname = GetStringAttribute(outfit,"name",""); |
1696 | select = (GetStringAttribute(outfit,"default","no") == "yes"); | 1900 | select = (GetStringAttribute(outfit,"default","no") == "yes"); |
1697 | efolder = null; | ||
1698 | 1901 | ||
1699 | // If the folder already exists, re-use it. The defaults may | 1902 | // If the folder already exists, re-use it. The defaults may |
1700 | // change over time. Augment only. | 1903 | // change over time. Augment only. |
1701 | foreach (InventoryFolderImpl folder in uic.folders) | 1904 | |
1905 | List<InventoryFolderBase> folders = iserv.GetFolderContent(ID, cfolder.ID).Folders; | ||
1906 | efolder = null; | ||
1907 | |||
1908 | foreach (InventoryFolderBase folder in folders) | ||
1702 | { | 1909 | { |
1703 | if (folder.Name == oname && folder.ParentID == cfolder.ID) | 1910 | if (folder.Name == oname) |
1704 | { | 1911 | { |
1705 | efolder = folder; | 1912 | efolder = folder; |
1706 | break; | 1913 | break; |
@@ -1711,14 +1918,14 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1711 | if (efolder == null) | 1918 | if (efolder == null) |
1712 | { | 1919 | { |
1713 | m_log.DebugFormat("[RADMIN] Creating outfit folder {0} for {1}", oname, name); | 1920 | m_log.DebugFormat("[RADMIN] Creating outfit folder {0} for {1}", oname, name); |
1714 | efolder = new InventoryFolderImpl(); | 1921 | efolder = new InventoryFolderBase(); |
1715 | efolder.ID = UUID.Random(); | 1922 | efolder.ID = UUID.Random(); |
1716 | efolder.Name = oname; | 1923 | efolder.Name = oname; |
1717 | efolder.Type = 5; | ||
1718 | efolder.Version = 1; | ||
1719 | efolder.Owner = ID; | 1924 | efolder.Owner = ID; |
1720 | cfolder.AddChildFolder(efolder); // make connection | 1925 | efolder.Type = (short)AssetType.Clothing; |
1721 | iserv.AddFolder(efolder); // store base record | 1926 | efolder.Version = 1; |
1927 | efolder.ParentID = cfolder.ID; | ||
1928 | iserv.AddFolder(efolder); | ||
1722 | m_log.DebugFormat("[RADMIN] Adding outfile folder {0} to folder {1}", efolder.ID, cfolder.ID); | 1929 | m_log.DebugFormat("[RADMIN] Adding outfile folder {0} to folder {1}", efolder.ID, cfolder.ID); |
1723 | } | 1930 | } |
1724 | 1931 | ||
@@ -1745,26 +1952,55 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1745 | 1952 | ||
1746 | InventoryItemBase iitem = null; | 1953 | InventoryItemBase iitem = null; |
1747 | 1954 | ||
1748 | if ((iitem = efolder.FindAsset(assetid)) == null) | 1955 | // Check if asset is in inventory already |
1956 | iitem = null; | ||
1957 | List<InventoryItemBase> iitems = iserv.GetFolderContent(ID, efolder.ID).Items; | ||
1958 | |||
1959 | foreach (InventoryItemBase litem in iitems) | ||
1960 | { | ||
1961 | if (litem.AssetID == assetid) | ||
1962 | { | ||
1963 | iitem = litem; | ||
1964 | break; | ||
1965 | } | ||
1966 | } | ||
1967 | |||
1968 | // Create inventory item | ||
1969 | if (iitem == null) | ||
1749 | { | 1970 | { |
1750 | iitem = new InventoryItemBase(); | 1971 | iitem = new InventoryItemBase(UUID.Random(), ID); |
1751 | iitem.ID = UUID.Random(); | ||
1752 | iitem.Name = GetStringAttribute(item,"name",""); | 1972 | iitem.Name = GetStringAttribute(item,"name",""); |
1753 | iitem.Description = GetStringAttribute(item,"desc",""); | 1973 | iitem.Description = GetStringAttribute(item,"desc",""); |
1754 | iitem.InvType = GetIntegerAttribute(item,"invtype",-1); | 1974 | iitem.InvType = GetIntegerAttribute(item,"invtype",-1); |
1755 | iitem.AssetType = GetIntegerAttribute(item,"assettype",-1); | 1975 | iitem.CreatorId = GetStringAttribute(item,"creatorid",""); |
1756 | iitem.Flags = GetUnsignedAttribute(item,"flags",0); | 1976 | iitem.CreatorIdAsUuid = (UUID)GetStringAttribute(item,"creatoruuid",""); |
1757 | iitem.AssetID = assetid; // associated asset | ||
1758 | iitem.Folder = efolder.ID; // Parent folder | ||
1759 | iitem.Owner = ID; // Agent ID | ||
1760 | iitem.BasePermissions = GetUnsignedAttribute(perms,"base",0x7fffffff); | ||
1761 | iitem.NextPermissions = GetUnsignedAttribute(perms,"next",0x7fffffff); | 1977 | iitem.NextPermissions = GetUnsignedAttribute(perms,"next",0x7fffffff); |
1762 | iitem.CurrentPermissions = GetUnsignedAttribute(perms,"current",0x7fffffff); | 1978 | iitem.CurrentPermissions = GetUnsignedAttribute(perms,"current",0x7fffffff); |
1763 | iitem.GroupPermissions = GetUnsignedAttribute(perms,"group",0x7fffffff); | 1979 | iitem.BasePermissions = GetUnsignedAttribute(perms,"base",0x7fffffff); |
1764 | iitem.EveryOnePermissions = GetUnsignedAttribute(perms,"everyone",0x7fffffff); | 1980 | iitem.EveryOnePermissions = GetUnsignedAttribute(perms,"everyone",0x7fffffff); |
1765 | m_log.DebugFormat("[RADMIN] Adding item {0} to folder {1}", iitem.ID, efolder.ID); | 1981 | iitem.GroupPermissions = GetUnsignedAttribute(perms,"group",0x7fffffff); |
1982 | iitem.AssetType = GetIntegerAttribute(item,"assettype",-1); | ||
1983 | iitem.AssetID = assetid; // associated asset | ||
1984 | iitem.GroupID = (UUID)GetStringAttribute(item,"groupid",""); | ||
1985 | iitem.GroupOwned = (GetStringAttribute(item,"groupowned","false") == "true"); | ||
1986 | iitem.SalePrice = GetIntegerAttribute(item,"saleprice",0); | ||
1987 | iitem.SaleType = (byte)GetIntegerAttribute(item,"saletype",0); | ||
1988 | iitem.Flags = GetUnsignedAttribute(item,"flags",0); | ||
1989 | iitem.CreationDate = GetIntegerAttribute(item,"creationdate",Util.UnixTimeSinceEpoch()); | ||
1990 | iitem.Folder = efolder.ID; // Parent folder | ||
1991 | |||
1766 | iserv.AddItem(iitem); | 1992 | iserv.AddItem(iitem); |
1993 | m_log.DebugFormat("[RADMIN] Added item {0} to folder {1}", iitem.ID, efolder.ID); | ||
1994 | } | ||
1995 | |||
1996 | // Attach item, if attachpoint is specified | ||
1997 | int attachpoint = GetIntegerAttribute(item,"attachpoint",0); | ||
1998 | if (attachpoint != 0) | ||
1999 | { | ||
2000 | mava.SetAttachment(attachpoint, iitem.ID, iitem.AssetID); | ||
2001 | m_log.DebugFormat("[RADMIN] Attached {0}", iitem.ID); | ||
1767 | } | 2002 | } |
2003 | |||
1768 | // Record whether or not the item is to be initially worn | 2004 | // Record whether or not the item is to be initially worn |
1769 | try | 2005 | try |
1770 | { | 2006 | { |
@@ -1774,25 +2010,22 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
1774 | mava.Wearables[iitem.Flags].AssetID = iitem.AssetID; | 2010 | mava.Wearables[iitem.Flags].AssetID = iitem.AssetID; |
1775 | } | 2011 | } |
1776 | } | 2012 | } |
1777 | catch {} | 2013 | catch (Exception e) |
2014 | { | ||
2015 | m_log.WarnFormat("[RADMIN] Error wearing item {0} : {1}", iitem.ID, e.Message); | ||
2016 | } | ||
1778 | } // foreach item in outfit | 2017 | } // foreach item in outfit |
1779 | m_log.DebugFormat("[RADMIN] Outfit {0} load completed", oname); | 2018 | m_log.DebugFormat("[RADMIN] Outfit {0} load completed", oname); |
1780 | } // foreach outfit | 2019 | } // foreach outfit |
1781 | m_log.DebugFormat("[RADMIN] Inventory update complete for {0}", name); | 2020 | m_log.DebugFormat("[RADMIN] Inventory update complete for {0}", name); |
1782 | AvatarData adata2 = new AvatarData(mava); | 2021 | AvatarData adata2 = new AvatarData(mava); |
1783 | m_app.SceneManager.CurrentOrFirstScene.AvatarService.SetAvatar(ID, adata2); | 2022 | scene.AvatarService.SetAvatar(ID, adata2); |
1784 | } | 2023 | } |
1785 | catch (Exception e) | 2024 | catch (Exception e) |
1786 | { | 2025 | { |
1787 | m_log.WarnFormat("[RADMIN] Inventory processing incomplete for user {0} : {1}", | 2026 | m_log.WarnFormat("[RADMIN] Inventory processing incomplete for user {0} : {1}", |
1788 | name, e.Message); | 2027 | name, e.Message); |
1789 | } | 2028 | } |
1790 | else | ||
1791 | { | ||
1792 | m_log.WarnFormat("[RADMIN] Unable to retrieve inventory for {0}[{1}]", | ||
1793 | name, ID); | ||
1794 | // continue to next avatar | ||
1795 | } | ||
1796 | } // End of include | 2029 | } // End of include |
1797 | } | 2030 | } |
1798 | m_log.DebugFormat("[RADMIN] Default avatar loading complete"); | 2031 | m_log.DebugFormat("[RADMIN] Default avatar loading complete"); |
@@ -2660,81 +2893,115 @@ namespace OpenSim.ApplicationPlugins.RemoteController | |||
2660 | public void Dispose() | 2893 | public void Dispose() |
2661 | { | 2894 | { |
2662 | } | 2895 | } |
2663 | } | ||
2664 | |||
2665 | class UICallback | ||
2666 | { | ||
2667 | private Object uilock = new Object(); | ||
2668 | internal InventoryFolderImpl root = null; | ||
2669 | internal List<InventoryFolderImpl> folders; | ||
2670 | internal List<InventoryItemBase> items; | ||
2671 | internal bool OK = false; | ||
2672 | |||
2673 | public void callback(ICollection<InventoryFolderImpl> p_folders, ICollection<InventoryItemBase> p_items) | ||
2674 | { | ||
2675 | lock (uilock) | ||
2676 | { | ||
2677 | folders = (List<InventoryFolderImpl>) p_folders; | ||
2678 | items = (List<InventoryItemBase>) p_items; | ||
2679 | OK = true; | ||
2680 | System.Threading.Monitor.Pulse(uilock); | ||
2681 | } | ||
2682 | } | ||
2683 | 2896 | ||
2684 | public void GetInventory() | 2897 | /// <summary> |
2898 | /// Create a user | ||
2899 | /// </summary> | ||
2900 | /// <param name="scopeID"></param> | ||
2901 | /// <param name="firstName"></param> | ||
2902 | /// <param name="lastName"></param> | ||
2903 | /// <param name="password"></param> | ||
2904 | /// <param name="email"></param> | ||
2905 | private UserAccount CreateUser(UUID scopeID, string firstName, string lastName, string password, string email) | ||
2685 | { | 2906 | { |
2686 | Dictionary<UUID, InventoryFolderImpl> fmap = new Dictionary<UUID, InventoryFolderImpl>(); | 2907 | Scene scene = m_app.SceneManager.CurrentOrFirstScene; |
2687 | 2908 | IUserAccountService m_UserAccountService = scene.UserAccountService; | |
2688 | if (OK == false) | 2909 | IGridService m_GridService = scene.GridService; |
2910 | IAuthenticationService m_AuthenticationService = scene.AuthenticationService; | ||
2911 | IGridUserService m_GridUserService = scene.GridUserService; | ||
2912 | IInventoryService m_InventoryService = scene.InventoryService; | ||
2913 | |||
2914 | UserAccount account = m_UserAccountService.GetUserAccount(scopeID, firstName, lastName); | ||
2915 | if (null == account) | ||
2689 | { | 2916 | { |
2690 | lock (uilock) | 2917 | account = new UserAccount(scopeID, firstName, lastName, email); |
2918 | if (account.ServiceURLs == null || (account.ServiceURLs != null && account.ServiceURLs.Count == 0)) | ||
2691 | { | 2919 | { |
2692 | if (OK == false) | 2920 | account.ServiceURLs = new Dictionary<string, object>(); |
2693 | System.Threading.Monitor.Wait(uilock); | 2921 | account.ServiceURLs["HomeURI"] = string.Empty; |
2922 | account.ServiceURLs["GatekeeperURI"] = string.Empty; | ||
2923 | account.ServiceURLs["InventoryServerURI"] = string.Empty; | ||
2924 | account.ServiceURLs["AssetServerURI"] = string.Empty; | ||
2694 | } | 2925 | } |
2695 | } | ||
2696 | |||
2697 | // Got the inventory OK. So now merge the content of the default appearance | ||
2698 | // file with whatever we already have in-world. For convenience we initialize | ||
2699 | // the inventory hierarchy. | ||
2700 | 2926 | ||
2701 | // Find root and build an index | 2927 | if (m_UserAccountService.StoreUserAccount(account)) |
2702 | |||
2703 | foreach (InventoryFolderImpl folder in folders) | ||
2704 | { | ||
2705 | if (folder.ParentID == UUID.Zero) | ||
2706 | { | 2928 | { |
2707 | if (root == null) | 2929 | bool success; |
2930 | if (m_AuthenticationService != null) | ||
2708 | { | 2931 | { |
2709 | root = folder; | 2932 | success = m_AuthenticationService.SetPassword(account.PrincipalID, password); |
2933 | if (!success) | ||
2934 | m_log.WarnFormat("[RADMIN]: Unable to set password for account {0} {1}.", | ||
2935 | firstName, lastName); | ||
2936 | } | ||
2937 | |||
2938 | GridRegion home = null; | ||
2939 | if (m_GridService != null) | ||
2940 | { | ||
2941 | List<GridRegion> defaultRegions = m_GridService.GetDefaultRegions(UUID.Zero); | ||
2942 | if (defaultRegions != null && defaultRegions.Count >= 1) | ||
2943 | home = defaultRegions[0]; | ||
2944 | |||
2945 | if (m_GridUserService != null && home != null) | ||
2946 | m_GridUserService.SetHome(account.PrincipalID.ToString(), home.RegionID, new Vector3(128, 128, 0), new Vector3(0, 1, 0)); | ||
2947 | else | ||
2948 | m_log.WarnFormat("[RADMIN]: Unable to set home for account {0} {1}.", | ||
2949 | firstName, lastName); | ||
2710 | } | 2950 | } |
2711 | else | 2951 | else |
2952 | m_log.WarnFormat("[RADMIN]: Unable to retrieve home region for account {0} {1}.", | ||
2953 | firstName, lastName); | ||
2954 | |||
2955 | if (m_InventoryService != null) | ||
2712 | { | 2956 | { |
2713 | throw new Exception("Multiple root folders found"); | 2957 | success = m_InventoryService.CreateUserInventory(account.PrincipalID); |
2958 | if (!success) | ||
2959 | m_log.WarnFormat("[RADMIN]: Unable to create inventory for account {0} {1}.", | ||
2960 | firstName, lastName); | ||
2714 | } | 2961 | } |
2962 | |||
2963 | m_log.InfoFormat("[RADMIN]: Account {0} {1} created successfully", firstName, lastName); | ||
2964 | return account; | ||
2965 | } else { | ||
2966 | m_log.ErrorFormat("[RADMIN]: Account creation failed for account {0} {1}", firstName, lastName); | ||
2715 | } | 2967 | } |
2716 | fmap.Add(folder.ID, folder); | ||
2717 | } | 2968 | } |
2718 | 2969 | else | |
2719 | // Hard to continue if the root folder is not there | ||
2720 | if (root == null) | ||
2721 | { | 2970 | { |
2722 | throw new Exception("Root folder not found"); | 2971 | m_log.ErrorFormat("[RADMIN]: A user with the name {0} {1} already exists!", firstName, lastName); |
2723 | } | 2972 | } |
2973 | return null; | ||
2974 | } | ||
2724 | 2975 | ||
2725 | // Construct the folder hierarchy | 2976 | /// <summary> |
2726 | foreach (InventoryFolderImpl folder in folders) | 2977 | /// Change password |
2978 | /// </summary> | ||
2979 | /// <param name="firstName"></param> | ||
2980 | /// <param name="lastName"></param> | ||
2981 | /// <param name="password"></param> | ||
2982 | private bool ChangeUserPassword(string firstName, string lastName, string password) | ||
2983 | { | ||
2984 | Scene scene = m_app.SceneManager.CurrentOrFirstScene; | ||
2985 | IUserAccountService m_UserAccountService = scene.UserAccountService; | ||
2986 | IAuthenticationService m_AuthenticationService = scene.AuthenticationService; | ||
2987 | |||
2988 | UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, firstName, lastName); | ||
2989 | if (null != account) | ||
2727 | { | 2990 | { |
2728 | if (folder.ID != root.ID) | 2991 | bool success = false; |
2729 | { | 2992 | if (m_AuthenticationService != null) |
2730 | fmap[folder.ParentID].AddChildFolder(folder); | 2993 | success = m_AuthenticationService.SetPassword(account.PrincipalID, password); |
2994 | if (!success) { | ||
2995 | m_log.WarnFormat("[RADMIN]: Unable to set password for account {0} {1}.", | ||
2996 | firstName, lastName); | ||
2997 | return false; | ||
2731 | } | 2998 | } |
2999 | return true; | ||
2732 | } | 3000 | } |
2733 | 3001 | else | |
2734 | // Find a home for every pre-existing item | ||
2735 | foreach (InventoryItemBase item in items) | ||
2736 | { | 3002 | { |
2737 | fmap[item.Folder].Items.Add(item.ID, item); | 3003 | m_log.ErrorFormat("[RADMIN]: No such user"); |
3004 | return false; | ||
2738 | } | 3005 | } |
2739 | } | 3006 | } |
2740 | } | 3007 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 6d16c52..a7b4c66 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -352,7 +352,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
352 | // Save avatar attachment information | 352 | // Save avatar attachment information |
353 | if (m_scene.AvatarFactory != null) | 353 | if (m_scene.AvatarFactory != null) |
354 | { | 354 | { |
355 | m_log.Debug("[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId + ", ItemID: " + itemID); | 355 | m_log.Debug("[ATTACHMENTS MODULE]: Dettaching from UserID: " + remoteClient.AgentId + ", ItemID: " + itemID); |
356 | m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); | 356 | m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); |
357 | } | 357 | } |
358 | } | 358 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 22c8937..7e5a8ec 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | |||
@@ -198,7 +198,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
198 | 198 | ||
199 | public void UpdateDatabase(UUID user, AvatarAppearance appearance) | 199 | public void UpdateDatabase(UUID user, AvatarAppearance appearance) |
200 | { | 200 | { |
201 | //m_log.DebugFormat("[APPEARANCE]: UpdateDatabase"); | 201 | m_log.DebugFormat("[APPEARANCE]: UpdateDatabase"); |
202 | AvatarData adata = new AvatarData(appearance); | 202 | AvatarData adata = new AvatarData(appearance); |
203 | m_scene.AvatarService.SetAvatar(user, adata); | 203 | m_scene.AvatarService.SetAvatar(user, adata); |
204 | } | 204 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 5d50a83..ab1cfc3 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -922,12 +922,40 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
922 | /// </summary> | 922 | /// </summary> |
923 | public void EnableChildAgent(ScenePresence sp, GridRegion region) | 923 | public void EnableChildAgent(ScenePresence sp, GridRegion region) |
924 | { | 924 | { |
925 | m_log.DebugFormat("[ENTITY TRANSFER]: Enabling child agent in new neighour {0}", region.RegionName); | ||
926 | |||
927 | AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode); | ||
925 | AgentCircuitData agent = sp.ControllingClient.RequestClientInfo(); | 928 | AgentCircuitData agent = sp.ControllingClient.RequestClientInfo(); |
926 | agent.BaseFolder = UUID.Zero; | 929 | agent.BaseFolder = UUID.Zero; |
927 | agent.InventoryFolder = UUID.Zero; | 930 | agent.InventoryFolder = UUID.Zero; |
928 | agent.startpos = new Vector3(128, 128, 70); | 931 | agent.startpos = new Vector3(128, 128, 70); |
929 | agent.child = true; | 932 | agent.child = true; |
930 | agent.Appearance = sp.Appearance; | 933 | agent.Appearance = sp.Appearance; |
934 | agent.CapsPath = CapsUtil.GetRandomCapsObjectPath(); | ||
935 | |||
936 | agent.ChildrenCapSeeds = new Dictionary<ulong, string>(sp.Scene.CapsModule.GetChildrenSeeds(sp.UUID)); | ||
937 | m_log.DebugFormat("[XXX] Seeds 1 {0}", agent.ChildrenCapSeeds.Count); | ||
938 | |||
939 | if (!agent.ChildrenCapSeeds.ContainsKey(sp.Scene.RegionInfo.RegionHandle)) | ||
940 | agent.ChildrenCapSeeds.Add(sp.Scene.RegionInfo.RegionHandle, sp.ControllingClient.RequestClientInfo().CapsPath); | ||
941 | m_log.DebugFormat("[XXX] Seeds 2 {0}", agent.ChildrenCapSeeds.Count); | ||
942 | |||
943 | sp.AddNeighbourRegion(region.RegionHandle, agent.CapsPath); | ||
944 | foreach (ulong h in agent.ChildrenCapSeeds.Keys) | ||
945 | m_log.DebugFormat("[XXX] --> {0}", h); | ||
946 | m_log.DebugFormat("[XXX] Adding {0}", region.RegionHandle); | ||
947 | agent.ChildrenCapSeeds.Add(region.RegionHandle, agent.CapsPath); | ||
948 | |||
949 | if (sp.Scene.CapsModule != null) | ||
950 | { | ||
951 | sp.Scene.CapsModule.SetChildrenSeed(sp.UUID, agent.ChildrenCapSeeds); | ||
952 | } | ||
953 | |||
954 | if (currentAgentCircuit != null) | ||
955 | { | ||
956 | agent.ServiceURLs = currentAgentCircuit.ServiceURLs; | ||
957 | agent.Viewer = currentAgentCircuit.Viewer; | ||
958 | } | ||
931 | 959 | ||
932 | InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; | 960 | InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; |
933 | d.BeginInvoke(sp, agent, region, region.ExternalEndPoint, true, | 961 | d.BeginInvoke(sp, agent, region, region.ExternalEndPoint, true, |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs index 8a90370..35518d5 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs | |||
@@ -123,17 +123,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Neighbour | |||
123 | 123 | ||
124 | public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) | 124 | public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) |
125 | { | 125 | { |
126 | m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}", | ||
127 | thisRegion.RegionName, regionHandle, m_Scenes.Count); | ||
128 | foreach (Scene s in m_Scenes) | 126 | foreach (Scene s in m_Scenes) |
129 | { | 127 | { |
130 | if (s.RegionInfo.RegionHandle == regionHandle) | 128 | if (s.RegionInfo.RegionHandle == regionHandle) |
131 | { | 129 | { |
132 | m_log.Debug("[NEIGHBOUR IN CONNECTOR]: Found region to SendHelloNeighbour"); | 130 | //m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0} to {1}", thisRegion.RegionName, s.RegionInfo.RegionName); |
133 | return s.IncomingHelloNeighbour(thisRegion); | 131 | return s.IncomingHelloNeighbour(thisRegion); |
134 | } | 132 | } |
135 | } | 133 | } |
136 | m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: region handle {0} not found", regionHandle); | ||
137 | return null; | 134 | return null; |
138 | } | 135 | } |
139 | 136 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs index 1b00c8a..b2e3f4f 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs | |||
@@ -181,22 +181,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
181 | 181 | ||
182 | public List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) | 182 | public List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) |
183 | { | 183 | { |
184 | if (m_LocalCache.ContainsKey(regionID)) | 184 | return m_GridService.GetNeighbours(scopeID, regionID); |
185 | { | ||
186 | List<GridRegion> neighbours = m_LocalCache[regionID].GetNeighbours(); | ||
187 | if (neighbours.Count == 0) | ||
188 | // try the DB | ||
189 | neighbours = m_GridService.GetNeighbours(scopeID, regionID); | ||
190 | return neighbours; | ||
191 | } | ||
192 | else | ||
193 | { | ||
194 | m_log.WarnFormat("[LOCAL GRID CONNECTOR]: GetNeighbours: Requested region {0} is not on this sim", regionID); | ||
195 | return new List<GridRegion>(); | ||
196 | } | ||
197 | |||
198 | // Don't go to the DB | ||
199 | //return m_GridService.GetNeighbours(scopeID, regionID); | ||
200 | } | 185 | } |
201 | 186 | ||
202 | public GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) | 187 | public GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs index 46741a5..16e25e6 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs | |||
@@ -153,12 +153,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
153 | return false; | 153 | return false; |
154 | } | 154 | } |
155 | 155 | ||
156 | // Let's override GetNeighbours completely -- never go to the grid server | ||
157 | // Neighbours are/should be cached locally | ||
158 | // For retrieval from the DB, caller should call GetRegionByPosition | ||
159 | public override List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) | 156 | public override List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) |
160 | { | 157 | { |
161 | return m_LocalGridService.GetNeighbours(scopeID, regionID); | 158 | return base.GetNeighbours(scopeID, regionID); |
162 | } | 159 | } |
163 | 160 | ||
164 | public override GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) | 161 | public override GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs index daba0b3..f71bf46 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs | |||
@@ -121,17 +121,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour | |||
121 | 121 | ||
122 | public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) | 122 | public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) |
123 | { | 123 | { |
124 | m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}", | 124 | m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}.", |
125 | thisRegion.RegionName, regionHandle, m_Scenes.Count); | 125 | thisRegion.RegionName, regionHandle); |
126 | foreach (Scene s in m_Scenes) | 126 | foreach (Scene s in m_Scenes) |
127 | { | 127 | { |
128 | if (s.RegionInfo.RegionHandle == regionHandle) | 128 | if (s.RegionInfo.RegionHandle == regionHandle) |
129 | { | 129 | { |
130 | m_log.Debug("[NEIGHBOUR CONNECTOR]: Found region to SendHelloNeighbour"); | 130 | //m_log.Debug("[NEIGHBOUR CONNECTOR]: Found region to SendHelloNeighbour"); |
131 | return s.IncomingHelloNeighbour(thisRegion); | 131 | return s.IncomingHelloNeighbour(thisRegion); |
132 | } | 132 | } |
133 | } | 133 | } |
134 | m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle); | 134 | //m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle); |
135 | return null; | 135 | return null; |
136 | } | 136 | } |
137 | 137 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs index 9e8454f..3f577f2 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs | |||
@@ -181,7 +181,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
181 | // else do the remote thing | 181 | // else do the remote thing |
182 | if (!m_localBackend.IsLocalRegion(destination.RegionHandle)) | 182 | if (!m_localBackend.IsLocalRegion(destination.RegionHandle)) |
183 | { | 183 | { |
184 | //m_regionClient.SendUserInformation(regInfo, aCircuit); | ||
185 | return m_remoteConnector.CreateAgent(destination, aCircuit, teleportFlags, out reason); | 184 | return m_remoteConnector.CreateAgent(destination, aCircuit, teleportFlags, out reason); |
186 | } | 185 | } |
187 | return false; | 186 | return false; |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 55060c3..2ff611e 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -948,12 +948,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
948 | // Let the grid service module know, so this can be cached | 948 | // Let the grid service module know, so this can be cached |
949 | m_eventManager.TriggerOnRegionUp(otherRegion); | 949 | m_eventManager.TriggerOnRegionUp(otherRegion); |
950 | 950 | ||
951 | RegionInfo regInfo = new RegionInfo(xcell, ycell, otherRegion.InternalEndPoint, otherRegion.ExternalHostName); | ||
952 | regInfo.RegionID = otherRegion.RegionID; | ||
953 | regInfo.RegionName = otherRegion.RegionName; | ||
954 | regInfo.ScopeID = otherRegion.ScopeID; | ||
955 | regInfo.ExternalHostName = otherRegion.ExternalHostName; | ||
956 | GridRegion r = new GridRegion(regInfo); | ||
957 | try | 951 | try |
958 | { | 952 | { |
959 | ForEachScenePresence(delegate(ScenePresence agent) | 953 | ForEachScenePresence(delegate(ScenePresence agent) |
@@ -968,7 +962,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
968 | old.Add(otherRegion.RegionHandle); | 962 | old.Add(otherRegion.RegionHandle); |
969 | agent.DropOldNeighbours(old); | 963 | agent.DropOldNeighbours(old); |
970 | if (m_teleportModule != null) | 964 | if (m_teleportModule != null) |
971 | m_teleportModule.EnableChildAgent(agent, r); | 965 | m_teleportModule.EnableChildAgent(agent, otherRegion); |
972 | } | 966 | } |
973 | } | 967 | } |
974 | ); | 968 | ); |
@@ -1518,6 +1512,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1518 | { | 1512 | { |
1519 | m_log.DebugFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName); | 1513 | m_log.DebugFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName); |
1520 | LoginsDisabled = false; | 1514 | LoginsDisabled = false; |
1515 | m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface<INeighbourService>(), RegionInfo); | ||
1521 | } | 1516 | } |
1522 | } | 1517 | } |
1523 | } | 1518 | } |
@@ -1802,6 +1797,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1802 | { | 1797 | { |
1803 | RegisterCommsEvents(); | 1798 | RegisterCommsEvents(); |
1804 | 1799 | ||
1800 | m_sceneGridService.SetScene(this); | ||
1801 | |||
1805 | // These two 'commands' *must be* next to each other or sim rebooting fails. | 1802 | // These two 'commands' *must be* next to each other or sim rebooting fails. |
1806 | //m_sceneGridService.RegisterRegion(m_interregionCommsOut, RegionInfo); | 1803 | //m_sceneGridService.RegisterRegion(m_interregionCommsOut, RegionInfo); |
1807 | 1804 | ||
@@ -1812,24 +1809,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1812 | throw new Exception(error); | 1809 | throw new Exception(error); |
1813 | } | 1810 | } |
1814 | 1811 | ||
1815 | m_sceneGridService.SetScene(this); | ||
1816 | m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface<INeighbourService>(), RegionInfo); | ||
1817 | |||
1818 | //Dictionary<string, string> dGridSettings = m_sceneGridService.GetGridSettings(); | ||
1819 | |||
1820 | //if (dGridSettings.ContainsKey("allow_forceful_banlines")) | ||
1821 | //{ | ||
1822 | // if (dGridSettings["allow_forceful_banlines"] != "TRUE") | ||
1823 | // { | ||
1824 | // m_log.Info("[GRID]: Grid is disabling forceful parcel banlists"); | ||
1825 | // EventManager.TriggerSetAllowForcefulBan(false); | ||
1826 | // } | ||
1827 | // else | ||
1828 | // { | ||
1829 | // m_log.Info("[GRID]: Grid is allowing forceful parcel banlists"); | ||
1830 | // EventManager.TriggerSetAllowForcefulBan(true); | ||
1831 | // } | ||
1832 | //} | ||
1833 | } | 1812 | } |
1834 | 1813 | ||
1835 | /// <summary> | 1814 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index bd8ccce..c675322 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | |||
@@ -182,24 +182,17 @@ namespace OpenSim.Region.Framework.Scenes | |||
182 | { | 182 | { |
183 | //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending InterRegion Notification that region is up " + region.RegionName); | 183 | //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending InterRegion Notification that region is up " + region.RegionName); |
184 | 184 | ||
185 | for (int x = (int)region.RegionLocX - 1; x <= region.RegionLocX + 1; x++) | 185 | List<GridRegion> neighbours = m_scene.GridService.GetNeighbours(m_scene.RegionInfo.ScopeID, m_scene.RegionInfo.RegionID); |
186 | m_log.DebugFormat("[INTERGRID]: Informing {0} neighbours that this region is up", neighbours.Count); | ||
187 | foreach (GridRegion n in neighbours) | ||
186 | { | 188 | { |
187 | for (int y = (int)region.RegionLocY - 1; y <= region.RegionLocY + 1; y++) | 189 | InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync; |
188 | { | 190 | d.BeginInvoke(neighbourService, region, n.RegionHandle, |
189 | if (!((x == region.RegionLocX) && (y == region.RegionLocY))) // skip this region | 191 | InformNeighborsThatRegionisUpCompleted, |
190 | { | 192 | d); |
191 | ulong handle = Utils.UIntsToLong((uint)x * Constants.RegionSize, (uint)y * Constants.RegionSize); | ||
192 | InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync; | ||
193 | |||
194 | d.BeginInvoke(neighbourService, region, handle, | ||
195 | InformNeighborsThatRegionisUpCompleted, | ||
196 | d); | ||
197 | } | ||
198 | } | ||
199 | } | 193 | } |
200 | } | 194 | } |
201 | 195 | ||
202 | |||
203 | public delegate void SendChildAgentDataUpdateDelegate(AgentPosition cAgentData, ulong regionHandle); | 196 | public delegate void SendChildAgentDataUpdateDelegate(AgentPosition cAgentData, ulong regionHandle); |
204 | 197 | ||
205 | /// <summary> | 198 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index c1e835e..6c119c2 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -3128,6 +3128,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3128 | { | 3128 | { |
3129 | if (cAgent.Attachments != null) | 3129 | if (cAgent.Attachments != null) |
3130 | { | 3130 | { |
3131 | m_appearance.ClearAttachments(); | ||
3131 | foreach (AttachmentData att in cAgent.Attachments) | 3132 | foreach (AttachmentData att in cAgent.Attachments) |
3132 | { | 3133 | { |
3133 | m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID); | 3134 | m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID); |
diff --git a/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs b/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs index 0ec8912..1831533 100644 --- a/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs +++ b/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs | |||
@@ -210,9 +210,6 @@ namespace OpenSim.Services.Connectors | |||
210 | GridRegion rinfo = new GridRegion((Dictionary<string, object>)r); | 210 | GridRegion rinfo = new GridRegion((Dictionary<string, object>)r); |
211 | rinfos.Add(rinfo); | 211 | rinfos.Add(rinfo); |
212 | } | 212 | } |
213 | else | ||
214 | m_log.DebugFormat("[GRID CONNECTOR]: GetNeighbours {0}, {1} received invalid response type {2}", | ||
215 | scopeID, regionID, r.GetType()); | ||
216 | } | 213 | } |
217 | } | 214 | } |
218 | else | 215 | else |
@@ -299,9 +296,9 @@ namespace OpenSim.Services.Connectors | |||
299 | { | 296 | { |
300 | if (replyData["result"] is Dictionary<string, object>) | 297 | if (replyData["result"] is Dictionary<string, object>) |
301 | rinfo = new GridRegion((Dictionary<string, object>)replyData["result"]); | 298 | rinfo = new GridRegion((Dictionary<string, object>)replyData["result"]); |
302 | else | 299 | //else |
303 | m_log.DebugFormat("[GRID CONNECTOR]: GetRegionByPosition {0}, {1}-{2} received no region", | 300 | // m_log.DebugFormat("[GRID CONNECTOR]: GetRegionByPosition {0}, {1}-{2} received no region", |
304 | scopeID, x, y); | 301 | // scopeID, x, y); |
305 | } | 302 | } |
306 | else | 303 | else |
307 | m_log.DebugFormat("[GRID CONNECTOR]: GetRegionByPosition {0}, {1}-{2} received null response", | 304 | m_log.DebugFormat("[GRID CONNECTOR]: GetRegionByPosition {0}, {1}-{2} received null response", |
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs index 874f1a2..56c73ec 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs | |||
@@ -1,4 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) Contributors, http://opensimulator.org/ | 2 | * Copyright (c) Contributors, http://opensimulator.org/ |
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | 3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. |
4 | * | 4 | * |
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs index ff0dd7e..32f02fb 100644 --- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs | |||
@@ -479,7 +479,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
479 | } | 479 | } |
480 | catch (WebException ex) | 480 | catch (WebException ex) |
481 | { | 481 | { |
482 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of agent delete {0}", ex.Message); | 482 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of agent delete from {0}: {1}", destination.RegionName, ex.Message); |
483 | return false; | 483 | return false; |
484 | } | 484 | } |
485 | finally | 485 | finally |
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index 7c98642..225530f 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs | |||
@@ -273,14 +273,15 @@ namespace OpenSim.Services.GridService | |||
273 | if (region != null) | 273 | if (region != null) |
274 | { | 274 | { |
275 | // Not really? Maybe? | 275 | // Not really? Maybe? |
276 | List<RegionData> rdatas = m_Database.Get(region.posX - (int)Constants.RegionSize, region.posY - (int)Constants.RegionSize, | 276 | List<RegionData> rdatas = m_Database.Get(region.posX - (int)Constants.RegionSize - 1, region.posY - (int)Constants.RegionSize - 1, |
277 | region.posX + (int)Constants.RegionSize, region.posY + (int)Constants.RegionSize, scopeID); | 277 | region.posX + (int)Constants.RegionSize + 1, region.posY + (int)Constants.RegionSize + 1, scopeID); |
278 | 278 | ||
279 | foreach (RegionData rdata in rdatas) | 279 | foreach (RegionData rdata in rdatas) |
280 | if (rdata.RegionID != regionID) | 280 | if (rdata.RegionID != regionID) |
281 | rinfos.Add(RegionData2RegionInfo(rdata)); | 281 | rinfos.Add(RegionData2RegionInfo(rdata)); |
282 | 282 | ||
283 | } | 283 | } |
284 | m_log.DebugFormat("[GRID SERVICE]: region {0} has {1} neighours", region.RegionName, rinfos.Count); | ||
284 | return rinfos; | 285 | return rinfos; |
285 | } | 286 | } |
286 | 287 | ||
diff --git a/OpenSim/Services/UserAccountService/UserAccountService.cs b/OpenSim/Services/UserAccountService/UserAccountService.cs index 063251a..326e502 100644 --- a/OpenSim/Services/UserAccountService/UserAccountService.cs +++ b/OpenSim/Services/UserAccountService/UserAccountService.cs | |||
@@ -357,7 +357,7 @@ namespace OpenSim.Services.UserAccountService | |||
357 | /// <param name="lastName"></param> | 357 | /// <param name="lastName"></param> |
358 | /// <param name="password"></param> | 358 | /// <param name="password"></param> |
359 | /// <param name="email"></param> | 359 | /// <param name="email"></param> |
360 | public void CreateUser(string firstName, string lastName, string password, string email) | 360 | private void CreateUser(string firstName, string lastName, string password, string email) |
361 | { | 361 | { |
362 | UserAccount account = GetUserAccount(UUID.Zero, firstName, lastName); | 362 | UserAccount account = GetUserAccount(UUID.Zero, firstName, lastName); |
363 | if (null == account) | 363 | if (null == account) |
@@ -374,12 +374,14 @@ namespace OpenSim.Services.UserAccountService | |||
374 | 374 | ||
375 | if (StoreUserAccount(account)) | 375 | if (StoreUserAccount(account)) |
376 | { | 376 | { |
377 | bool success = false; | 377 | bool success; |
378 | if (m_AuthenticationService != null) | 378 | if (m_AuthenticationService != null) |
379 | { | ||
379 | success = m_AuthenticationService.SetPassword(account.PrincipalID, password); | 380 | success = m_AuthenticationService.SetPassword(account.PrincipalID, password); |
380 | if (!success) | 381 | if (!success) |
381 | m_log.WarnFormat("[USER ACCOUNT SERVICE]: Unable to set password for account {0} {1}.", | 382 | m_log.WarnFormat("[USER ACCOUNT SERVICE]: Unable to set password for account {0} {1}.", |
382 | firstName, lastName); | 383 | firstName, lastName); |
384 | } | ||
383 | 385 | ||
384 | GridRegion home = null; | 386 | GridRegion home = null; |
385 | if (m_GridService != null) | 387 | if (m_GridService != null) |
@@ -399,18 +401,22 @@ namespace OpenSim.Services.UserAccountService | |||
399 | firstName, lastName); | 401 | firstName, lastName); |
400 | 402 | ||
401 | if (m_InventoryService != null) | 403 | if (m_InventoryService != null) |
404 | { | ||
402 | success = m_InventoryService.CreateUserInventory(account.PrincipalID); | 405 | success = m_InventoryService.CreateUserInventory(account.PrincipalID); |
403 | if (!success) | 406 | if (!success) |
404 | m_log.WarnFormat("[USER ACCOUNT SERVICE]: Unable to create inventory for account {0} {1}.", | 407 | m_log.WarnFormat("[USER ACCOUNT SERVICE]: Unable to create inventory for account {0} {1}.", |
405 | firstName, lastName); | 408 | firstName, lastName); |
409 | } | ||
406 | 410 | ||
407 | m_log.InfoFormat("[USER ACCOUNT SERVICE]: Account {0} {1} created successfully", firstName, lastName); | 411 | m_log.InfoFormat("[USER ACCOUNT SERVICE]: Account {0} {1} created successfully", firstName, lastName); |
412 | } else { | ||
413 | m_log.ErrorFormat("[USER ACCOUNT SERVICE]: Account creation failed for account {0} {1}", firstName, lastName); | ||
408 | } | 414 | } |
409 | } | 415 | } |
410 | else | 416 | else |
411 | { | 417 | { |
412 | m_log.ErrorFormat("[USER ACCOUNT SERVICE]: A user with the name {0} {1} already exists!", firstName, lastName); | 418 | m_log.ErrorFormat("[USER ACCOUNT SERVICE]: A user with the name {0} {1} already exists!", firstName, lastName); |
413 | } | 419 | } |
414 | } | 420 | } |
415 | } | 421 | } |
416 | } | 422 | } |