internal void AddHeader(string header) { int colon = header.IndexOf(':'); if (colon == -1 || colon == 0) { _context.ErrorMessage = HttpStatusDescription.Get(400); _context.ErrorStatus = 400; return; } string name = header.Substring(0, colon).Trim(); string val = header.Substring(colon + 1).Trim(); if (name.Equals("content-length", StringComparison.OrdinalIgnoreCase)) { // To match Windows behavior: // Content lengths >= 0 and <= long.MaxValue are accepted as is. // Content lengths > long.MaxValue and <= ulong.MaxValue are treated as 0. // Content lengths < 0 cause the requests to fail. // Other input is a failure, too. long parsedContentLength = ulong.TryParse(val, out ulong parsedUlongContentLength) ? (parsedUlongContentLength <= long.MaxValue ? (long)parsedUlongContentLength : 0) : long.Parse(val); if (parsedContentLength < 0 || (_clSet && parsedContentLength != _contentLength)) { _context.ErrorMessage = "Invalid Content-Length."; } else { _contentLength = parsedContentLength; _clSet = true; } } else if (name.Equals("transfer-encoding", StringComparison.OrdinalIgnoreCase)) { if (Headers[HttpKnownHeaderNames.TransferEncoding] != null) { _context.ErrorStatus = (int)HttpStatusCode.NotImplemented; _context.ErrorMessage = HttpStatusDescription.Get(HttpStatusCode.NotImplemented); } } if (_context.ErrorMessage == null) { _headers.Set(name, val); } }
public void AddHeader(string name, string value) { if (name == null) { throw new ArgumentNullException("name"); } if (name == "") { throw new ArgumentException("'name' cannot be empty", "name"); } //TODO: check for forbidden headers and invalid characters if (value.Length > 65535) { throw new ArgumentOutOfRangeException("value"); } headers.Set(name, value); }