Skip to content

Commit 40bcfd0

Browse files
committed
Move MessageBuilder into root folder
1 parent 5406193 commit 40bcfd0

File tree

3 files changed

+50
-13
lines changed

3 files changed

+50
-13
lines changed

crates/lib-dhcp/src/client/builder.rs crates/lib-dhcp/src/builder.rs

+46-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::net::Ipv4Addr;
22

33
use crate::types::{
44
options::{ClientIdentifier, DhcpMessageType, ParameterRequestList},
5-
DhcpOption, HardwareAddr, Header, Message, MessageError, OptionData, OptionTag,
5+
DhcpOption, HardwareAddr, Message, MessageError, OptionData, OptionTag,
66
};
77

88
pub struct MessageBuilder {
@@ -24,9 +24,9 @@ impl MessageBuilder {
2424
}
2525
}
2626

27-
// This creates a new DHCPDISCOVER message with the values described in
28-
/// RFC 2131 Section 4.4.1
29-
pub fn discover_message(
27+
/// This creates a new DHCPDISCOVER message with the values described in
28+
/// RFC 2131 Section 4.
29+
pub fn make_discover_message(
3030
&mut self,
3131
xid: u32,
3232
destination_addr: Option<Ipv4Addr>,
@@ -94,6 +94,48 @@ impl MessageBuilder {
9494
Ok(message)
9595
}
9696

97+
/// This creates a new DHCPREQUEST message with the values described in
98+
/// RFC 2131 Section 4.
99+
pub fn make_request_message(
100+
&self,
101+
xid: u32,
102+
destination_addr: Ipv4Addr,
103+
offered_addr: Ipv4Addr,
104+
offered_lease_time: u32,
105+
) -> Result<Message, MessageError> {
106+
let mut message = Message::new_with_xid(xid);
107+
self.add_default_options(&mut message)?;
108+
109+
// Set DHCP message type option
110+
message.add_option_parts(
111+
OptionTag::DhcpMessageType,
112+
OptionData::DhcpMessageType(DhcpMessageType::Request),
113+
)?;
114+
115+
message.add_option_parts(
116+
OptionTag::ServerIdentifier,
117+
OptionData::ServerIdentifier(destination_addr),
118+
)?;
119+
120+
message.add_option_parts(
121+
OptionTag::RequestedIpAddr,
122+
OptionData::RequestedIpAddr(offered_addr),
123+
)?;
124+
125+
message.add_option_parts(
126+
OptionTag::IpAddrLeaseTime,
127+
OptionData::IpAddrLeaseTime(offered_lease_time),
128+
)?;
129+
130+
// NOTE (Techassi): Maybe add hostname option
131+
132+
message.add_option(Self::default_request_parameter_list())?;
133+
message.end()?;
134+
135+
message.set_hardware_address(self.client_hardware_addr.clone());
136+
Ok(message)
137+
}
138+
97139
fn add_default_options(&self, message: &mut Message) -> Result<(), MessageError> {
98140
message.add_option_parts(
99141
OptionTag::MaxDhcpMessageSize,

crates/lib-dhcp/src/client/mod.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,13 @@ use tokio::{
1212
};
1313

1414
use crate::{
15-
client::{
16-
builder::MessageBuilder,
17-
state::{ClientState, DhcpState, DhcpStateMachine},
18-
},
19-
types::{
20-
options::{DhcpMessageType, ParameterRequestList},
21-
DhcpOption, HardwareAddr, Message, MessageError, OptionData, OptionTag,
22-
},
15+
builder::MessageBuilder,
16+
client::state::{ClientState, DhcpState, DhcpStateMachine},
17+
types::{options::DhcpMessageType, HardwareAddr, Message, OptionData, OptionTag},
2318
utils, TimeoutResult, MINIMAL_RETRANS_DURATION_SECS, MINIMUM_LEGAL_MAX_MESSAGE_SIZE,
2419
SERVER_PORT,
2520
};
2621

27-
mod builder;
2822
mod cmd;
2923
mod error;
3024
mod state;

crates/lib-dhcp/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub mod types;
22

3+
mod builder;
34
mod client;
45
mod constants;
56
mod error;

0 commit comments

Comments
 (0)