UrlEncodedFormDataSetVisitor
using AngleSharp.Dom.Io;
using AngleSharp.Extensions;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace AngleSharp.Html.Submitters
{
internal sealed class UrlEncodedFormDataSetVisitor : IFormSubmitter, IFormDataSetVisitor
{
private readonly Encoding _encoding;
private readonly List<string> _lines;
private bool _first;
private string _index;
public UrlEncodedFormDataSetVisitor(Encoding encoding)
{
_encoding = encoding;
_lines = new List<string>();
_first = true;
_index = string.Empty;
}
public void Text(FormDataSetEntry entry, string value)
{
if (_first && entry.HasName && entry.Name.Is(TagNames.IsIndex) && entry.Type.Isi(InputTypeNames.Text))
_index = (value ?? string.Empty);
else if (entry.HasName && value != null) {
byte[] bytes = _encoding.GetBytes(entry.Name);
byte[] bytes2 = _encoding.GetBytes(value);
Add(bytes, bytes2);
}
_first = false;
}
public void File(FormDataSetEntry entry, string fileName, string contentType, IFile content)
{
if (entry.HasName && content != null && content.Name != null) {
byte[] bytes = _encoding.GetBytes(entry.Name);
byte[] bytes2 = _encoding.GetBytes(content.Name);
Add(bytes, bytes2);
}
_first = false;
}
public void Serialize(StreamWriter stream)
{
string value = string.Join("&", _lines);
stream.Write(_index);
stream.Write(value);
}
private void Add(byte[] name, byte[] value)
{
_lines.Add(name.UrlEncode() + "=" + value.UrlEncode());
}
}
}