use nom::ErrorKind::Custom;
use types::{PathSegment, HostPort, Host, Hostname, UriParameter, UriHeader, UriHeaders, SipUri,
- Uri, HierarchicalPath, Authority, UriPath, UserInfo, AbsolutePath, Scheme, Method,
- Transport, UserParam, Version, RequestLine, StatusLine, TopLine, Header, MediaType,
- MediaFullType, MediaParameter, MediaRange, GenericParam, AcceptParam, AcceptRange,
- Coding, Encoding, LanguageRange, Language};
+ 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, LanguageRange, Language, AlertParam};
fn is_mark(c: u8) -> bool {
c == b'-' || c == b'_' || c == b'.' || c == b'!' || c == b'~' || c == b'*' || c == b'\'' ||
uric_no_slash,
many0!(uric)));
-named!(absolute_uri<&[u8], (Scheme, UriPath)>, separated_pair!(
+named!(absolute_uri<&[u8], AbsoluteUri>, separated_pair!(
scheme,
char!(':'),
alt!(
tag!(b","),
language)));
+named!(alert_param<AlertParam>, tuple!(
+ delimited!(
+ tag!(b"<"),
+ absolute_uri,
+ tag!(b">")
+ ),
+ many0!(generic_param)));
+
+named!(alert_info_header<Vec<AlertParam>>, preceded!(
+ tag!(b"Alert-Info:"),
+ separated_nonempty_list!(
+ tag!(b","),
+ alert_param)));
+
named!(pub header<Header>, alt!(
// RFC 3261 Headers
accept_header => { |a| Header::Accept(a) } |
accept_encoding_header => { |a| Header::AcceptEncoding(a) } |
- accept_language_header => { |a| Header::AcceptLanguage(a) }
+ accept_language_header => { |a| Header::AcceptLanguage(a) } |
+ alert_info_header => { |a| Header::AlertInfo(a) }
));
pub headers: Option<UriHeaders>,
}
+pub type AbsoluteUri = (Scheme, UriPath);
+
#[derive(Debug)]
pub enum Uri {
Sip(SipUri),
pub type Language = (LanguageRange, Vec<AcceptParam>);
+pub type AlertParam = (AbsoluteUri, Vec<GenericParam>);
+
#[derive(Debug)]
pub enum Header {
Accept(Vec<AcceptRange>),
AcceptEncoding(Vec<Encoding>),
AcceptLanguage(Vec<Language>),
+ AlertInfo(Vec<AlertParam>),
From(Uri),
To(Uri),
Extension { name: String, value: String },