lilleman
2c0dfd172f
Keep the process alive while a send waits for a link
2026-09-01 10:38:16 +02:00
lilleman
8d9656b4e0
Hold a send with no link for the next one, and count the rest as unanswered
2026-09-01 08:02:37 +02:00
lilleman
bfc85ee4dd
Say in the options table that a proven link resets the backoff
...
maxDelay bounds the wait and sets the bar a link must clear, and only the
first was documented, so tuning it up quietly lengthened every recovery.
The unreadable PDU the tests write is one named constant now.
2026-08-31 22:59:57 +02:00
lilleman
8e4d472f72
Back off from a link that dies as soon as it comes up
...
A bind that returns is not proof the link works: an unreadable stream is
only found afterwards, so resetting the delay there handed a link that
died on arrival a fresh minDelay every cycle — one connect and bind per
second forever, which is how an account gets blocked for bind flooding.
The loop resets only once a link has outlasted maxDelay.
Also covers the unreadable stream that has no loop to retry it.
2026-08-31 22:45:29 +02:00
lilleman
880454b4f4
Split a retried drop out of close, and range-check the backoff
...
`close` fires only where nothing will bring the session back; a drop the
reconnect loop will retry is `disconnected`, pairing with `reconnected`.
`minDelay: 0` never doubles, so the backoff never started — both delays
are range-checked now, and only `false` spells reconnect off.
2026-08-31 21:11:19 +02:00
lilleman
098891bb84
Cover the enquire_link we answer and stop draining a peer that answers nothing
2026-08-30 22:17:27 +02:00
lilleman
685495f534
Let a listener's teardown run last and answer the sends the tests left hanging
2026-08-30 22:03:23 +02:00
lilleman
427565ed3e
Tear down what a test opens in t.after so a failing assertion ends the run
2026-08-30 21:35:09 +02:00
lilleman
bebd74b42b
Drain the requests already on the wire before close() and unbind() tear down
2026-08-30 20:08:36 +02:00
lilleman
c06eda4582
Pin the spent-base cap and state the boundary the merge rule covers
2026-08-30 11:39:09 +02:00
lilleman
5c797f5383
Forget the base closed longest ago rather than the one handed out again
2026-08-30 11:31:22 +02:00
lilleman
aa3cf41c7f
Merge a message id base once so a straggler cannot join a later report
2026-08-30 11:17:02 +02:00
lilleman
a5fe43d7a9
Normalise a listener's rejection reason before routing it to sessionError
2026-08-27 22:41:26 +02:00
lilleman
0e8f298957
Route a rejecting async listener to sessionError instead of the process
2026-08-27 22:22:51 +02:00
lilleman
4c08fe8fa3
Classify a deliver_sm by esm_class and document the messageDlr precondition
2026-08-27 15:52:33 +02:00
lilleman
366fa26b1c
Enforce bind direction, cap segments per message and pin the README examples
2026-08-27 14:07:42 +02:00
lilleman
ff3667e120
Reject a renumbered multipart total and check abort before the send window
2026-08-27 12:43:17 +02:00
lilleman
8a182604b7
Address the CodeRabbit review: inbound SMS, binary payloads and untrusted input
2026-08-27 11:52:43 +02:00
lilleman
884afdb87b
Stop a thrown listener escaping, bound what a peer can pin, and drop the body from failure responses
2026-08-27 10:55:34 +02:00
lilleman
5af75a3c57
Close the stability findings and settle the sendResp, sendSms and unbind contracts
2026-08-27 00:17:48 +02:00
lilleman
6d842a8539
Split the session, gate optional parameters on the peer version, own the SMPP version in defs
2026-08-26 22:41:28 +02:00
lilleman
f0858aacf8
Answer 3.4 binds with sc_interface_version and cover TLS with tests
2026-08-26 17:16:54 +02:00
lilleman
694c3a506e
Bind as SMPP 3.4 by default, with interfaceVersion to override it
2026-08-26 15:41:44 +02:00
lilleman
fd2f98464f
Add session, client and server with the promise result API
2026-08-25 16:46:32 +02:00