pub mod tcp;
pub mod tls;
pub mod udp;
use prelude::*;
use path::error::PathResult;
pub fn track_connection<'a>(path: Option<&'a mut PathIp>,
result: Option<&ParserResultVec>,
src_port: u16,
dst_port: u16)
-> PathResult<()> {
let identifier = match result {
Some(vector) => {
match vector.get(1) {
Some(ref any) => {
match (any.downcast_ref::<Ipv4Packet>(), any.downcast_ref::<Ipv6Packet>()) {
(Some(p), _) => {
Some(Identifier::new(IpAddr::V4(p.src),
src_port,
IpAddr::V4(p.dst),
dst_port,
p.protocol))
}
(_, Some(p)) => {
Some(Identifier::new(IpAddr::V6(p.src),
src_port,
IpAddr::V6(p.dst),
dst_port,
p.next_header))
}
_ => None,
}
}
_ => None,
}
}
None => None,
};
if let (Some(path), Some(identifier)) = (path, identifier) {
path.track(identifier)?;
}
Ok(())
}