2.9 KiB
Changelog
0.6.0 (unreleased)
-
client()now bounds each connect attempt at 10 seconds, the TLS handshake included, and reports one that expires as an ordinary connect failure, soreconnectretries it on its usual backoff. A connect previously waited the operating system out, around 130 s on Linux against a host that drops SYNs.connectTimeoutretunes the bound, andconnectTimeout: falserestores the old wait. -
Addresses, ids and every other text field on the wire are read and written as latin1. A
source_addrofKaffeépreviously reached the application asKaffei, because the codec wrote the octet and then masked bit 7 reading it back;destination_addr,system_id,message_id,password,service_typeand the C-Octet String TLVs were affected the same way. A character pastU+00FFin one of those fields is now refused, where it used to go out as its low octet.A server comparing
systemIdorpasswordcould be impersonated. Masking bit 7 folded 127 of the 255 non-zero octets onto a character a low octet also reaches, so the bind credentials yourauthenticatereceived were not unique to the octets the peer sent: one refused asadmincould bind as\xE1dminand match the same string. latin1 is one-to-one over the octets, so two different wire values no longer arrive as one. Read 0.5.0 bind logs for asystemIdyou did not issue.Check what you stored before you roll this out. Values your application persisted under 0.5.0 were read with bit 7 masked, so an address or a
message_idcarrying an octet above0x7Fis spelled differently now: a stored id will not match the receipt it belongs to, and a stored address will not match the sender it came from. Ids most SMSCs issue are digits or hex and are unaffected. -
A
U+0000inside a C-Octet String —source_addr,message_id,system_idand the rest — is refused. An Octet String carries a NULL as before. -
A non-finite number —
NaN,Infinity,-Infinity— is refused where a text field on the wire takes one.sendSms({ from: NaN })put the literal senderNaNon the wire and resolved as a successful send;message_id,source_addrand the string TLVs took such a number the same way. The call now resolves witherrnaming the field —from: Expected a finite number, got NaN— so a caller that reads onlysmsIdsmeets a failure it has not met before. A whole number in an address or an id still spells its digits, somessage_id: 123is unchanged. The integer fields name a refusedNaNtoo, where the refusal used to readnull. -
An inbound
alert_notificationoroutbindis logged and left unanswered, as SMPP 3.4 gives neither a response. Each used to raise asessionError.
0.5.0
The TypeScript rewrite. What a 0.4.0 consumer has to change is in MIGRATION.md.