OpenSimMirror/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpParam.cs

115 lines
3.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
namespace OSHttpServer
{
/// <summary>
/// Returns item either from a form or a query string (checks them in that order)
/// </summary>
public class HttpParam : IHttpInput
{
/// <summary> Representation of a non-initialized HttpParam </summary>
public static readonly HttpParam Empty = new HttpParam(HttpInput.Empty, HttpInput.Empty);
private IHttpInput m_form;
private IHttpInput m_query;
private List<HttpInputItem> _items = new List<HttpInputItem>();
/// <summary>Initialises the class to hold a value either from a post request or a querystring request</summary>
public HttpParam(IHttpInput form, IHttpInput query)
{
m_form = form;
m_query = query;
}
#region IHttpInput Members
/// <summary>
/// The add method is not availible for HttpParam
/// since HttpParam checks both Request.Form and Request.QueryString
/// </summary>
/// <param name="name">name identifying the value</param>
/// <param name="value">value to add</param>
/// <exception cref="NotImplementedException"></exception>
[Obsolete("Not implemented for HttpParam")]
public void Add(string name, string value)
{
throw new NotImplementedException();
}
/// <summary>
/// Checks whether the form or querystring has the specified value
/// </summary>
/// <param name="name">Name, case sensitive</param>
/// <returns>true if found; otherwise false.</returns>
public bool Contains(string name)
{
return m_form.Contains(name) || m_query.Contains(name);
}
/// <summary>
/// Fetch an item from the form or querystring (in that order).
/// </summary>
/// <param name="name"></param>
/// <returns>Item if found; otherwise HttpInputItem.EmptyLanguageNode</returns>
public HttpInputItem this[string name]
{
get
{
if (m_form[name] != HttpInputItem.Empty)
return m_form[name];
else
return m_query[name];
}
}
#endregion
internal void SetQueryString(HttpInput query)
{
m_query = query;
}
internal void SetForm(HttpInput form)
{
m_form = form;
}
///<summary>
///Returns an enumerator that iterates through the collection.
///</summary>
///
///<returns>
///A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
///</returns>
///<filterpriority>1</filterpriority>
IEnumerator<HttpInputItem> IEnumerable<HttpInputItem>.GetEnumerator()
{
List<HttpInputItem> items = new List<HttpInputItem>(m_query);
items.AddRange(m_form);
return items.GetEnumerator();
}
#region IEnumerable Members
///<summary>
///Returns an enumerator that iterates through a collection.
///</summary>
///
///<returns>
///An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
///</returns>
///<filterpriority>2</filterpriority>
public IEnumerator GetEnumerator()
{
List<HttpInputItem> items = new List<HttpInputItem>(m_query);
items.AddRange(m_form);
return items.GetEnumerator();
}
#endregion
}
}