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:<http://wwww.example.com/alice/photo.jpg>;\
- 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)| {
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'\'' ||
tag!(b";"),
disp_param)))));
+named!(content_encoding_header<Vec<ContentCoding>>, preceded!(
+ alt!(tag!(b"Content-Encoding:") | tag!(b"e:")),
+ separated_nonempty_list!(
+ tag!(b","),
+ token)));
+
named!(pub header<Header>, alt!(
// RFC 3261 Headers
accept_header => { |a| Header::Accept(a) } |
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) }
));
Generic(GenericParam),
}
+pub type ContentCoding = Vec<u8>;
+
#[derive(Debug)]
pub enum Header {
Accept(Vec<AcceptRange>),
CallInfo(Vec<Info>),
Contact(Contact),
ContentDisposition(DispositionType, Vec<DispositionParam>),
+ ContentEncoding(Vec<ContentCoding>),
From(Uri),
To(Uri),
Extension { name: String, value: String },