NowSMS Update Release – 2010.11.04

Posted by on Nov 11, 2010 in Software Updates

An interim update release of the Now SMS & MMS Gateway is currently available at  Use the executable file in this ZIP to update an existing NowSMS installation.

This document details the update release history since the current official release, version 2010.02.09.  Release history for the changes prior to the current official release can be found at

Highlights of this update:

1.) SMS Gateway: Performance enhancements for processing large message queues, especially when there are 4 or more outbound SMSC connections.

2.) SMS Gateway: Improved performance for accepting HTTP message submissions, HTTP keep-alive sockets now supported.

3.) SMS Gateway/SMPP Client: Added the capability to define the number of transmitter, receiver and/or transceiver connections to be allocated for a single SMPP connection, without requiring multiple duplicate connections to be defined.

4.) SMPP Server: Support for using SMPP Asynchronous mode to speed the delivery of messages to SMPP Clients when NowSMS is acting as an SMPP Server.  Also an improvement message ID generation logic to prevent duplicate message IDs (SAR-phonenumber-x-x-x format) from being generated.

5.) MMSC: Fix for corrupt message problems that could trigger internal restarts of the MMSC service when processing such a message.

6.) MMSC/MM4: Tolerance improved in decoding received messages where the Content-Location header does not conform to the relevant SMTP specifications, which previously resulted in some users receiving occasional corrupt messages over some MM4 interconnections.  Forwarding of these corrupt messages is suspected in the corrupt message problems that triggered internal restarts of the MMSC service.  Also, fix foran  interoperability problem that was causing some customers problems interconnecting with NTT DoCoMo Japan.  Received messages from this interconnect were not strictly following the 3GPP TS 23.140 Message-ID and Transaction-ID formats.  NowSMS used to correct the encoding problem when sending acknowledgments, but now returns acknowledgments with these ID values in the same format in which they were received, even if the values are invalid per the 3GPP TS 23.140 specification.

There are numerous other minor updates that are detailed in the release history information below.  The release history information provides additional information on configuration settings that have been added to address unusual configuration requirements.


* E-Mail to SMS: Translate Greek capital letters to visually equivalent 7-bit characters in attempts to send SMS messages out using 7-bit encoding. (The NowSMS web interface already does this.)

* MM7 Client: Change Content-Type: text/xml; charset=”utf-8″ to Content-Type: text/xml; charset=utf-8 to address a compatibility problem with a particular operator MMSC. (Whether or not this parameter is quoted should not matter. Removing the quotes should not cause a problem with other MMSCs.)


* SMPP Client: Fix for some BinaryDCS= values not working properly, especially BinaryDCS=2. If BinaryDCS=2 was set for a connection, NowSMS would garble the data.


* SMPP Client: Fix for a problem introduced in mid-2010 where message receipt IDs were not properly evaluated if the receipt was received two or more days after the message was originally sent.

* SMPP Server: Add preliminary support for NowSMS acting as an SMPP server to use async mode to deliver messages to SMPP clients (NowSMS has previously supported async mode in the other direction, where NowSMS is the SMPP client). This can provide increased performance in delivering messages to connected SMPP clients, provided that the client can support SMPP async mode. To enable SMPP async mode for all clients, add SMPPServerAsyncWindowSize=## to the [SMSGW] section of SMSGW.INI. Alternatively to enable or disable for selected clients, add an [SMPPServerAsyncWindowSize] section to SMSGW.INI, and specify AccountName=## to set the async window size for a specific SMS User account. (A window size of 0 disables async mode.)


* SMS Gateway: E-mail alerts now support multiple recipients, separated by a comma.


* MMSC: When NowSMS generates an MM7 error response, it was not encoding the error in an a SOAP envelope <fault> element, as required by Section of 3GPP TS 23.140. (Note: The issue is not as cut and dried as it may seem, as the MM7 element defintions for the error response are in conflict with this Section We are choosing to follow Section and assume that the definitions that conflict with it are mistakes in the specification. Further discussion of this issue is at


* SMPP – Fix for a problem where recent versions have not properly passed the “Bind TON”, “Bind NPI” or “Address Range” parameter in SMPP connection tests from the configuration dialog when initially defining a new SMSC connection.

* SMS Gateway: Initial HTTP Keep-Alive socket support in the SMS gateway in the last release caused a problem for “/provision” requests. This problem has been resolved.

* MMSC: Add configuration option to block routing callback for short codes (many routing callbacks expect standard phone numbers). If ForceRoutingCallback=Yes is set in the MMSC.INI, then ForceRoutingCallbackShortCodes=No can be set to exclude short codes from the routing callback. Note: The default maximum short code length is 6 digits, this can be adjusted with the ShortCodeMaxLength=## setting. (All settings referenced in this description are in the [MMSC] section of MMSC.INI.)


* SMS Gateway: HTTP Keep-Alive sockets are now supported for HTTP submissions to offer improved performance. If this causes a problem for some applications, keep-alive sockets can be disabled by editing SMSGW.INI and under the [SMSGW] header, adding EnableKeepAlive=No.


* SMS Gateway: The SMPPRejectErrorCodes setting described in can now be set on an individual connection basis. SMPPRejectErrorCodes= is now supported under individual [SMPP – server:port] section headers to allow settings that apply to only that connection.

* SMS Gateway: Improve performance of accepting new HTTP connections for message submissions.

* SMPP Server: Fix message id generation logic to avoid duplicate message IDs when accepting long messages from SMPP clients.


* SMPP: When receiving a delivery report from an upstream SMPP connection, if the TLV parameter message_state is not set, NowSMS would previously assume that the delivery report signals successful delivery and would generate TLV parameter message_state=2 if the delivery report is relayed to an SMPP client. Effective with this update, NowSMS now parses the text of the delivery report to determine the status. If the status cannot be determined, NowSMS will not generate a message_state parameter.


* MMSC: Add configuration setting to allow the SMTP host name to be set independently of the MMSC “Local Host Name”. To set the SMTP Host name, edit MMSC.INI, and under the [MMSC] header, add SMTPHostName=xxxx. If this parameter is not present, the “Local Host Name or IP Address” field will be used as the SMTP host name. (This setting was added on 2010-06-17, but the original implementation was for SMTP only, not MM4. It now also applies to MM4.)

* SMPP: Fix for a problem with delivery receipt handling for a delivery receipt that was received in Unicode text format.


* MMSC: Fix for an exception error that could trigger MMSC restarts when processing MMS to “SMS web link with code” conversions.


* MMSC/MM7: Fix for “MMSBCC=Yes” parameter not properly encoding recipients as “BCC” if routing externally via an MM7 or MM4 connection.

* SMPP: Add support for iso-8859-15 character set. This character set may be required if you are experiencing problems sending the Euro € character. When using the GSM character set, the Euro is encoded as an escape character followed by e. However, the Euro character is not actually defined in the iso-8859-1 character set. When NowSMS is configured to use the iso-8859-1 character set, it encodes the Euro with hexadecimal value 0x80, which is the standard encoding from the Microsoft Windows extension of iso-8859-1. However, some SMPP servers expect the Euro to be encoded as 0xA4, which is defined in the iso-8859-15 character set, a character set which was originally intended to be a replacement for iso-8859-1, but that did not see widespread implementation. When an SMPP connection is configured to use the iso-8859-15 (or iso-8859-1) character set, the default behaviour of NowSMS is to submit messages using a data_coding value of 3 to indicate iso-8859-1 encoding. Additional SMPP character set notes: 1.) Some SMSCs expect iso-8859-1 (or -15) encoding to be used, but do not understand the data_coding = 3 setting. For those environments, it is possible to manually edit SMSGW.INI, and under the [SMPP – server:port] section header for the SMPP connection, add SMSCCharsetDefault=Yes, which will tell NowSMS to use a data_coding value of 0 with the character set that is configured for the connection. 2.) If there are character set encoding problems receiving a message from a connection, note that NowSMS uses the configured character set for the connection for interpreting text messages only if the data_coding value is 0. If the data_coding value is 3, NowSMS will decode the text as iso-8859-1 (or iso-8859-15), regardless of the character set configured for the connection. If the data_coding value is 1, or a text encoding value other than 3, NowSMS will decode the text as using the GSM character set. To override this decoding behaviour for received messages, and force NowSMS to always use the character set configured for the connection, edit SMSGW.INI and under the [SMPP – server:port] section header for the SMPP connection, add SMSCCharsetReceiveTextOverride=Yes.

* SMPP Server: Support for SMPP clients connecting to the NowSMS server via SMPP using the iso-8859-15 character set has been added, similar to the settings described for outbound SMPP connections from NowSMS. Default settings for the NowSMS SMPP server character set can be configured under the [SMPP] header of SMSGW.INI. If there is a need to support SMPP clients that use different default character sets, it is possible to add additional user-specific section headers to SMSGW.INI. Under a header of [SMPP – username], the following parameters can be applied to a specific SMPP client account: SMSCCharset=IA5 (for GSM), iso-8859-1 or iso-8859-15; SMSCCharsetDefault=Yes (tells NowSMS to use a data_coding value of 0 with the configured character set), SMSCCharsetReceiveTextOverride=Yes (tells NowSMS to always use the character set configured for the user for text messages, even if the data_coding value implies a different character set is being used).


* SMS Accounting Callbacks: Add additional parameters to accounting callbacks, including SMPP “ServiceType” and “Validity” parameters.


* MMSC: Fix for a problem sending a message to a large number of MMS recipients, where a problem occurred because initial message recipients would receive the message notification before the MMS message file was closed on the MMSC. This caused message download failures unless MSISDNMatchRequiredForReceive=No was set under the [MMSC] header of MMSC.INI. (Most MMS clients would re-attempt download later and the message would be successfully delivered.)

* Web Interface/Send MMS Message: Fix for an exception error that could occur in the SMS gateway when sending an MMS message to a large number of recipients that include a “+” character.


* SMPP & MM7: Add configuration option to support alphanumeric recipients for SMS messages sent over SMPP and MMS messages sent over MM7. This is to support a provider that maintains server side distribution lists which are addressed as alphanumeric recipients. Alphanumeric recipients are only supported if AllowAlphaRecip=Yes is added to the [SMSGW] section of SMSGW.INI. (Fix problem sending to SMS recipients that include a “:” character.)


* MMSC/inbound MMS Messages: A new “MMSC Routing” option has been added for “MMSC VASP” definitions. “Local MMS Recipients Only” means that the connection will only accept messages that the MMSC can handle directly without routing to an external MMSC Routing (MM4, MM7) definition. “Local MMS Recipients Only” includes both local MMS users, as well as recipients that are automatically converted to WAP Push or SMS with web link (code). The purpose of the setting is to disallow selected MM4 or MM7 connections from being able to route externally via another MM4 or MM7 connection.

* MMSC: The MSISDNHeaderConvertToLocalNumber=Yes setting now affects both MMS headers and MMS messages that have been converted to SMS with web link (with code) for delivery, so that the message sender phone number is displayed in local number format instead of international number format.

* MMSC: Some temporary files (TEMPxxxxxxxx.TMP) were being created in the NowSMS program directory, and would fail to be deleted. These files are now properly created in the TEMP subdirectory and automatically cleaned up.

* SMS Gateway: When an HTTP message submission is rejected, it could be because the user is out of credits, has exceeded daily/monthly allowances, been denied by a response from an accounting callback, or an error has occurred processing an accounting callback. To aid in troubleshooting, the HTTP 403 error response now includes text that explains the reason for the message rejection. Additionally, it is easier to search for rejection information in the SMSDEBUG.LOG, as the error information in the log will be preceded by “MessageAccountingReject:”.


* SMPP Configuration: Add a scroll bar to the “SMSC Character Set” options list to allow easier selection of different character sets.

* SMS Gateway Accounting Callbacks: Fix “SMSOut” accounting callback to start with the text “Retry Pending” for “Status” when a message delivery attempt fails, but a retry is still pending, allowing temporary errors to be properly distinguished from final error conditions.

* SMS Gateway: Optional fix for segmentation logic to avoid repeating UDH headers when NowSMS is automatically segmenting a long message submitted via SMPP “message_payload” or via HTTP. Repeating UDH headers in all segments can cause problems for some uses, particularly SIM data download. To enable this logic, add RepeatUDHAllSegments=No under the [SMSGW] header of SMSGW.INI.

* SMS Gateway/SMPP Client: When operating in sync mode, if ESME_RTHROTTLED is returned, after waiting for the throttle delay, the same message will be re-attempted up to 5 times.

* SMS Gateway/SMPP Client: The SMPP Throttle error delay is now configurable on a per connection basis. The default throttle error delay is 5 seconds. To set a global throttle error delay that applies to all connections, add SMPPThrottleErrorDelay=## (where ## is a number of seconds) under the [SMSGW] header of SMSGW.INI. To specify a delay that should be used only for a specific connection, add SMPPThrottleErrorDelay=## to the [SMPP – server:port] section for the connection.

* SMS Gateway/SMPP Client: Add configuration option to treat the ESME_RMSGQFUL (receive message queue full) error the same way as a throttling error, subjecting it to the SMPPThrottleErrorDelay pause. This option can be activated for inidividual SMPP connections if desired by adding ThrottleForQFull=Yes under the [SMPP – server:port] section header for a connection.

* SMS Gateway: Additional performance optimisations for user credit balance and quota tracking.

* SMS Gateway: Fix for a message encoding problem when sending long text messages via an outbound SMPP connection with WDP Adaptation enabled if the message contains source and/or destination port addressing.


* SMS Gateway/GSM Modem Receive Message: Fix for a problem where the sender phone number was not being interpreted correctly for some messages. For some reason, the problem messages were being received with the sender address type being set to a reserved/unknown value, which was causing NowSMS to mistakenly interpret the sender address as being alphanumeric.


* SMS Gateway: Performance optimisations for user credit balance tracking.


* MMSC/MM4: When generating MM4_forward.RES acknowledgments include the “X-Mms-Message-ID:” and “X-Mms-Transaction-ID:” headers exactly as they were received. Previously, quote characters were added to these values if they were not present in the received message, because the MM4 specification (3GPP 23.140) defines these headers as requiring quoted-string values. This was causing a problem with an MM4 interconnect to NTT DoCoMo Japan, which is not properly formatting these headers with quoted-string values. In the unlikely event that this change causes a problem with other MM4 interconnects, a configuration setting has been added to force the old behaviour which would always format these values as quoted-string. To enable this old behaviour, edit MMSC.INI and under the [MMSC] header, add ForceMM4QuotedMessageID=Yes.


* MMSC: Fix for a corrupt message problem that triggered repeated MMSC restarts and denial of service.


* SMS Gateway: Fix for bug effecting the “ReRouteReceived” setting, which allows messages received via an SMSC connection to be redirected for delivery via another SMSC connection. Recent changes to allow accounting callbacks to specify message routing was causing invalid routing information to be recorded for these messages, causing them to be stuck in the queue.


* GSM Modem Handling: When routing messages received via a GSM modem to an SMPP client account, if the modem phone number is not available, insert a value of “1” as the destination address instead of blocking the message from being received by the SMPP client.


* SMS Gateway: 2010-05-07 version had a problem with “Stuck messages” if messages were submitted with explicit queue routing (&SMSCRoute=routename), and the setting UseRouteQueues=Yes was not applied.


* GSM Modem Handling: Additional checks to stop polling memory locations that don’t exist on unusual modems like the Multitech CDMA modem. (Was not an operational problem, but resulted in a lot of error information in debug logs.)


* GSM Modem Handling: Add an additional modem test (AT+CREG?) to check if the modem reports loss of signal. If the loss of signal condition persists, trigger a soft reset of the modem to try to get the modem to reconnect with the operator.

* GSM Modem Handling: Fix for a “CMS ERROR: 340” issue that could occur with some CDMA modems that emulate GSM modems, where NowSMS would try to use support for GSM Phase 2+, even if it was not enabled in the configuration.


* SMS Gateway: Add the capability to define the number of transmitter, receiver and/or transceiver connections to be allocated for a single SMPP connection, without requiring multiple duplicate connections to be defined. In the [SMPP – server:port] section of SMSGW.INI, the following settings are supported: TransmitterCount=## and ReceiverCount=##. TransmitterCount=## defines the number of transmitter connections to be established. If transceiver mode is configured, TransmitterCount specifies the number of transceiver connections to be established. If transceiver mode is not configured, ReceiverCount specifies the number of receiver connections to be established. Note that the number of receiver connections cannot be greater than TransmitterCount.

* SMS Gateway: Performance optimisations for large message queues, especially when there are a large number of outbound SMSC connections. Previously documented UseRouteCache=Yes parameter setting is now enabled by default. In the event of unexpected problems, the new routing logic can be disabled with a setting of UseRouteCache=No under the [SMSGW] header of SMSGW.INI.

* SMS Accounting Callbacks: Add SMPPOptions TLV parameters to the accounting callbacks.

* SMS Accounting Callbacks: Fix for a problem with accounting callbacks if text included “@@”.

* MMSC: Fix problem with automatic MMS version detection that was preventing some MMS clients from recognising that the MMSC supports read receipts, causing clients to send read receipts as standard messages (bug was introduced in early 2009 versions).

* MMSC: Add pre-auth callback for “MMSReadReport” when an MM1 client is submitting a message read receipt. (A pre-auth callback is not necessarily required for this event, however it is being added for consistency, since a pre-auth callback does exist for delivery reports.) Pre-auth delivery report callback also modified to include AccountingExtraHeaders if configured.

* MMSC: Fix for MMSC routing callback not including the “From=” parameter for messages submitted via the web interface.


* SMS Gateway: Fix for a routing issue where multiple SMSC connections have the same sender address, where one route has one or more preferred routes, and another route with the same sender address has “Support any outbound message traffic” checked. Messages with a matching sender address should only be routed to the first route if the recipient matches a preferred route, however it was being routed to either route. Note: This only applies to sender based routing.


* Accounting Callbacks: Add additional parameter “AcctInfo=” that can be included when submitting a message via HTTP. If included on submission, this parameter will be passed to subsequent accounting callbacks regarding the message.

* MMSC: Fix for MM4 message decoding problem when “Content-Location:” header contains a space character. According to RFC2557, White space characters do not appear to be valid as part of a location name in this header. A change to allow them is being implemented to address a problem where customers are receiving corrupt messages from some Verizon phones.

* SMS Gateway: New performance optimisations for performance problems with large message queues, especially when combined with a large number of outbound SMSC connections. These performance optimisations are only enabled in this version when UseRouteCache=Yes is specfied under the [SMSGW] header of SMSGW.INI.

* Internal: Include additional error checking to detect and automatically repair SQLite databases that are used for receipt tracking.

* Internal: Update SQLite databased (used for message id receipt tracking) to v3.6.23.


* SMS Gateway: Fix for 2-way SMS problem on Windows XP systems, where early 2010 versions would have problems sending replies to 2-way SMS messages because of corrupt “SMSCRoute=” information being added to the SMS message.

* SMS Gateway: Add configuration settings to disable user logging and quota management features to add performance for systems that do not need user logs and/or quota tracking. Under the [SMSGW] header of SMSGW.INI, the following settings have been added: DisableUserLog=Yes – This setting disables the creation of user specific log files in the USERS\username directory structure. DisableUserQuota=Yes – This setting disables the tracking of how many messages each user account sends in a day.


* SMS Gateway: Fix for delivery receipts message IDs not being tracked if the sender address is alphanumeric containing a ‘ (single quote/apostrphe) character.

* SMS Gateway: Minor performance optimisation for large message queues (could be major for some installations, minor for others).

* WAP Push testing parameters added to meet a particular conformance test which required support for WAP Push SI, SL and CO messages using WBXML version 1.1 and the iso-8859-1 character set. NowSMS defaults to using WBXML version 1.2 and the UTF-8 character set. To set the WBXML version, edit SMSGW.INI and under the [SMSGW] section header, add WAPPushWBXMLVersion=1.1. To specify iso-8859-1 as the WAP Push character set, use WAPPushUseUTF8=No in the [SMSGW] section of SMSGW.INI.


* Fix for error message confusion where NowSMS would report an error about the SMPP port already being in use when the port conflict actually involved the SMTP port.

For comments and further discussion, please click here to visit the NowSMS Technical Forums (Discussion Board)...