llsdXml: do direct base64 encode
parent
5848d3a6bb
commit
214cf5d60b
|
@ -148,7 +148,22 @@ namespace OpenSim.Framework
|
|||
else
|
||||
{
|
||||
sb.Append("<binary>"); // encode64 is default
|
||||
sb.Append(Convert.ToBase64String(e,Base64FormattingOptions.None));
|
||||
base64Encode(e, sb);
|
||||
sb.Append("</binary>");
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddElem(byte[] e, int start, int lenght, StringBuilder sb)
|
||||
{
|
||||
if (start + lenght >= e.Length)
|
||||
lenght = e.Length - start;
|
||||
|
||||
if (e == null || e.Length == 0 || lenght <= 0)
|
||||
sb.Append("binary />");
|
||||
else
|
||||
{
|
||||
sb.Append("<binary>"); // encode64 is default
|
||||
base64Encode(e, start, lenght, sb);
|
||||
sb.Append("</binary>");
|
||||
}
|
||||
}
|
||||
|
@ -451,12 +466,31 @@ namespace OpenSim.Framework
|
|||
sb.Append(name);
|
||||
sb.Append("</key>");
|
||||
|
||||
if(e == null || e.Length == 0)
|
||||
if (e == null || e.Length == 0)
|
||||
sb.Append("binary />");
|
||||
else
|
||||
{
|
||||
sb.Append("<binary>"); // encode64 is default
|
||||
sb.Append(Convert.ToBase64String(e,Base64FormattingOptions.None));
|
||||
base64Encode(e, sb);
|
||||
sb.Append("</binary>");
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddElem(string name, byte[] e, int start, int lenght, StringBuilder sb)
|
||||
{
|
||||
sb.Append("<key>");
|
||||
sb.Append(name);
|
||||
sb.Append("</key>");
|
||||
|
||||
if (start + lenght >= e.Length)
|
||||
lenght = e.Length - start;
|
||||
|
||||
if (e == null || e.Length == 0 || lenght <= 0)
|
||||
sb.Append("binary />");
|
||||
else
|
||||
{
|
||||
sb.Append("<binary>"); // encode64 is default
|
||||
base64Encode(e, start, lenght, sb);
|
||||
sb.Append("</binary>");
|
||||
}
|
||||
}
|
||||
|
@ -786,5 +820,97 @@ namespace OpenSim.Framework
|
|||
(byte)value
|
||||
};
|
||||
}
|
||||
|
||||
static readonly char[] base64Chars = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
|
||||
'P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d',
|
||||
'e','f','g','h','i','j','k','l','m','n','o','p','q','r','s',
|
||||
't','u','v','w','x','y','z','0','1','2','3','4','5','6','7',
|
||||
'8','9','+','/'};
|
||||
|
||||
public static unsafe void base64Encode(byte[] data, StringBuilder sb)
|
||||
{
|
||||
int lenMod3 = data.Length % 3;
|
||||
int len = data.Length - lenMod3;
|
||||
|
||||
fixed (byte* d = data)
|
||||
{
|
||||
fixed (char* b64 = base64Chars)
|
||||
{
|
||||
int i = 0;
|
||||
while(i < len)
|
||||
{
|
||||
sb.Append(b64[d[i] >> 2]);
|
||||
sb.Append(b64[((d[i] & 0x03) << 4) | ((d[i + 1] & 0xf0) >> 4)]);
|
||||
sb.Append(b64[((d[i + 1] & 0x0f) << 2) | ((d[i + 2] & 0xc0) >> 6)]);
|
||||
sb.Append(b64[d[i + 2] & 0x3f]);
|
||||
i += 3;
|
||||
}
|
||||
|
||||
switch (lenMod3)
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
i = len;
|
||||
sb.Append(b64[d[i] >> 2]);
|
||||
sb.Append(b64[((d[i] & 0x03) << 4) | ((d[i + 1] & 0xf0) >> 4)]);
|
||||
sb.Append(b64[((d[i + 1] & 0x0f) << 2)]);
|
||||
sb.Append('=');
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
i = len;
|
||||
sb.Append(b64[d[i] >> 2]);
|
||||
sb.Append(b64[(d[i] & 0x03) << 4]);
|
||||
sb.Append("==");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static unsafe void base64Encode(byte[] data, int start, int lenght, StringBuilder sb)
|
||||
{
|
||||
int lenMod3 = lenght % 3;
|
||||
int len = start + (lenght - lenMod3);
|
||||
|
||||
fixed (byte* d = data)
|
||||
{
|
||||
fixed (char* b64 = base64Chars)
|
||||
{
|
||||
int i = start;
|
||||
while(i < len)
|
||||
{
|
||||
sb.Append(b64[(d[i] & 0xfc) >> 2]);
|
||||
sb.Append(b64[((d[i] & 0x03) << 4) | (d[i + 1] >> 4)]);
|
||||
sb.Append(b64[((d[i + 1] & 0x0f) << 2) | (d[i + 2] >> 6)]);
|
||||
sb.Append(b64[d[i + 2] & 0x3f]);
|
||||
i += 3;
|
||||
}
|
||||
|
||||
switch (lenMod3)
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
i = len;
|
||||
sb.Append(b64[d[i] >> 2]);
|
||||
sb.Append(b64[((d[i] & 0x03) << 4) | (d[i + 1] >> 4)]);
|
||||
sb.Append(b64[((d[i + 1] & 0x0f) << 2)]);
|
||||
sb.Append('=');
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
i = len;
|
||||
sb.Append(b64[d[i] >> 2]);
|
||||
sb.Append(b64[(d[i] & 0x03) << 4]);
|
||||
sb.Append("==");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue