galaxy brain 2: bit of restructure (Bootstrap)

This commit is contained in:
Mino 2020-03-11 11:52:51 +09:00
parent 2438a89867
commit 350d2961c1
19 changed files with 345 additions and 136 deletions

View file

@ -0,0 +1,55 @@
using System.Collections.Generic;
using System.Text;
namespace Dalamud.Bootstrap.SqexArg
{
internal sealed class ArgumentBuilder
{
private readonly Dictionary<string, string> m_dict;
public ArgumentBuilder()
{
m_dict = new Dictionary<string, string>();
}
public ArgumentBuilder Add(string key, string value)
{
m_dict.Add(key, value);
return this;
}
public ArgumentBuilder Clear()
{
m_dict.Clear();
return this;
}
private static void Write(StringBuilder buffer, string key, string value)
{
var escapedKey = EscapeValue(key);
var escapedvalue = EscapeValue(value);
buffer.Append($" /{escapedKey} ={escapedvalue}");
}
private static string EscapeValue(string value)
{
// a single space character is represented as dobule spaces
return value.Replace(" ", " ");
}
public override string ToString()
{
var buffer = new StringBuilder(256);
foreach (var kv in m_dict)
{
Write(buffer, kv.Key, kv.Value);
}
return buffer.ToString();
}
}
}

View file

@ -0,0 +1,47 @@
using System;
namespace Dalamud.Bootstrap.SqexArg
{
internal static class ArgumentDecoder
{
public static void Decode(ReadOnlySpan<char> argument, uint key)
{
// 1. strip //**sqex003 and **//
// 2. extract checksum
// 3. deduce upper nibble key
// 4.
// //**c**//
if (argument.Length <= 9)
{
throw new ArgumentException(nameof(argument));
}
if (!argument.StartsWith("//**") || !argument.EndsWith("**//"))
{
throw new ArgumentException(nameof(argument));
}
var payload = argument[4..^5];
var checksum = argument[^5];
// undo url safe
//payload.re
// stuff
}
private static void DecodeUrlSafeBase64(ReadOnlySpan<char> content)
{
var buffer = new byte[(content.Length / 3) * 4];
if (!Convert.TryFromBase64Chars(payload, buffer, out var _))
{
// TODO
}
}
}
}