[][src]Crate rtsp_types

Crate for handling RTSP (RFC 7826) messages, including a parser and serializer and support for parsing and generating well-known headers.

Creating an OPTIONS request

let request = rtsp_types::Request::builder(
        rtsp_types::Method::Options,
        rtsp_types::Version::V2_0
    )
    .header(rtsp_types::headers::CSEQ, "1")
    .empty();

This request contains an empty body.

Creating a SET_PARAMETER request with a request body

let request = rtsp_types::Request::builder(
        rtsp_types::Method::SetParameter,
        rtsp_types::Version::V2_0
    )
    .request_uri(rtsp_types::Url::parse("rtsp://example.com/test").expect("Invalid URI"))
    .header(rtsp_types::headers::CSEQ, "2")
    .header(rtsp_types::headers::CONTENT_TYPE, "text/parameters")
    .build(Vec::from(&b"barparam: barstuff"[..]));

The body is passed to the build() function and a Content-Length header is automatically inserted into the request headers.

Creating an OK response

let response = rtsp_types::Response::builder(
        rtsp_types::Version::V2_0,
        rtsp_types::StatusCode::Ok,
    )
    .header(rtsp_types::headers::CSEQ, "1")
    .empty();

This response contains an empty body. A non-empty body can be added in the same way as for requests.

Creating a data message

let data = rtsp_types::Data::new(0, vec![0, 1, 2, 3, 4]);

This creates a new data message for channel id 0 with the given Vec<u8>.

Parsing an RTSP message

let data = b"OPTIONS * RTSP/2.0\r\n\
             CSeq: 1\r\n\
             Supported: play.basic, play.scale\r\n\
             User-Agent: PhonyClient/1.2\r\n\
             \r\n";

let (message, consumed): (rtsp_types::Message<Vec<u8>>, _) =
    rtsp_types::Message::parse(data).expect("Failed to parse data");

assert_eq!(consumed, data.len());
match message {
    rtsp_types::Message::Request(ref request) => {
        assert_eq!(request.method(), rtsp_types::Method::Options);
    },
    _ => unreachable!(),
}

Messages can be parsed from any AsRef<[u8]> and to any borrowed or owned body type that implements From<&[u8]>.

More details about parsing can be found at Message::parse.

Serializing an RTSP message

let request = rtsp_types::Request::builder(
        rtsp_types::Method::SetParameter,
        rtsp_types::Version::V2_0
    )
    .request_uri(rtsp_types::Url::parse("rtsp://example.com/test").expect("Invalid URI"))
    .header(rtsp_types::headers::CSEQ, "2")
    .header(rtsp_types::headers::CONTENT_TYPE, "text/parameters")
    .build(Vec::from(&b"barparam: barstuff"[..]));

 let mut data = Vec::new();
 request.write(&mut data).expect("Failed to serialize request");

 assert_eq!(
    data,
    b"SET_PARAMETER rtsp://example.com/test RTSP/2.0\r\n\
      Content-Length: 18\r\n\
      Content-Type: text/parameters\r\n\
      CSeq: 2\r\n\
      \r\n\
      barparam: barstuff",
 );

Serializing can be done to any type that implements std::io::Write.

More details about serializing can be found at Message::write.

Re-exports

pub use headers::HeaderName;
pub use headers::HeaderValue;
pub use headers::Headers;

Modules

headers

RTSP header definitions.

Structs

Data

RTSP data message.

Empty

Empty body.

Request

RTSP Request.

RequestBuilder

RTSP request builder.

Response

RTSP Response.

ResponseBuilder

RTSP response builder.

Url

A parsed URL record.

Enums

Message

Enum holding all possible RTSP message types.

Method

RTSP method.

ParseError

Message parsing error.

StatusCode

RTSP response status codes.

Version

RTSP protocol version of the message.

WriteError

Serialization write error.