Credentials, CallId, Purpose, InfoParam, Info, NameAddr, ContactParam, Target,
Contact, DispositionType, Handling, DispositionParam, ContentCoding, Day, Month, Date,
Time, DateTime, ErrorUri, FromParam, From, Priority, Domain, DigestChallenge,
- Challenge, OptionTag, Route, ReplyTo, RetryAfterParam, RetryAfter, Server};
+ Challenge, OptionTag, Route, ReplyTo, RetryAfterParam, RetryAfter, Server, ToParam, To};
pub fn float(input: &[u8]) -> IResult<&[u8], f32> {
flat_map!(input,
use self::float as delay;
-named!(timestamp_header<Vec<f32>>, dbg!(preceded!(
+named!(timestamp_header<Vec<f32>>, preceded!(
tag!(b"Timestamp:"),
- dbg!(separated_nonempty_list!(
- dbg!(tag!(b" ")),
- dbg!(delay))))));
+ separated_nonempty_list!(
+ tag!(b" "),
+ delay)));
+
+named!(to_param<ToParam>, alt!(
+ preceded!(tag!("tag="), token) => { |t| ToParam::Tag(t) } |
+ generic_param => { |g| ToParam::Generic(g) }));
+
+named!(to_header<To>, preceded!(
+ alt!(tag!(b"To:") | tag!("t:")),
+ tuple!(
+ target,
+ many0!(preceded!(
+ tag!(b";"),
+ to_param)))));
named!(pub header<Header>, alt!(
// RFC 3261 Headers
server_header => { |s| Header::Server(s) } |
subject_header => { |s| Header::Subject(s) } |
supported_header => { |s| Header::Supported(s) } |
- timestamp_header => { |t| Header::Timestamp(t) }
+ timestamp_header => { |t| Header::Timestamp(t) } |
+ to_header => { |t| Header::To(t) }
));
pub type Server = (Vec<u8>, Option<Vec<u8>>);
+#[derive(Debug)]
+pub enum ToParam {
+ Tag(Vec<u8>),
+ Generic(GenericParam),
+}
+
+pub type To = (Target, Vec<ToParam>);
+
#[derive(Debug)]
pub enum Header {
Accept(Vec<AcceptRange>),
Subject(Vec<u8>),
Supported(Vec<OptionTag>),
Timestamp(Vec<f32>),
- To(Uri),
+ To(To),
Extension { name: String, value: String },
}