aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Util.cs50
1 files changed, 50 insertions, 0 deletions
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 3e6d8ef..4dafaef 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -2022,6 +2022,56 @@ namespace OpenSim.Framework
2022 } 2022 }
2023 2023
2024 /// <summary> 2024 /// <summary>
2025 /// Convert a string to a byte format suitable for transport in an LLUDP packet. The output is truncated to MaxLength bytes if necessary.
2026 /// </summary>
2027 /// <param name="str">
2028 /// If null or empty, then an bytes[0] is returned.
2029 /// Using "\0" will return a conversion of the null character to a byte. This is not the same as bytes[0]
2030 /// </param>
2031 /// <param name="args">
2032 /// Arguments to substitute into the string via the {} mechanism.
2033 /// </param>
2034 /// <returns></returns>
2035 public static byte[] StringToBytes(string str, int MaxLength, params object[] args)
2036 {
2037 return StringToBytes1024(string.Format(str, args), MaxLength);
2038 }
2039
2040 /// <summary>
2041 /// Convert a string to a byte format suitable for transport in an LLUDP packet. The output is truncated to MaxLength bytes if necessary.
2042 /// </summary>
2043 /// <param name="str">
2044 /// If null or empty, then an bytes[0] is returned.
2045 /// Using "\0" will return a conversion of the null character to a byte. This is not the same as bytes[0]
2046 /// </param>
2047 /// <returns></returns>
2048 public static byte[] StringToBytes(string str, int MaxLength)
2049 {
2050 if (String.IsNullOrEmpty(str))
2051 return Utils.EmptyBytes;
2052
2053 if (!str.EndsWith("\0"))
2054 str += "\0";
2055
2056 // Because this is UTF-8 encoding and not ASCII, it's possible we
2057 // might have gotten an oversized array even after the string trim
2058 byte[] data = UTF8.GetBytes(str);
2059
2060 if (data.Length > MaxLength)
2061 {
2062 int cut = MaxLength -1 ;
2063 if((data[cut] & 0x80 ) != 0 )
2064 {
2065 while(cut > 0 && (data[cut] & 0xc0) != 0xc0)
2066 cut--;
2067 }
2068 Array.Resize<byte>(ref data, cut + 1);
2069 data[cut] = 0;
2070 }
2071
2072 return data;
2073 }
2074 /// <summary>
2025 /// Pretty format the hashtable contents to a single line. 2075 /// Pretty format the hashtable contents to a single line.
2026 /// </summary> 2076 /// </summary>
2027 /// <remarks> 2077 /// <remarks>