diff --git a/HeaderContainer.cs b/HeaderContainer.cs index ff56bff..e2143db 100644 --- a/HeaderContainer.cs +++ b/HeaderContainer.cs @@ -36,8 +36,8 @@ namespace ln.protocols.helper } else if (colon > 0) { - headerName = headerLine.Substring(0, colon); - Add(headerName, headerLine.Substring(colon + 1)); + headerName = headerLine.Substring(0, colon).Trim(); + Add(headerName, headerLine.Substring(colon + 1).Trim()); } } } @@ -48,7 +48,7 @@ namespace ln.protocols.helper set => Set(headerName, value); } - bool TryGetHeader(string headerName, out Header header) => + public bool TryGetHeader(string headerName, out Header header) => _headers.TryGetValue(headerName.ToLower(), out header); public bool TryGetValue(string headerName, out string headerValue) @@ -179,9 +179,11 @@ namespace ln.protocols.helper } public string UpperName { get; private set; } - public string Value { get; set; } + private Dictionary parameters; + + public Header(string headerName) { Name = headerName; @@ -193,5 +195,53 @@ namespace ln.protocols.helper Name = headerName; Value = headerValue; } + + public bool TryGetParameter(string parameterName, out string parameterValue) + { + if (parameters is null) + ParseParameters(); + + return parameters.TryGetValue(parameterName, out parameterValue); + } + public bool ContainsParameter(string parameterName) + { + if (parameters is null) + ParseParameters(); + + return parameters.ContainsKey(parameterName); + } + + + public Header ParseParameters() + { + parameters = new Dictionary(); + + int idxSemicolon = Value.IndexOf(';'); + if (idxSemicolon != -1) + { + string[] ptoks = Value.Split(';'); + + foreach (string ptok in ptoks) + { + int idxEqual = ptok.IndexOf('='); + string pn, pv; + if (idxEqual != -1) + { + pn = ptok.Substring(0, idxEqual).Trim(); + pv = ptok.Substring(idxEqual + 1); + } + else + { + pn = ptok.Trim(); + pv = ""; + } + + parameters.Add(pn, pv); + } + } + + return this; + } + } } \ No newline at end of file diff --git a/HttpLikeProtocolReader.cs b/HttpLikeProtocolReader.cs index e9e9a92..4641e40 100644 --- a/HttpLikeProtocolReader.cs +++ b/HttpLikeProtocolReader.cs @@ -24,7 +24,7 @@ namespace ln.protocols.helper request.Headers.Clear(); request.Headers.Read(stream); - if (request.Headers.TryGetInteger("content-stream", out int contentLength) && (contentLength > 0)) + if (request.Headers.TryGetInteger("content-length", out int contentLength) && (contentLength > 0)) { request.ContentStream = new RequestContentStream(stream, contentLength); } diff --git a/StreamExtensions.cs b/StreamExtensions.cs index e65d13f..b5f63b1 100644 --- a/StreamExtensions.cs +++ b/StreamExtensions.cs @@ -32,5 +32,8 @@ namespace ln.protocols.helper return encoding.GetString(line, 0, n); return null; } + + public static TextReader TextReader(this Stream stream) => new StreamReader(stream); + } } \ No newline at end of file diff --git a/ln.protocols.helper.csproj b/ln.protocols.helper.csproj index 35b6a86..1eeb3d9 100644 --- a/ln.protocols.helper.csproj +++ b/ln.protocols.helper.csproj @@ -3,6 +3,8 @@ net5.0 9 + true + 1.0.1