2\r\nTo:<sip:operator@cs.columbia.edu>;tag=287447\r\nUnsupported:\
100rel\r\nUser-Agent:rust-sip\r\nVia:SIP/2.0/UDP \
pc33.atlanta.com;branch=z9hG4bK776asdhds\r\nWarning:370 devnull \
- \"Failure\"\r\nWWW-Authenticate:Digest realm=\"biloxi.com\"\r\n\r\n")
+ \"Failure\"\r\nWWW-Authenticate:Digest \
+ realm=\"biloxi.com\"\r\nX-Extension:test\r\n\r\n")
});
let finished = request.and_then(|(socket, _request)| {
tag!(b"WWW-Authenticate:"),
challenge));
+named!(extension_header<(Vec<u8>, Vec<u8>)>, separated_pair!(
+ token,
+ tag!(":"),
+ word));
+
named!(pub header<Header>, alt!(
// RFC 3261 Headers
accept_header => { |a| Header::Accept(a) } |
user_agent_header => { |u| Header::UserAgent(u) } |
via_header => { |v| Header::Via(v) } |
warning_header => { |w| Header::Warning(w) } |
- www_authenticate_header => { |w| Header::WwwAuthenticate(w) }
+ www_authenticate_header => { |w| Header::WwwAuthenticate(w) } |
+// Custom extension headers
+ extension_header => { |(n, v)| Header::Extension { name: n, value: v } }
));
Via(Vec<Via>),
Warning(Vec<Warning>),
WwwAuthenticate(Challenge),
- Extension { name: String, value: String },
+ Extension { name: Vec<u8>, value: Vec<u8> },
}