first commit
This commit is contained in:
127
Assets/AVProVideo/Runtime/Scripts/Internal/Utils/HttpHeader.cs
Normal file
127
Assets/AVProVideo/Runtime/Scripts/Internal/Utils/HttpHeader.cs
Normal file
@@ -0,0 +1,127 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright 2020-2021 RenderHeads Ltd. All rights reserved.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
namespace RenderHeads.Media.AVProVideo
|
||||
{
|
||||
[System.Serializable]
|
||||
public struct HttpHeader
|
||||
{
|
||||
public string name;
|
||||
public string value;
|
||||
|
||||
public HttpHeader(string name, string value) { this.name = name; this.value = value; }
|
||||
|
||||
public bool IsComplete()
|
||||
{
|
||||
return (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value));
|
||||
}
|
||||
|
||||
public string ToValidatedString()
|
||||
{
|
||||
string result = null;
|
||||
if (IsComplete())
|
||||
{
|
||||
if (IsValid())
|
||||
{
|
||||
result = string.Format("{0}:{1}\r\n", name, value);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static bool IsValid(string text)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(text))
|
||||
{
|
||||
if (!IsAscii(text)) return false;
|
||||
if (text.Contains("\r") || text.Contains("\n")) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool IsAscii(string text)
|
||||
{
|
||||
foreach (char c in text)
|
||||
{
|
||||
if (c >= 128) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool IsValid()
|
||||
{
|
||||
if (!IsValid(name) || !IsValid(value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// TODO: check via regular expression
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Data for handling custom HTTP header fields
|
||||
/// </summary>
|
||||
[System.Serializable]
|
||||
public class HttpHeaderData : IEnumerable
|
||||
{
|
||||
[SerializeField]
|
||||
private List<HttpHeader> httpHeaders = new List<HttpHeader>();
|
||||
|
||||
public IEnumerator GetEnumerator()
|
||||
{
|
||||
return httpHeaders.GetEnumerator();
|
||||
}
|
||||
|
||||
public HttpHeader this[int index]
|
||||
{
|
||||
get
|
||||
{
|
||||
return httpHeaders[index];
|
||||
}
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
httpHeaders.Clear();
|
||||
}
|
||||
|
||||
public void Add(string name, string value)
|
||||
{
|
||||
httpHeaders.Add(new HttpHeader(name, value));
|
||||
}
|
||||
|
||||
public bool IsModified()
|
||||
{
|
||||
return (httpHeaders != null && httpHeaders.Count > 0);
|
||||
}
|
||||
|
||||
public string ToValidatedString()
|
||||
{
|
||||
string result = string.Empty;
|
||||
foreach (HttpHeader header in httpHeaders)
|
||||
{
|
||||
if (header.IsComplete())
|
||||
{
|
||||
string line = header.ToValidatedString();
|
||||
if (!string.IsNullOrEmpty(line))
|
||||
{
|
||||
result += line;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[AVProVideo] Custom HTTP header field ignored due to invalid format");
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user