using System; using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.IO; using Microsoft.AspNetCore.Http; namespace MediaBrowser.Model.Services { public interface IRequest { IResponse Response { get; } /// /// The name of the service being called (e.g. Request DTO Name) /// string OperationName { get; set; } /// /// The Verb / HttpMethod or Action for this request /// string Verb { get; } /// /// The Request DTO, after it has been deserialized. /// object Dto { get; set; } /// /// The request ContentType /// string ContentType { get; } bool IsLocal { get; } string UserAgent { get; } /// /// The expected Response ContentType for this request /// string ResponseContentType { get; set; } /// /// Attach any data to this request that all filters and services can access. /// Dictionary Items { get; } IHeaderDictionary Headers { get; } IQueryCollection QueryString { get; } Task GetFormData(); string RawUrl { get; } string AbsoluteUri { get; } /// /// The Remote Ip as reported by X-Forwarded-For, X-Real-IP or Request.UserHostAddress /// string RemoteIp { get; } /// /// The value of the Authorization Header used to send the Api Key, null if not available /// string Authorization { get; } string[] AcceptTypes { get; } string PathInfo { get; } Stream InputStream { get; } long ContentLength { get; } /// /// Access to the multi-part/formdata files posted on this request /// IHttpFile[] Files { get; } /// /// The value of the Referrer, null if not available /// Uri UrlReferrer { get; } } public interface IHttpFile { string Name { get; } string FileName { get; } long ContentLength { get; } string ContentType { get; } Stream InputStream { get; } } public interface IRequiresRequest { IRequest Request { get; set; } } public interface IResponse { IRequest Request { get; } int StatusCode { get; set; } string StatusDescription { get; set; } string ContentType { get; set; } void AddHeader(string name, string value); string GetHeader(string name); void Redirect(string url); Stream OutputStream { get; } /// /// Gets a value indicating whether this instance is closed. /// bool IsClosed { get; set; } //Add Metadata to Response Dictionary Items { get; } IHeaderDictionary Headers { get; } Task TransmitFile(string path, long offset, long count, FileShareMode fileShareMode, IFileSystem fileSystem, IStreamHelper streamHelper, CancellationToken cancellationToken); bool SendChunked { get; set; } } }