Skip to main content

submit_sm/
submit_sm.rs

1use smpp_codec::pdus::{EncodingType, MessageSplitter, SplitMode, SubmitSmRequest};
2
3fn main() {
4    println!("=== SMPP Submit SM Example (with Splitter) ===");
5
6    let text = "This is a very long message that will need to be split into multiple parts because it exceeds the standard SMS length limit of 160 characters for GSM 7-bit encoding. The MessageSplitter utility handles this automatically.".to_string();
7
8    println!("Original Text Length: {}", text.len());
9
10    // 1. Split message (handles encoding and valid chunking with UDH)
11    let (parts, data_coding) =
12        MessageSplitter::split(text, EncodingType::Gsm7Bit, SplitMode::Udh).unwrap();
13
14    println!("Split into {} parts using UDH concatenation.", parts.len());
15    let parts_len = parts.len();
16
17    // 2. Iterate over parts and create/encode PDUs
18    for (i, part) in parts.into_iter().enumerate() {
19        let sequence_number = (i + 1) as u32;
20        let mut submit_req = SubmitSmRequest::new(
21            sequence_number,
22            "source_addr".to_string(),
23            "dest_addr".to_string(),
24            part,
25        );
26        submit_req.data_coding = data_coding;
27
28        // If UDH is present, set the UDHI bit (0x40) in esm_class
29        if parts_len > 1 {
30            submit_req.esm_class |= 0x40;
31        }
32
33        let mut buffer = Vec::new();
34        submit_req.encode(&mut buffer).unwrap();
35
36        println!(
37            "Part {}: Sequence {}, Encoded {} bytes",
38            i + 1,
39            sequence_number,
40            buffer.len()
41        );
42    }
43}