From: Richard Whitehouse Date: Sun, 29 Oct 2017 17:15:58 +0000 (+0000) Subject: Support Date header X-Git-Url: https://git.richardwhiuk.com/?a=commitdiff_plain;h=747bce9725e565d338165a271be63475c239a62d;p=rust-sip.git Support Date header --- diff --git a/src/codec.rs b/src/codec.rs index 040e995..c873c51 100644 --- a/src/codec.rs +++ b/src/codec.rs @@ -435,7 +435,7 @@ mod tests { purpose=icon\r\nContact:*\r\nContent-Disposition:\ session\r\nContent-Encoding:gzip\r\nContent-Language:\ en-gb\r\nContent-Length:0\r\nContent-Type:text/plain\r\nCSeq:1 \ - MESSAGE\r\nVia: localhost\r\n\r\n") + MESSAGE\r\nDate:Sat, 13 Nov 2010 23:29:00 GMT\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 e1fed22..6adbb5e 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -15,7 +15,8 @@ use types::{PathSegment, HostPort, Host, Hostname, UriParameter, UriHeader, UriH 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'\'' || @@ -839,6 +840,48 @@ named!(cseq_header<(u32, Method)>, preceded!( tag!(" "), method))); +named!(wkday, 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, 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, tuple!( + terminated!(number, tag!(b" ")), + terminated!(month, tag!(b" ")), + number)); + +named!(time