Extension header support
authorRichard Whitehouse <github@richardwhiuk.com>
Sat, 4 Nov 2017 19:38:19 +0000 (19:38 +0000)
committerRichard Whitehouse <github@richardwhiuk.com>
Sat, 4 Nov 2017 19:38:19 +0000 (19:38 +0000)
src/codec.rs
src/parser.rs
src/types.rs

index 8b7cb8660d2d6d1b24814a2ca6fd38f749d14534..c5974611dbdfd9413c75c10cf706a787c19bcde2 100644 (file)
@@ -450,7 +450,8 @@ mod tests {
                            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)| {
index 308291ee40cf5213e6afc8da7f63ac8b749314e8..d888f2227f49e24e9d6ff8170ef537566a102eee 100644 (file)
@@ -1223,6 +1223,11 @@ named!(www_authenticate_header<Challenge>, preceded!(
        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) } |
@@ -1268,5 +1273,7 @@ named!(pub header<Header>, alt!(
        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 } }
 ));
index f06fefe26b5c7a878e811803cfe4d671c6e8e4c2..88495dc0c59f14ca0845e521eb7c971b82564112 100644 (file)
@@ -476,5 +476,5 @@ pub enum Header {
     Via(Vec<Via>),
     Warning(Vec<Warning>),
     WwwAuthenticate(Challenge),
-    Extension { name: String, value: String },
+    Extension { name: Vec<u8>, value: Vec<u8> },
 }