// Send a request
let socket = TcpStream::connect(&addr, &handle);
- let request =
- socket.and_then(|socket| {
- io::write_all(socket,
- "MESSAGE sip:test.com SIP/2.0\r\nAccept:text/plain\r\nVia: \
- localhost\r\n\r\n")
- });
+ let request = socket.and_then(|socket| {
+ io::write_all(socket,
+ "MESSAGE sip:test.com \
+ SIP/2.0\r\nAccept:text/plain\r\nAccept-Encoding:*\r\nVia: \
+ localhost\r\n\r\n")
+ });
let finished = request.and_then(|(socket, _request)| {
futures::done(socket.shutdown(Shutdown::Write).map(|_| socket))
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};
+ MediaFullType, MediaParameter, MediaRange, GenericParam, AcceptParam, AcceptRange,
+ Coding, Encoding};
fn is_mark(c: u8) -> bool {
c == b'-' || c == b'_' || c == b'.' || c == b'!' || c == b'~' || c == b'*' || c == b'\'' ||
accept_param))));
named!(accept_header<Vec<AcceptRange>>, preceded!(
- tag!("Accept:"),
+ tag!(b"Accept:"),
separated_nonempty_list!(
tag!(b","),
accept_range)));
+named!(codings<Coding>, alt!(
+ tag!(b"*") => { |_| Coding::All } |
+ token => { |t| Coding::Content(t) }
+));
+
+named!(encoding<Encoding>, tuple!(
+ codings,
+ many0!(preceded!(
+ tag!(b";"),
+ accept_param))));
+
+named!(accept_encoding_header<Vec<Encoding>>, preceded!(
+ tag!(b"Accept-Encoding:"),
+ separated_nonempty_list!(
+ tag!(b","),
+ encoding)));
+
named!(pub header<Header>, alt!(
// RFC 3261 Headers
- accept_header => { |a| Header::Accept(a) }
+ accept_header => { |a| Header::Accept(a) } |
+ accept_encoding_header => { |a| Header::AcceptEncoding(a) }
));
pub type AcceptRange = (MediaRange, Vec<AcceptParam>);
+#[derive(Debug)]
+pub enum Coding {
+ All,
+ Content(Vec<u8>),
+}
+
+pub type Encoding = (Coding, Vec<AcceptParam>);
+
#[derive(Debug)]
pub enum Header {
Accept(Vec<AcceptRange>),
+ AcceptEncoding(Vec<Encoding>),
From(Uri),
To(Uri),
Extension { name: String, value: String },