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};
+ Contact, DispositionType, Handling, DispositionParam, ContentCoding, Day, Month, Date,
+ Time, DateTime};
fn is_mark(c: u8) -> bool {
c == b'-' || c == b'_' || c == b'.' || c == b'!' || c == b'~' || c == b'*' || c == b'\'' ||
tag!(" "),
method)));
+named!(wkday<Day>, alt!(
+ tag!(b"Mon") => { |_| Day::Monday } |
+ tag!(b"Tue") => { |_| Day::Tuesday } |
+ tag!(b"Wed") => { |_| Day::Wednesday } |
+ tag!(b"Thu") => { |_| Day::Thursday } |
+ tag!(b"Fri") => { |_| Day::Friday } |
+ tag!(b"Sat") => { |_| Day::Saturday } |
+ tag!(b"Sun") => { |_| Day::Sunday }));
+
+named!(month<Month>, alt!(
+ tag!(b"Jan") => { |_| Month::January } |
+ tag!(b"Feb") => { |_| Month::February } |
+ tag!(b"Mar") => { |_| Month::March } |
+ tag!(b"Apr") => { |_| Month::April } |
+ tag!(b"May") => { |_| Month::May } |
+ tag!(b"Jun") => { |_| Month::June } |
+ tag!(b"Jul") => { |_| Month::July } |
+ tag!(b"Aug") => { |_| Month::August } |
+ tag!(b"Sep") => { |_| Month::September } |
+ tag!(b"Oct") => { |_| Month::October } |
+ tag!(b"Nov") => { |_| Month::November } |
+ tag!(b"Dec") => { |_| Month::December }));
+
+named!(date<Date>, tuple!(
+ terminated!(number, tag!(b" ")),
+ terminated!(month, tag!(b" ")),
+ number));
+
+named!(time<Time>, tuple!(
+ terminated!(number, tag!(b":")),
+ terminated!(number, tag!(b":")),
+ number));
+
+named!(date_time<DateTime>, tuple!(
+ terminated!(wkday, tag!(b", ")),
+ terminated!(date, tag!(b" ")),
+ terminated!(time, tag!(b" GMT"))));
+
+named!(date_header<DateTime>, preceded!(
+ tag!(b"Date:"),
+ date_time));
+
named!(pub header<Header>, alt!(
// RFC 3261 Headers
accept_header => { |a| Header::Accept(a) } |
content_language_header => { |l| Header::ContentLanguage(l) } |
content_length_header => { |l| Header::ContentLength(l) } |
content_type_header => { |t| Header::ContentType(t) } |
- cseq_header => { |(c, m)| Header::CSeq(c, m) }
+ cseq_header => { |(c, m)| Header::CSeq(c, m) } |
+ date_header => { |d| Header::Date(d) }
));