* LLSD JSON serialization can now take an optional parameter to enable/disable preserving default values in serialization

* Fixed a regression where OSDMap.ToString() and OSDArray.ToString() were pruning default values after switching from notation output to JSON
* Fixed LLSD decoding to ignore case when parsing headers and use <? llsd/binary ?> instead of <?llsd/binary?>

git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3357 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
John Hurliman
2010-05-25 23:07:16 +00:00
parent 0dc8e91fed
commit f5a84b39aa
4 changed files with 54 additions and 30 deletions

View File

@@ -53,7 +53,7 @@ namespace OpenMetaverse.StructuredData
private const int int32Length = 4;
private const int doubleLength = 8;
private static byte[] llsdBinaryHead = Encoding.ASCII.GetBytes("<?llsd/binary?>\n");
private const string llsdBinaryHead = "<? llsd/binary ?>\n";
private const byte undefBinaryValue = (byte)'!';
private const byte trueBinaryValue = (byte)'1';
private const byte falseBinaryValue = (byte)'0';
@@ -70,6 +70,8 @@ namespace OpenMetaverse.StructuredData
private const byte mapEndBinaryMarker = (byte)'}';
private const byte keyBinaryMarker = (byte)'k';
private static readonly byte[] llsdBinaryHeadBytes = Encoding.ASCII.GetBytes(llsdBinaryHead);
/// <summary>
///
/// </summary>
@@ -96,7 +98,7 @@ namespace OpenMetaverse.StructuredData
SkipWhiteSpace(stream);
bool result = FindByteArray(stream, llsdBinaryHead);
bool result = FindString(stream, llsdBinaryHead);
if (!result)
throw new OSDException("Failed to decode binary LLSD");
@@ -127,7 +129,7 @@ namespace OpenMetaverse.StructuredData
{
MemoryStream stream = new MemoryStream(initialBufferSize);
stream.Write(llsdBinaryHead, 0, llsdBinaryHead.Length);
stream.Write(llsdBinaryHeadBytes, 0, llsdBinaryHeadBytes.Length);
SerializeLLSDBinaryElement(stream, data);
return stream;
}
@@ -376,7 +378,7 @@ namespace OpenMetaverse.StructuredData
/// <param name="stream"></param>
/// <param name="toFind"></param>
/// <returns></returns>
public static bool FindByteArray(Stream stream, byte[] toFind)
public static bool FindString(Stream stream, string toFind)
{
int lastIndexToFind = toFind.Length - 1;
int crrIndex = 0;
@@ -389,7 +391,7 @@ namespace OpenMetaverse.StructuredData
(crrIndex <= lastIndexToFind)
)
{
if (toFind[crrIndex] == (byte)bt)
if (toFind[crrIndex].ToString().Equals(((char)bt).ToString(), StringComparison.InvariantCultureIgnoreCase))
{
found = true;
crrIndex++;