ecfcc3f429
Two units of work in one commit: 1. nmx_service2_messages.rs (~470 LoC, 18 tests) — port of NmxService2Messages.cs. Encoders for all 9 INmxService2 opnums (RegisterEngine, UnRegisterEngine, Connect, TransferData, AddSubscriberEngine, RemoveSubscriberEngine, SetHeartbeatSendInterval, RegisterEngine2, GetPartnerVersion) plus BSTR + InterfacePointer NDR helpers used by RegisterEngine2 marshalling. Decoders for the GetPartnerVersion result and the generic HRESULT response. M3 stream B (NmxClient) will be a thin layer over these + the transport. 2. object_exporter_client.rs (~290 LoC, 6 tests including 2 real-socket tokio tests) — resolves followup F9. Implements: - resolve_oxid_unauthenticated (cs:14-30) - resolve_oxid_with_managed_ntlm_packet_integrity (cs:66-81) ResolveOxidOutcome enum disambiguates the two response shapes the .NET reference parses (typed result vs 4-byte failure). The two SSPI flavours (cs:32-47, cs:49-64) are permanently skipped — they wrap .NET-only System.Net.Security.SspiClientContext. design/followups.md: F9 moved to Resolved with this commit's hash. Test count delta: 364 -> 389 (+25; mxaccess-rpc 137 -> 162; +18 from nmx_service2_messages, +7 from object_exporter_client which includes the +2 fall-through tests for the dual-shape response decoder). Open followups touched: F9 resolved. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
31 lines
1.1 KiB
Rust
31 lines
1.1 KiB
Rust
//! `mxaccess-rpc` — DCE/RPC + NTLMv2 + OBJREF + OXID + IRemUnknown::RemQueryInterface.
|
|
//!
|
|
//! - M2 wave 1 (landed): `ntlm`, `pdu`, `objref`.
|
|
//! - M2 wave 2 (landed): `guid` + `error` (shared types — resolves F7+F8),
|
|
//! `orpc` (ORPC framing), `object_exporter` (OXID resolution body codec),
|
|
//! `rem_unknown` (`IRemUnknown::RemQueryInterface` body codec).
|
|
//! - M2 wave 3 (next): callback exporter — see `design/60-roadmap.md` and
|
|
//! `design/dependencies.md`.
|
|
//!
|
|
//! Internal `unsafe` is permitted only for `windows-rs` COM activation paths
|
|
//! (per `design/00-overview.md` principle 3); all such calls must be wrapped
|
|
//! in safe abstractions at the crate boundary. All modules to date are
|
|
//! pure-Rust and contain no `unsafe`.
|
|
|
|
// `mxaccess-rpc` is the only crate where internal unsafe is permitted (for
|
|
// windows-rs COM calls). Public API stays safe.
|
|
|
|
pub mod error;
|
|
pub mod guid;
|
|
pub mod nmx_callback_messages;
|
|
pub mod nmx_metadata;
|
|
pub mod nmx_service2_messages;
|
|
pub mod ntlm;
|
|
pub mod object_exporter;
|
|
pub mod object_exporter_client;
|
|
pub mod objref;
|
|
pub mod orpc;
|
|
pub mod pdu;
|
|
pub mod rem_unknown;
|
|
pub mod transport;
|