From ae9d40c7d044670f59014ca37b3fc042167eae14 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Tue, 10 Nov 2015 14:29:13 +0000
Subject: add a StringToBytes variant that takes Maximum lenght as argument.
---
OpenSim/Framework/Util.cs | 50 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
(limited to 'OpenSim')
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
}
///
+ /// Convert a string to a byte format suitable for transport in an LLUDP packet. The output is truncated to MaxLength bytes if necessary.
+ ///
+ ///
+ /// If null or empty, then an bytes[0] is returned.
+ /// Using "\0" will return a conversion of the null character to a byte. This is not the same as bytes[0]
+ ///
+ ///
+ /// Arguments to substitute into the string via the {} mechanism.
+ ///
+ ///
+ public static byte[] StringToBytes(string str, int MaxLength, params object[] args)
+ {
+ return StringToBytes1024(string.Format(str, args), MaxLength);
+ }
+
+ ///
+ /// Convert a string to a byte format suitable for transport in an LLUDP packet. The output is truncated to MaxLength bytes if necessary.
+ ///
+ ///
+ /// If null or empty, then an bytes[0] is returned.
+ /// Using "\0" will return a conversion of the null character to a byte. This is not the same as bytes[0]
+ ///
+ ///
+ public static byte[] StringToBytes(string str, int MaxLength)
+ {
+ if (String.IsNullOrEmpty(str))
+ return Utils.EmptyBytes;
+
+ if (!str.EndsWith("\0"))
+ str += "\0";
+
+ // Because this is UTF-8 encoding and not ASCII, it's possible we
+ // might have gotten an oversized array even after the string trim
+ byte[] data = UTF8.GetBytes(str);
+
+ if (data.Length > MaxLength)
+ {
+ int cut = MaxLength -1 ;
+ if((data[cut] & 0x80 ) != 0 )
+ {
+ while(cut > 0 && (data[cut] & 0xc0) != 0xc0)
+ cut--;
+ }
+ Array.Resize(ref data, cut + 1);
+ data[cut] = 0;
+ }
+
+ return data;
+ }
+ ///
/// Pretty format the hashtable contents to a single line.
///
///
--
cgit v1.1