bell-tel.com\r\nMax-Forwards:32\r\nMIME-Version:2.0\r\nMin-Expires:\
30\r\nOrganization:Foobar\r\nPriority:normal\r\nProxy-Authenticate:\
Digest realm=\"atlanta.com\"\r\nProxy-Authorization:Digest \
- username=\"Bob\"\r\nVia: localhost\r\n\r\n")
+ username=\"Bob\"\r\nProxy-Require:foo\r\nVia: localhost\r\n\r\n")
});
let finished = request.and_then(|(socket, _request)| {
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};
+ Challenge, OptionTag};
fn is_mark(c: u8) -> bool {
c == b'-' || c == b'_' || c == b'.' || c == b'!' || c == b'~' || c == b'*' || c == b'\'' ||
tag!(b"Proxy-Authorization:"),
credentials));
+named!(proxy_require_header<Vec<OptionTag>>, preceded!(
+ tag!(b"Proxy-Require:"),
+ separated_nonempty_list!(
+ tag!(b","),
+ token)));
+
named!(pub header<Header>, alt!(
// RFC 3261 Headers
accept_header => { |a| Header::Accept(a) } |
organization_header => { |o| Header::Organization(o) } |
priority_header => { |p| Header::Priority(p) } |
proxy_authenticate_header => { |p| Header::ProxyAuthenticate(p) } |
- proxy_authorization_header => { |p| Header::ProxyAuthorization(p) }
+ proxy_authorization_header => { |p| Header::ProxyAuthorization(p) } |
+ proxy_require_header => { |p| Header::ProxyRequire(p) }
));
Other(Vec<u8>, Vec<AuthParam>),
}
+pub type OptionTag = Vec<u8>;
+
#[derive(Debug)]
pub enum Header {
Accept(Vec<AcceptRange>),
Priority(Priority),
ProxyAuthenticate(Challenge),
ProxyAuthorization(Credentials),
+ ProxyRequire(Vec<OptionTag>),
To(Uri),
Extension { name: String, value: String },
}