31 lines
992 B
C#
31 lines
992 B
C#
|
using System;
|
|||
|
using System.IO;
|
|||
|
|
|||
|
namespace Hamakaze.Headers {
|
|||
|
public class HttpContentLengthHeader : HttpHeader {
|
|||
|
public const string NAME = @"Content-Length";
|
|||
|
|
|||
|
public override string Name => NAME;
|
|||
|
public override object Value => Stream?.Length ?? Length;
|
|||
|
|
|||
|
private Stream Stream { get; }
|
|||
|
private long Length { get; }
|
|||
|
|
|||
|
public HttpContentLengthHeader(Stream stream) {
|
|||
|
Stream = stream ?? throw new ArgumentNullException(nameof(stream));
|
|||
|
if(!stream.CanRead || !stream.CanSeek)
|
|||
|
throw new ArgumentException(@"Body must readable and seekable.", nameof(stream));
|
|||
|
}
|
|||
|
|
|||
|
public HttpContentLengthHeader(long length) {
|
|||
|
Length = length;
|
|||
|
}
|
|||
|
|
|||
|
public HttpContentLengthHeader(string length) {
|
|||
|
if(!long.TryParse(length, out long ll))
|
|||
|
throw new ArgumentException(@"Invalid length value.", nameof(length));
|
|||
|
Length = ll;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|