From: Richard Whitehouse Date: Sun, 29 Oct 2017 22:01:22 +0000 (+0000) Subject: Support Server header X-Git-Url: https://git.richardwhiuk.com/?a=commitdiff_plain;h=b3397271c837309deb5645ec58a34a9dbfcc8ed7;p=rust-sip.git Support Server header --- diff --git a/src/codec.rs b/src/codec.rs index 3d28cbe..51c802a 100644 --- a/src/codec.rs +++ b/src/codec.rs @@ -445,7 +445,7 @@ mod tests { username=\"Bob\"\r\nProxy-Require:foo\r\nRecord-Route:\r\nReply-To:\r\nRequire:\ baz\r\nRetry-After:18000;duration=3600\r\nRoute:\r\nVia: localhost\r\n\r\n") + atlanta.com;lr>\r\nServer:rust-sip tokio\r\nVia: localhost\r\n\r\n") }); let finished = request.and_then(|(socket, _request)| { diff --git a/src/parser.rs b/src/parser.rs index f414787..271d44c 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -17,7 +17,7 @@ use types::{PathSegment, HostPort, Host, Hostname, UriParameter, UriHeader, UriH 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}; + Challenge, OptionTag, Route, ReplyTo, RetryAfterParam, RetryAfter, Server}; fn is_mark(c: u8) -> bool { c == b'-' || c == b'_' || c == b'.' || c == b'!' || c == b'~' || c == b'*' || c == b'\'' || @@ -1092,6 +1092,18 @@ named!(route_header>, preceded!( tag!(b","), route))); +named!(server, pair!( + token, + opt!(preceded!( + tag!(b"/"), + token)))); + +named!(server_header>, preceded!( + tag!(b"Server:"), + separated_nonempty_list!( + tag!(b" "), + server))); + named!(pub header
, alt!( // RFC 3261 Headers accept_header => { |a| Header::Accept(a) } | @@ -1127,5 +1139,6 @@ named!(pub header
, alt!( reply_to_header => { |r| Header::ReplyTo(r) } | require_header => { |r| Header::Require(r) } | retry_after_header => { |r| Header::RetryAfter(r) } | - route_header => { |r| Header::Route(r) } + route_header => { |r| Header::Route(r) } | + server_header => { |s| Header::Server(s) } )); diff --git a/src/types.rs b/src/types.rs index db98598..4b39daf 100644 --- a/src/types.rs +++ b/src/types.rs @@ -387,6 +387,8 @@ pub enum RetryAfterParam { pub type RetryAfter = (u32, Vec); +pub type Server = (Vec, Option>); + #[derive(Debug)] pub enum Header { Accept(Vec), @@ -423,6 +425,7 @@ pub enum Header { Require(Vec), RetryAfter(RetryAfter), Route(Vec), + Server(Vec), To(Uri), Extension { name: String, value: String }, }