Expand description
§cmppprotocol
CMPP 2.0 client protocol library,用于将 SP 连接到 CMPP ISMG。
功能特性:
- Typed
Pdumodel,支持二进制 encode/decode(pdu),并提供tokio_utilCmppFrameCodec,用于简洁地对 TCP streams 进行 framing。 - Async
CmppConnection,包含 non-blockingCmppConnection::submit(仅在 sliding-window backpressure 时等待)和用于接收所有 response 的Eventstream; 它会执行登录 handshake(含 authenticator 校验)、timeout 后重传、发送 ACTIVE_TEST heartbeat, 并使用 TERMINATE 优雅拆除 link。 - Charset encoding 和 long-SMS UDH splitting(
encoding)。 - 通过
SubmitOptions便捷构造 message。
§快速开始
use cmppprotocol::{CmppConnection, CmppConfig, CmppProtocolParams, Event, SubmitOptions};
let config = CmppConfig {
host: "127.0.0.1".into(),
port: 7890,
account: "901234".into(),
password: "secret".into(),
version: cmppprotocol::CMPP_VERSION_20,
protocol_params: CmppProtocolParams::default(),
};
let conn = CmppConnection::connect(config).await?;
// 消费所有 async events(responses、reports、disconnect)。
let mut events = conn.take_events().await.expect("events 首次可用");
tokio::spawn(async move {
while let Some(event) = events.recv().await {
match event {
Event::SubmitResp { sequence_id, msg_id, result } => {
println!("响应 seq={} msg_id={} result={}", sequence_id, Event::msg_id_hex(&msg_id), result);
}
Event::Deliver(deliver) => {
if let Some(report) = deliver.report() {
println!("报告 {} -> {}", report.msg_id_hex(), report.stat);
}
}
Event::SubmitTimeout { sequence_id } => println!("超时 seq={}", sequence_id),
Event::Disconnected(e) => { println!("连接已断开: {}", e); break; }
}
}
});
// submit() 是 non-blocking:它返回各 segment 的 sequence id。
let opts = SubmitOptions::new("SVC", "901234", "10690001", "13800138000");
let seq_ids = conn.submit(&opts, "Hello World", None).await?;
println!("已提交 {} 个分片: {:?}", seq_ids.len(), seq_ids);
conn.close().await;Re-exports§
pub use encoding::decode_msg_content;pub use pdu::Connect;pub use pdu::ConnectResp;pub use pdu::Deliver;pub use pdu::DeliverReport;pub use pdu::DeliverResp;pub use pdu::Frame;pub use pdu::Pdu;pub use pdu::Submit;pub use pdu::SubmitResp;pub use pdu::compute_authenticator_ismg;pub use pdu::compute_authenticator_source;pub use submit::SubmitOptions;
Modules§
- encoding
- Character set encoding 和 long SMS(UDH)拆分。
- pdu
- 支持二进制 encode/decode 的 typed CMPP 2.0 PDUs。
- submit
- 便于使用的
SubmitPDU 构造。
Structs§
- Cmpp
Config - CMPP connection 配置。
- Cmpp
Connection - Async CMPP 2.0 client connection。clone 成本低(通过
Arc共享 state)。 - Cmpp
Frame Codec - CMPP frame codec:处理半包/不完整读取和 length-prefixed framing,
并将每个完整 frame decode 为
Frame(sequence id +Pdu)。 - Cmpp
Header - 固定的 12-byte CMPP message header。
- Cmpp
Protocol Params - CMPP protocol 参数配置。
Enums§
- Error
- 进行 CMPP 2.0 通信时可能出现的错误。
- Event
CmppConnection产生的 async event。
Constants§
- CMPP_
ACTIVE_ TEST CMPP_ACTIVE_TESTcommand id。- CMPP_
ACTIVE_ TEST_ RESP CMPP_ACTIVE_TEST_RESPcommand id。- CMPP_
CONNECT CMPP_CONNECTcommand id。- CMPP_
CONNECT_ RESP CMPP_CONNECT_RESPcommand id。- CMPP_
DELIVER CMPP_DELIVERcommand id。- CMPP_
DELIVER_ RESP CMPP_DELIVER_RESPcommand id。- CMPP_
HEADER_ LENGTH - 固定 CMPP message header 的长度,单位为 bytes(Total_Length + Command_Id + Sequence_Id)。
- CMPP_
SUBMIT CMPP_SUBMITcommand id。- CMPP_
SUBMIT_ RESP CMPP_SUBMIT_RESPcommand id。- CMPP_
TERMINATE CMPP_TERMINATEcommand id。- CMPP_
TERMINATE_ RESP CMPP_TERMINATE_RESPcommand id。- CMPP_
VERSION_ 20 - CMPP 2.0 protocol version byte。
Type Aliases§
- Result
- 这个 crate 通用的 result type。