2007-06-11 17:36:50 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) Contributors, http://www.openmetaverse.org/
|
|
|
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions are met:
|
|
|
|
* * Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
* * Neither the name of the OpenSim Project nor the
|
|
|
|
* names of its contributors may be used to endorse or promote products
|
|
|
|
* derived from this software without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
|
|
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
|
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*
|
|
|
|
*/
|
2007-05-26 13:40:19 +00:00
|
|
|
using System;
|
|
|
|
using System.Security.Cryptography;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Text;
|
|
|
|
using libsecondlife;
|
|
|
|
using libsecondlife.Packets;
|
|
|
|
|
|
|
|
namespace OpenSim.Framework.Utilities
|
|
|
|
{
|
|
|
|
public class Util
|
|
|
|
{
|
|
|
|
private static Random randomClass = new Random();
|
|
|
|
private static uint nextXferID = 5000;
|
|
|
|
private static object XferLock = new object();
|
|
|
|
|
|
|
|
public static ulong UIntsToLong(uint X, uint Y)
|
|
|
|
{
|
|
|
|
return Helpers.UIntsToLong(X, Y);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Random RandomClass
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
return randomClass;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static uint GetNextXferID()
|
|
|
|
{
|
|
|
|
uint id = 0;
|
|
|
|
lock(XferLock)
|
|
|
|
{
|
|
|
|
id = nextXferID;
|
|
|
|
nextXferID++;
|
|
|
|
}
|
|
|
|
return id;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int UnixTimeSinceEpoch()
|
|
|
|
{
|
|
|
|
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
|
|
|
|
int timestamp = (int)t.TotalSeconds;
|
|
|
|
return timestamp;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static string Md5Hash(string pass)
|
|
|
|
{
|
|
|
|
MD5 md5 = MD5CryptoServiceProvider.Create();
|
|
|
|
byte[] dataMd5 = md5.ComputeHash(Encoding.Default.GetBytes(pass));
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
for (int i = 0; i < dataMd5.Length; i++)
|
|
|
|
sb.AppendFormat("{0:x2}", dataMd5[i]);
|
|
|
|
return sb.ToString();
|
|
|
|
}
|
|
|
|
|
2007-06-23 11:14:58 +00:00
|
|
|
public static string GetRandomCapsPath()
|
|
|
|
{
|
|
|
|
LLUUID caps = LLUUID.Random();
|
|
|
|
string capsPath = caps.ToStringHyphenated();
|
|
|
|
capsPath = capsPath.Remove(capsPath.Length - 4, 4);
|
|
|
|
return capsPath;
|
|
|
|
}
|
|
|
|
|
2007-05-26 13:40:19 +00:00
|
|
|
//public static int fast_distance2d(int x, int y)
|
|
|
|
//{
|
|
|
|
// x = System.Math.Abs(x);
|
|
|
|
// y = System.Math.Abs(y);
|
|
|
|
|
|
|
|
// int min = System.Math.Min(x, y);
|
|
|
|
|
|
|
|
// return (x + y - (min >> 1) - (min >> 2) + (min >> 4));
|
|
|
|
//}
|
|
|
|
|
|
|
|
public static string FieldToString(byte[] bytes)
|
|
|
|
{
|
|
|
|
return FieldToString(bytes, String.Empty);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Convert a variable length field (byte array) to a string, with a
|
|
|
|
/// field name prepended to each line of the output
|
|
|
|
/// </summary>
|
|
|
|
/// <remarks>If the byte array has unprintable characters in it, a
|
|
|
|
/// hex dump will be put in the string instead</remarks>
|
|
|
|
/// <param name="bytes">The byte array to convert to a string</param>
|
|
|
|
/// <param name="fieldName">A field name to prepend to each line of output</param>
|
|
|
|
/// <returns>An ASCII string or a string containing a hex dump, minus
|
|
|
|
/// the null terminator</returns>
|
|
|
|
public static string FieldToString(byte[] bytes, string fieldName)
|
|
|
|
{
|
|
|
|
// Check for a common case
|
|
|
|
if (bytes.Length == 0) return String.Empty;
|
|
|
|
|
|
|
|
StringBuilder output = new StringBuilder();
|
|
|
|
bool printable = true;
|
|
|
|
|
|
|
|
for (int i = 0; i < bytes.Length; ++i)
|
|
|
|
{
|
|
|
|
// Check if there are any unprintable characters in the array
|
|
|
|
if ((bytes[i] < 0x20 || bytes[i] > 0x7E) && bytes[i] != 0x09
|
|
|
|
&& bytes[i] != 0x0D && bytes[i] != 0x0A && bytes[i] != 0x00)
|
|
|
|
{
|
|
|
|
printable = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (printable)
|
|
|
|
{
|
|
|
|
if (fieldName.Length > 0)
|
|
|
|
{
|
|
|
|
output.Append(fieldName);
|
|
|
|
output.Append(": ");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (bytes[bytes.Length - 1] == 0x00)
|
|
|
|
output.Append(UTF8Encoding.UTF8.GetString(bytes, 0, bytes.Length - 1));
|
|
|
|
else
|
|
|
|
output.Append(UTF8Encoding.UTF8.GetString(bytes));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for (int i = 0; i < bytes.Length; i += 16)
|
|
|
|
{
|
|
|
|
if (i != 0)
|
|
|
|
output.Append(Environment.NewLine);
|
|
|
|
if (fieldName.Length > 0)
|
|
|
|
{
|
|
|
|
output.Append(fieldName);
|
|
|
|
output.Append(": ");
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int j = 0; j < 16; j++)
|
|
|
|
{
|
|
|
|
if ((i + j) < bytes.Length)
|
|
|
|
output.Append(String.Format("{0:X2} ", bytes[i + j]));
|
|
|
|
else
|
|
|
|
output.Append(" ");
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int j = 0; j < 16 && (i + j) < bytes.Length; j++)
|
|
|
|
{
|
|
|
|
if (bytes[i + j] >= 0x20 && bytes[i + j] < 0x7E)
|
|
|
|
output.Append((char)bytes[i + j]);
|
|
|
|
else
|
|
|
|
output.Append(".");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return output.ToString();
|
|
|
|
}
|
|
|
|
public Util()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|