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.
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?
46fn main()
47{
48 let addr = ProxyV2Addr::try_from(("127.0.0.1:39754", "127.0.0.67:11883")).unwrap();
49
50 let mut comp =
51 ProxyHdrV2::<HdrV2OpProxy>::new(ProxyTransportFam::STREAM, addr).unwrap();
52
53 let plts = comp.set_plts();
54
55 let mut ssl = plts.add_ssl(PP2TlvClient::PP2_CLIENT_SSL, 0).unwrap();
56
57 ssl.add_ssl_sub_version("TLSv1.2").unwrap();
58
59 let mut plts = ssl.done().unwrap();
60
61
62 let cust_plt = ProxyV2Dummy2::SomeTlvName(0x01020304, 0x05060708);
63
64 plts.add_tlv(cust_plt, Some(&[0xE0..=0xE0])).unwrap();
65
66 drop(plts);
67
68 let pkt: Vec<u8> = comp.try_into().unwrap();
69
70 let ctrl =
71b"\x0d\x0a\x0d\x0a\x00\x0d\x0a\x51\x55\x49\x54\x0a\x21\x11\x00\x29\
72\x7f\x00\x00\x01\x7f\x00\x00\x43\x9b\x4a\x2e\x6b\x20\x00\x0f\x01\
73\x00\x00\x00\x00\x21\x00\x07\x54\x4c\x53\x76\x31\x2e\x32\xE0\x00\
74\x08\x01\x02\x03\x04\x05\x06\x07\x08";
75
76 assert_eq!(pkt.as_slice(), ctrl.as_slice());
77}
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?
46fn main()
47{
48 let addr = ProxyV2Addr::try_from(("127.0.0.1:39754", "127.0.0.67:11883")).unwrap();
49
50 let mut comp =
51 ProxyHdrV2::<HdrV2OpProxy>::new(ProxyTransportFam::STREAM, addr).unwrap();
52
53 let plts = comp.set_plts();
54
55 let mut ssl = plts.add_ssl(PP2TlvClient::PP2_CLIENT_SSL, 0).unwrap();
56
57 ssl.add_ssl_sub_version("TLSv1.2").unwrap();
58
59 let mut plts = ssl.done().unwrap();
60
61
62 let cust_plt = ProxyV2Dummy2::SomeTlvName(0x01020304, 0x05060708);
63
64 plts.add_tlv(cust_plt, Some(&[0xE0..=0xE0])).unwrap();
65
66 drop(plts);
67
68 let pkt: Vec<u8> = comp.try_into().unwrap();
69
70 let ctrl =
71b"\x0d\x0a\x0d\x0a\x00\x0d\x0a\x51\x55\x49\x54\x0a\x21\x11\x00\x29\
72\x7f\x00\x00\x01\x7f\x00\x00\x43\x9b\x4a\x2e\x6b\x20\x00\x0f\x01\
73\x00\x00\x00\x00\x21\x00\x07\x54\x4c\x53\x76\x31\x2e\x32\xE0\x00\
74\x08\x01\x02\x03\x04\x05\x06\x07\x08";
75
76 assert_eq!(pkt.as_slice(), ctrl.as_slice());
77}
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.