use types::{PathSegment, HostPort, Host, Hostname, UriParameter, UriHeader, UriHeaders, SipUri,
AbsoluteUri, Uri, HierarchicalPath, Authority, UriPath, UserInfo, AbsolutePath,
Scheme, Method, Transport, UserParam, Version, RequestLine, StatusLine, TopLine,
- Header, MediaType, MediaFullType, MediaParameter, MediaRange, GenericParam,
- AcceptParam, AcceptRange, Coding, Encoding, LanguageTag, LanguageRange, Language,
- AlertParam, Qop, AuthenticationInfo, AuthParam, Algorithm, DigestResponse,
+ Header, MediaMainType, MediaType, MediaFullType, MediaParameter, MediaRange,
+ GenericParam, AcceptParam, AcceptRange, Coding, Encoding, LanguageTag, LanguageRange,
+ Language, AlertParam, Qop, AuthenticationInfo, AuthParam, Algorithm, DigestResponse,
Credentials, CallId, Purpose, InfoParam, Info, NameAddr, ContactParam, ContactTarget,
Contact, DispositionType, Handling, DispositionParam, ContentCoding};
// Accept Header
-named!(media_type<MediaType>, alt!(
+named!(media_main_type<MediaMainType>, alt!(
// Discrete Types
- tag!(b"text") => { |_| MediaType::Text } |
- tag!(b"image") => { |_| MediaType::Image } |
- tag!(b"audio") => { |_| MediaType::Audio } |
- tag!(b"video") => { |_| MediaType::Video } |
- tag!(b"application") => { |_| MediaType::Application } |
+ tag!(b"text") => { |_| MediaMainType::Text } |
+ tag!(b"image") => { |_| MediaMainType::Image } |
+ tag!(b"audio") => { |_| MediaMainType::Audio } |
+ tag!(b"video") => { |_| MediaMainType::Video } |
+ tag!(b"application") => { |_| MediaMainType::Application } |
// Composite Types
- tag!(b"message") => { |_| MediaType::Message } |
- tag!(b"multipart") => { |_| MediaType::Multipart } |
+ tag!(b"message") => { |_| MediaMainType::Message } |
+ tag!(b"multipart") => { |_| MediaMainType::Multipart } |
// Extensions
- token => { |x| MediaType::Extension(x) }));
+ token => { |x| MediaMainType::Extension(x) }));
// We don't bother splitting IANA, IETF and x- token types.
use self::token as media_subtype;
tag!(b"="),
media_value));
+named!(media_type<MediaType>, separated_pair!(
+ media_main_type,
+ tag!(b"/"),
+ media_subtype));
+
named!(media_range<MediaRange>, tuple!(
alt!(
tag!(b"*/*") => { |_| MediaFullType::All } |
- terminated!(media_type, tag!(b"/*")) => { |x| MediaFullType::Partial(x) } | /**/
- separated_pair!(
- media_type,
- tag!(b"/"),
- media_subtype) => { |(t, st)| MediaFullType::Specific(t, st) }),
+ terminated!(media_main_type, tag!(b"/*")) => { |x| MediaFullType::Partial(x) } | /**/
+ media_type => { |(t, st)| MediaFullType::Specific(t, st) }),
many0!(
preceded!(tag!(b";"), media_parameter))));
alt!(tag!(b"Content-Length:") | tag!(b"l:")),
number));
+named!(content_type_header<MediaType>, preceded!(
+ alt!(tag!(b"Content-Type:") | tag!(b"c:")),
+ media_type));
+
named!(pub header<Header>, alt!(
// RFC 3261 Headers
accept_header => { |a| Header::Accept(a) } |
content_disposition_header => { |(t, p)| Header::ContentDisposition(t, p) } |
content_encoding_header => { |e| Header::ContentEncoding(e) } |
content_language_header => { |l| Header::ContentLanguage(l) } |
- content_length_header => { |l| Header::ContentLength(l) }
+ content_length_header => { |l| Header::ContentLength(l) } |
+ content_type_header => { |t| Header::ContentType(t) }
));