From 4364d2348fc323a9fe2d80f492414cb59af0527b Mon Sep 17 00:00:00 2001 From: Richard Whitehouse Date: Sun, 29 Oct 2017 15:40:25 +0000 Subject: [PATCH] Support Content-Encoding header --- src/codec.rs | 4 ++-- src/parser.rs | 11 +++++++++-- src/types.rs | 3 +++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/codec.rs b/src/codec.rs index dedd02b..1ec9c14 100644 --- a/src/codec.rs +++ b/src/codec.rs @@ -432,8 +432,8 @@ mod tests { MESSAGE\r\nAuthentication-Info:qop=auth\r\nAuthorization:Digest \ username=\"Alice\"\r\nCall-ID:f81d4fae-7dec-11d0-a765-00a0c91e6bf6@foo.\ bar.com\r\nCall-Info:;\ - purpose=icon\r\nContact:*\r\nContent-Disposition:session\r\nVia: \ - localhost\r\n\r\n") + purpose=icon\r\nContact:*\r\nContent-Disposition:\ + session\r\nContent-Encoding:gzip\r\nVia: localhost\r\n\r\n") }); let finished = request.and_then(|(socket, _request)| { diff --git a/src/parser.rs b/src/parser.rs index 643b98b..de7320a 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -15,7 +15,7 @@ use types::{PathSegment, HostPort, Host, Hostname, UriParameter, UriHeader, UriH AcceptParam, AcceptRange, Coding, Encoding, LanguageRange, Language, AlertParam, Qop, AuthenticationInfo, AuthParam, Algorithm, DigestResponse, Credentials, CallId, Purpose, InfoParam, Info, NameAddr, ContactParam, ContactTarget, Contact, - DispositionType, Handling, DispositionParam}; + DispositionType, Handling, DispositionParam, ContentCoding}; fn is_mark(c: u8) -> bool { c == b'-' || c == b'_' || c == b'.' || c == b'!' || c == b'~' || c == b'*' || c == b'\'' || @@ -810,6 +810,12 @@ named!(content_disposition_header<(DispositionType, Vec)>, pre tag!(b";"), disp_param))))); +named!(content_encoding_header>, preceded!( + alt!(tag!(b"Content-Encoding:") | tag!(b"e:")), + separated_nonempty_list!( + tag!(b","), + token))); + named!(pub header
, alt!( // RFC 3261 Headers accept_header => { |a| Header::Accept(a) } | @@ -822,5 +828,6 @@ named!(pub header
, alt!( call_id_header => { |c| Header::CallId(c) } | call_info_header => { |c| Header::CallInfo(c) } | contact_header => { |c| Header::Contact(c) } | - content_disposition_header => { |(t, p)| Header::ContentDisposition(t, p) } + content_disposition_header => { |(t, p)| Header::ContentDisposition(t, p) } | + content_encoding_header => { |e| Header::ContentEncoding(e) } )); diff --git a/src/types.rs b/src/types.rs index 177a037..2beb957 100644 --- a/src/types.rs +++ b/src/types.rs @@ -292,6 +292,8 @@ pub enum DispositionParam { Generic(GenericParam), } +pub type ContentCoding = Vec; + #[derive(Debug)] pub enum Header { Accept(Vec), @@ -305,6 +307,7 @@ pub enum Header { CallInfo(Vec), Contact(Contact), ContentDisposition(DispositionType, Vec), + ContentEncoding(Vec), From(Uri), To(Uri), Extension { name: String, value: String }, -- 2.34.1