pub struct ProxyHdrV2<OPC: ProxyV2OpCode> { /* private fields */ }Expand description
A Proxy Network packet composer.
Depending on the type of the generic OPC a different composing options
are available.
OPC:
-
HdrV2OpLocal - a local operation as described in the proxy documentation.
-
HdrV2OpProxy - a proxy operation as described in the proxy documentation.
§Arguments
OPC- ProxyV2OpCode a proxy opcode. It is intentionally made as a generic to separate the options which are availabe for each type of HaProxy message.
§Example
// creating new instance
let mut comp =
ProxyHdrV2::<HdrV2OpProxy>::new(ProxyTransportFam::STREAM, addr).unwrap();
// aquiring the plts to set fields
let plts = comp.set_plts();
// adding ssl info
let mut ssl = plts.add_ssl(PP2TlvClient::PP2_CLIENT_SSL, 0).unwrap();
ssl.add_ssl_sub_version("TLSv1.2").unwrap();
// done writing ssl, returning the plts
let mut plts = ssl.done().unwrap();
// a custom TLV
let cust_plt = ProxyV2Dummy2::SomeTlvName(0x01020304, 0x05060708);
plts.add_tlv(cust_plt, Some(&[0xE0..=0xE0])).unwrap();
drop(plts);
// convert to vec of bytes
let pkt: Vec<u8> = comp.try_into().unwrap();Implementations§
Source§impl<OPC: ProxyV2OpCode> ProxyHdrV2<OPC>
impl<OPC: ProxyV2OpCode> ProxyHdrV2<OPC>
Sourcepub const HDR_MSG_LEN_OFFSET: u64 = 14u64
pub const HDR_MSG_LEN_OFFSET: u64 = 14u64
Offset to the message length field.
Source§impl ProxyHdrV2<HdrV2OpLocal>
All functionality available for the opcode LOCAL.
impl ProxyHdrV2<HdrV2OpLocal>
All functionality available for the opcode LOCAL.
Source§impl ProxyHdrV2<HdrV2OpProxy>
All functionality available for the opcode PROXY.
impl ProxyHdrV2<HdrV2OpProxy>
All functionality available for the opcode PROXY.
Sourcepub fn new(
transport: ProxyTransportFam,
address: ProxyV2Addr,
) -> HaProxRes<Self>
pub fn new( transport: ProxyTransportFam, address: ProxyV2Addr, ) -> HaProxRes<Self>
Creates new message of type PROXY HdrV2Command::PROXY. A program should provide the type of the transport and address of the source and destination. The message compose instance is returned which already contains a prepared header.
§Arguments
-
transport- ProxyTransportFam a type of the transport. -
address- a source and destination address encapsulated in ProxyV2Addr.
§Returns
A HaProxRes is returned:
-
Result::Ok - with the instance
-
Result::Err - error description
Examples found in repository?
56fn main()
57{
58 let addr = ProxyV2Addr::try_from(("127.0.0.1:39754", "127.0.0.67:11883")).unwrap();
59
60 let mut comp =
61 ProxyHdrV2::<HdrV2OpProxy>::new(ProxyTransportFam::STREAM, addr).unwrap();
62
63 let plts = comp.set_plts();
64
65 let mut ssl = plts.add_ssl(PP2TlvClient::PP2_CLIENT_SSL, 0).unwrap();
66
67 ssl.add_ssl_sub_version("TLSv1.2").unwrap();
68
69 let mut plts = ssl.done().unwrap();
70
71
72 let cust_plt = ProxyV2Dummy2::SomeTlvName(0x01020304, 0x05060708);
73
74 plts.add_tlv(cust_plt, Some(&[0xE0..=0xE0])).unwrap();
75
76 drop(plts);
77
78 let pkt: Vec<u8> = comp.try_into().unwrap();
79
80 let ctrl =
81b"\x0d\x0a\x0d\x0a\x00\x0d\x0a\x51\x55\x49\x54\x0a\x21\x11\x00\x29\
82\x7f\x00\x00\x01\x7f\x00\x00\x43\x9b\x4a\x2e\x6b\x20\x00\x0f\x01\
83\x00\x00\x00\x00\x21\x00\x07\x54\x4c\x53\x76\x31\x2e\x32\xE0\x00\
84\x08\x01\x02\x03\x04\x05\x06\x07\x08";
85
86 assert_eq!(pkt.as_slice(), ctrl.as_slice());
87}Sourcepub fn set_plts<'s>(&'s mut self) -> TlType<'s>
pub fn set_plts<'s>(&'s mut self) -> TlType<'s>
Provides functionality to add the TLV to the payload of the message.
Examples found in repository?
56fn main()
57{
58 let addr = ProxyV2Addr::try_from(("127.0.0.1:39754", "127.0.0.67:11883")).unwrap();
59
60 let mut comp =
61 ProxyHdrV2::<HdrV2OpProxy>::new(ProxyTransportFam::STREAM, addr).unwrap();
62
63 let plts = comp.set_plts();
64
65 let mut ssl = plts.add_ssl(PP2TlvClient::PP2_CLIENT_SSL, 0).unwrap();
66
67 ssl.add_ssl_sub_version("TLSv1.2").unwrap();
68
69 let mut plts = ssl.done().unwrap();
70
71
72 let cust_plt = ProxyV2Dummy2::SomeTlvName(0x01020304, 0x05060708);
73
74 plts.add_tlv(cust_plt, Some(&[0xE0..=0xE0])).unwrap();
75
76 drop(plts);
77
78 let pkt: Vec<u8> = comp.try_into().unwrap();
79
80 let ctrl =
81b"\x0d\x0a\x0d\x0a\x00\x0d\x0a\x51\x55\x49\x54\x0a\x21\x11\x00\x29\
82\x7f\x00\x00\x01\x7f\x00\x00\x43\x9b\x4a\x2e\x6b\x20\x00\x0f\x01\
83\x00\x00\x00\x00\x21\x00\x07\x54\x4c\x53\x76\x31\x2e\x32\xE0\x00\
84\x08\x01\x02\x03\x04\x05\x06\x07\x08";
85
86 assert_eq!(pkt.as_slice(), ctrl.as_slice());
87}Trait Implementations§
Source§impl<OPC: Clone + ProxyV2OpCode> Clone for ProxyHdrV2<OPC>
impl<OPC: Clone + ProxyV2OpCode> Clone for ProxyHdrV2<OPC>
Source§fn clone(&self) -> ProxyHdrV2<OPC>
fn clone(&self) -> ProxyHdrV2<OPC>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<OPC: Debug + ProxyV2OpCode> Debug for ProxyHdrV2<OPC>
impl<OPC: Debug + ProxyV2OpCode> Debug for ProxyHdrV2<OPC>
Source§impl TryFrom<ProxyHdrV2<HdrV2OpProxy>> for Vec<u8>
Converts the instance to the vector. The message will be finalized i.e
length recalculated, CRC updated.
impl TryFrom<ProxyHdrV2<HdrV2OpProxy>> for Vec<u8>
Converts the instance to the vector. The message will be finalized i.e length recalculated, CRC updated.