1c0b4bef34
Tick off the 0.5.0 cleanup in todo.md, and decline a token expiry check
main
lilleman2026-09-14 21:19:17 +02:00
c5adfd8e39
Say what the mirror's concurrency group does, and name every way a stale ref survives
lilleman2026-09-14 20:54:04 +02:00
14b114afda
Split the GitHub mirror so Gitea creates its runs and no delete is dropped
lilleman2026-09-14 20:38:46 +02:00
27e8f288ec
Mirror every branch and tag to GitHub from CI, keeping what only GitHub has
lilleman2026-09-14 19:36:44 +02:00
e1999a7305
Let a registered encoding claim a data_coding a built-in already uses, in todo.md
lilleman2026-09-14 20:38:02 +02:00
baa0ad553a
Set failover's options, and decide to test on Linux only while keeping macOS and Windows unbroken
lilleman2026-09-14 17:26:46 +02:00
e32f9ccf46
Plan failover, an optional store for pooling and restarts, shipping src, and Gitea runners for macOS and Windows
lilleman2026-09-14 17:08:54 +02:00
b3cbbba615
Record the gaps found against other SMPP libraries, and make configurable and extendable a goal
lilleman2026-09-14 16:32:23 +02:00
95e1f910a3
Track the peer's address on every log message in todo.md, and keep Renovate's dashboard open
lilleman2026-09-14 15:04:12 +02:00
0f14ca85c2
Plan 0.5.0 in todo.md, holding the GitHub work until it is published
v0.5.0
lilleman2026-09-14 14:09:58 +02:00
e8558aa471
Release as 0.5.0, and file issues on the GitHub mirror
lilleman2026-09-14 14:09:58 +02:00
773db43305
Record the move to Gitea and the GitHub retirement in todo.md
lilleman2026-09-13 17:57:10 +02:00
793839d0e0
Point the package and README at Gitea
lilleman2026-09-13 17:57:10 +02:00
68cd8e3f31
Run CI, releases and Renovate on Gitea
lilleman2026-09-13 17:57:10 +02:00
8315f1882a
Keep todo.md, and plan the backlog close-out and the move to Gitea in it
lilleman2026-09-13 16:31:07 +02:00
311ee7c677
Name the branches as the rename leaves them
lilleman2026-09-13 16:31:07 +02:00
e3062066c1
Pin the Node version the lint and release jobs run on
lilleman2026-09-13 16:30:58 +02:00
7310634d7d
Rewrite the README task-first for 1.0.0 and move the 0.4.0 guide to MIGRATION.md (#102)
lilleman2026-09-13 12:05:13 +02:00
549b3260c9
Record the smsIds decision under the surface it changes
lilleman2026-09-12 22:41:02 +02:00
13e3ff8f1f
Say undefined where the SMSC named no id for a segment it took (#101)
lilleman2026-09-12 22:37:55 +02:00
ca1a7473ed
Declare the alphabet a GSM message is actually written in (#100)
lilleman2026-09-09 21:30:55 +02:00
989eb01763
Name the refusal rule, and refuse a period the encoder cannot spell (#99)
lilleman2026-09-09 20:36:13 +02:00
ef13290230
Refuse a body the PDU's own data_coding cannot carry (#98)
lilleman2026-09-09 19:33:36 +02:00
c06cc0648b
Refuse what we cannot send: an alphabet that cannot carry the message, and a time nobody can read (#97)
lilleman2026-09-09 18:16:08 +02:00
cced03767e
Cover a multi-segment Latin-1 message against a real peer, and correct the flash row it left stale
lilleman2026-09-09 17:26:40 +02:00
7d6039796d
Fit every concatenated segment in an SMS, and close the encoding helpers' throw (#96)
lilleman2026-09-09 17:21:51 +02:00
ff6ba9f825
Assert 0xF0 is flash, now that it is read as the spec puts it
lilleman2026-09-09 16:43:39 +02:00
e80b07167c
Read the GSM 03.38 message class where the spec puts it (#95)
lilleman2026-09-09 16:40:32 +02:00
bd466d393a
Turn the interoperability plan into the suite's README now that every phase has run
lilleman2026-09-09 14:06:34 +02:00
9673af67b6
Close the interoperability plan and leave the one open decision on it
lilleman2026-09-08 19:45:28 +02:00
079d833ea8
Fix what the product-owner pass found in the README, and log an unmergeable receipt (#94)
lilleman2026-09-08 19:43:23 +02:00
7937534677
Close the scope decision and add the last two questions for the product-owner pass
lilleman2026-09-08 18:58:46 +02:00
5a0cf56754
Fixtures for the receipt bodies operator documentation publishes (#93)
lilleman2026-09-08 18:56:57 +02:00
83176f53b0
Let sendSms() name the esm_class messaging mode (#92)
lilleman2026-09-08 17:30:20 +02:00
5e53fad802
Run the load generators against our server: the window holds, memory returns to baseline, no defects
lilleman2026-09-06 22:25:29 +02:00
a7f3ea70d7
Run python-smpplib and php-smpp against our server: encodings and bind direction hold, no defects
lilleman2026-09-06 22:15:20 +02:00
ab93833cee
Drop the hosted simulators and name what goes untested with them
lilleman2026-09-06 21:46:43 +02:00
ffda0e9c98
Record the Jasmin re-run that the deadlock fix made pass
lilleman2026-09-06 21:05:03 +02:00
18de565aad
Reassemble a concatenated message segmented with the sar_* TLVs (#91)
lilleman2026-09-06 21:03:14 +02:00
061c1871bd
Record that every phase holds under the stricter capture check
lilleman2026-09-06 19:50:58 +02:00
30eedc81ee
Let a signal abort a send queued behind a full send window (#90)
lilleman2026-09-06 18:17:01 +02:00
0a7c491e55
Say what the capture check really requires, and what it cannot express yet
lilleman2026-09-06 18:03:55 +02:00
039951e69b
Refuse a PDU whose optional parameters do not end on command_length (#87)
lilleman2026-09-06 18:01:35 +02:00
c89005168d
Note which phases need re-grading under the stricter capture check
lilleman2026-09-06 17:41:40 +02:00
9a312e5126
Harden the interop capture analysis and smppsim capture readiness (#89)
lilleman2026-09-06 17:38:14 +02:00
ad094b3897
Record the two version-gate asks left open on the rewrite PR
lilleman2026-09-06 17:26:44 +02:00
d21df7c04b
Plan one product-owner pass over the surface the interoperability fixes moved
lilleman2026-09-06 17:24:41 +02:00
c22dce53cf
Tighten release tag glob, pin runner and action versions, skip main on push, add Node 26 (#88)
lilleman2026-09-06 17:22:43 +02:00
bcbb042c1b
Give server() consumers the onRequest hook the docs promise (#86)
lilleman2026-09-06 17:20:45 +02:00
0d1da1dc87
Run jsmpp and Cloudhopper against our server: sar_* fragmentation confirmed and a truncated TLV tail silently accepted
lilleman2026-09-06 07:00:45 +02:00
4194816d6b
Document answeredOnArrival for client receivers and onRequest refusal (#85)
lilleman2026-09-06 06:30:18 +02:00
184d1dc7af
Read a body from message_payload and accept data_sm (#84)
lilleman2026-09-06 05:59:27 +02:00
5b7b563dc2
Answer every segment of an inbound concatenated message as it arrives (#83)
lilleman2026-09-06 04:16:11 +02:00
66b49ebfb3
Run Jasmin in both directions: message_payload, data_sm and a multipart deadlock confirmed against a production gateway
lilleman2026-09-06 02:24:32 +02:00
db02f0058d
Tell a refused PDU apart from a session that failed (#82)
lilleman2026-09-05 23:16:59 +02:00
afe188eecd
Retry the first connect and bind on reconnect fromStart (#80)
lilleman2026-09-05 22:47:06 +02:00
45d2f5548e
Read a delivery receipt's body as the octets that arrived (#81)
lilleman2026-09-05 22:37:05 +02:00
ea42bc6d20
Refuse a single unreadable PDU instead of the whole link (#79)
lilleman2026-09-05 21:00:52 +02:00
fec4fda082
Run SMPPSim 2.6.11 as the SMSC with nine fault-injection variants: 25 scenarios pass, two defects recorded
lilleman2026-09-05 20:08:39 +02:00
05ea90afeb
Run Kannel 1.4.5 as the ESME against our server: 21 scenarios pass, no defects found
lilleman2026-09-05 20:03:58 +02:00
9c4939f5cf
Fix every defect a phase finds before the next phase runs
lilleman2026-09-05 18:48:57 +02:00
1723a0381c
Add the interoperability harness and the smscsim experiment, which confirms the one-bad-PDU link drop
lilleman2026-09-05 18:40:56 +02:00
7d855cfa5d
Set the conventions the interoperability experiments run and record under
lilleman2026-09-05 17:53:33 +02:00
8a565cf557
Plan the interoperability tests against real-world SMPP peers before 1.0.0
lilleman2026-09-05 17:31:02 +02:00
9ca83ac05c
Order the README by what a first read needs, and drop the pre-release notice
lilleman2026-09-04 11:59:05 +02:00
2e422c7584
Contain a throw from the application's logger instead of letting it escape
lilleman2026-09-04 11:33:20 +02:00
80530c6265
Ignore a delivery receipt for a part the send never registered
lilleman2026-09-04 11:33:17 +02:00
8c46e925a1
Record the branch renames: master to v0.4.0, typescript to main as default
lilleman2026-09-04 11:16:54 +02:00
4d91240e62
Merge pull request #78 from larvit/intermediate-delivery-reports
lilleman2026-09-04 10:47:50 +02:00
8717cedfb6
Merge pull request #76 from larvit/hold-until-answered
lilleman2026-09-04 10:43:44 +02:00
144567c294
Claim an error only where the state failed, and freeze the two state lists
lilleman2026-09-04 08:51:13 +02:00
54493c12b2
Write a transient state as an intermediate delivery notification
lilleman2026-09-04 08:38:29 +02:00
2936c7060d
Justify the state test by what peers write, not by what this library happens to write
lilleman2026-09-03 21:17:39 +02:00
e28b219a4f
Record that message_state 0 is read as the transient state 5.0 names it
lilleman2026-09-03 21:05:40 +02:00
fa40bb486c
Re-wrap the decision paragraphs and cut the narration from the finality record
lilleman2026-09-03 19:39:53 +02:00
42e6e97447
Read a receipt reporting a transient state as non-final too, so the merge waits for the real one
lilleman2026-09-03 19:28:08 +02:00
dd458bfa53
Say only what the SMSC marked, and trim the comments the review found redundant
lilleman2026-09-03 19:16:13 +02:00
50679ec2fe
Read an intermediate delivery notification as a report, and keep it out of the merge
lilleman2026-09-03 17:30:09 +02:00
94184a9c63
Re-wrap the shutdown paragraph and leave the throw-versus-rejection note in one place
lilleman2026-09-02 12:40:51 +02:00
0d30864886
Say in goal 7 that the scope floor covers the seam too, and decline merge-state persistence
lilleman2026-09-02 12:36:06 +02:00
3eeb0b82c0
Give a message up only once every listener has, and only count a response the wire took
lilleman2026-09-02 12:36:01 +02:00
3aadb64df8
Release a message's hold when the response goes out, or when its listener failed
lilleman2026-09-02 08:15:26 +02:00
6cb186d38a
Merge pull request #75 from larvit/receipt-field-separators
lilleman2026-09-01 22:15:04 +02:00
66fac3768d
Merge remote-tracking branch 'origin/typescript' into receipt-field-separators
lilleman2026-09-01 22:14:00 +02:00
8de65fd0e4
Merge pull request #74 from larvit/answer-without-a-link
lilleman2026-09-01 22:13:37 +02:00
f10c8e58cb
Read a valueless count as unstated, and pin a CRLF receipt end to end
lilleman2026-09-01 21:48:07 +02:00
0fd6da1542
Separate a receipt's fields on any whitespace, not only a space
lilleman2026-09-01 21:37:19 +02:00
471923a7b6
Log the dropped request, and scope the receipt sentence to a reconnect
lilleman2026-09-01 20:53:58 +02:00
e6250ef44e
Drop a request whose link went while onRequest ran, and pin the wire in the test
lilleman2026-09-01 20:40:17 +02:00
c8d265d5fa
Tie the refusal to the link, not to the hold, so a released message is refused too
lilleman2026-09-01 20:25:57 +02:00
82a95593bd
Refuse to answer a message whose link went, instead of reporting it delivered
lilleman2026-09-01 19:16:21 +02:00
a91c55cc64
Merge pull request #72 from larvit/sms-id-format
lilleman2026-09-01 18:20:09 +02:00
8a8d6faccf
Merge pull request #73 from larvit/reconnect-by-default
lilleman2026-09-01 18:19:19 +02:00
f0327044b1
Cover the receipt refusal and the sweep that wakes a drain
lilleman2026-09-01 18:13:35 +02:00
042a62be97
Sweep held messages before each hold, so expiry needs no live timer
lilleman2026-09-01 18:02:15 +02:00
61985fb914
Say what a peer did with each receipt segment, and leave no drop unlogged
lilleman2026-09-01 17:59:37 +02:00
67c0402def
Bound the messages held for a shutdown, and report a partial receipt
lilleman2026-09-01 17:42:22 +02:00
1e7e113bd7
Put a receipt's segments on the wire together, like a message's
lilleman2026-09-01 17:03:33 +02:00
8becbc0ab6
Give the gate, the window and the pending map one owner
lilleman2026-09-01 16:52:15 +02:00
3bcea108e3
Wait out the messages the application holds before shutting a session down
lilleman2026-09-01 13:58:28 +02:00