1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#![no_std]

//! # Introduction
//!
//! Library for parsing/editing/constructing SIP requests and responses.
//!
//! This is the very first version where only simple parsing is support.
//!
//! ## Example
//! ```rust
//!
//! let invite_msg_buf = "INVITE sip:bob@biloxi.com SIP/2.0\r\n\
//! Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKkjshdyff\r\n\
//! To: Bob <sip:bob@biloxi.com>\r\n\
//! From: Alice <sip:alice@atlanta.com>;tag=88sja8x\r\n\
//! Max-Forwards: 70\r\n\
//! Call-ID: 987asjd97y7atg\r\n\
//! CSeq: 986759 INVITE\r\n\r\nbody_stuff"
//! .as_bytes();
//!
//! // First parameter not realized yet.
//! // It should consist be residue if Content-Length is less then actual body length.
//! let (_, request) = sipmsg::Request::parse(invite_msg_buf).unwrap();
//! assert_eq!(request.rl.method, sipmsg::request::Method::INVITE);
//!
//! // Via Header
//! assert_eq!(request.headers[0].name, "Via");
//! assert_eq!(request.headers[0].value, "SIP/2.0/UDP pc33.atlanta.com");
//!
//! assert_eq!(
//!     request.headers[0].params().unwrap().get(&"branch"),
//!     Some(&"z9hG4bKkjshdyff")
//! );
//!
//! assert_eq!(
//!     request.headers[0].params().unwrap().get(&"notExistParam"),
//!     None
//! );
//!
//! // Body
//! assert_eq!(request.body.unwrap(), "body_stuff".as_bytes());
//! ```
//!
extern crate alloc;
extern crate nom;

pub mod header;
pub use header::parse_headers;
pub use header::Header;
mod parameters;

pub mod message;
pub use message::get_message_type;
pub use message::MessageType;
pub use message::SipVersion;

pub mod request;
pub use request::Request;
pub use request::RequestLine;

pub mod response;
pub use response::Response;
pub use response::StatusCode;
pub use response::StatusLine;