biloxi.com;lr>\r\nReply-To:<sip:bob@biloxi.com>\r\nRequire:\
baz\r\nRetry-After:18000;duration=3600\r\nRoute:<sip:bigbox3.site3.\
atlanta.com;lr>\r\nServer:rust-sip \
- tokio\r\nSubject:Foobaz\r\nSupported:rec\r\nVia: localhost\r\n\r\n")
+ tokio\r\nSubject:Foobaz\r\nSupported:rec\r\nTimestamp:1 2\r\nVia: \
+ localhost\r\n\r\n")
});
let finished = request.and_then(|(socket, _request)| {
Time, DateTime, ErrorUri, FromParam, From, Priority, Domain, DigestChallenge,
Challenge, OptionTag, Route, ReplyTo, RetryAfterParam, RetryAfter, Server};
+pub fn float(input: &[u8]) -> IResult<&[u8], f32> {
+ flat_map!(input,
+ recognize!(tuple!(opt!(alt!(tag!("+") | tag!("-"))),
+ alt!(delimited!(digits, tag!("."), opt!(digits)) |
+ delimited!(opt!(digits), tag!("."), digits) |
+ digits),
+ opt!(complete!(tuple!(alt!(tag!("e") | tag!("E")),
+ opt!(alt!(tag!("+") | tag!("-"))),
+ digit))))),
+ parse_to!(f32))
+}
+
fn is_mark(c: u8) -> bool {
c == b'-' || c == b'_' || c == b'.' || c == b'!' || c == b'~' || c == b'*' || c == b'\'' ||
c == b'(' || c == b')'
tag!(b"="),
opt!(token)));
-use nom::float as qvalue;
+use self::float as qvalue;
named!(qparam<f32>, preceded!(tag!(b"q="), qvalue));
tag!(b","),
token)));
+use self::float as delay;
+
+named!(timestamp_header<Vec<f32>>, dbg!(preceded!(
+ tag!(b"Timestamp:"),
+ dbg!(separated_nonempty_list!(
+ dbg!(tag!(b" ")),
+ dbg!(delay))))));
+
named!(pub header<Header>, alt!(
// RFC 3261 Headers
accept_header => { |a| Header::Accept(a) } |
route_header => { |r| Header::Route(r) } |
server_header => { |s| Header::Server(s) } |
subject_header => { |s| Header::Subject(s) } |
- supported_header => { |s| Header::Supported(s) }
+ supported_header => { |s| Header::Supported(s) } |
+ timestamp_header => { |t| Header::Timestamp(t) }
));