EMG 3.0.17 - User's Guide
F. Change history
Changes between EMG releases.
There are three different types of releases:
Major release
A full distribution including new functionality. Migrating from one major version to another will require a new license key.
A full distribution including new functionality. Migrating from one major version to another will require a new license key.
Minor release
A full distribution primarily including changes and bug fixes. Usually does not require a new license key.
A full distribution primarily including changes and bug fixes. Usually does not require a new license key.
Patch release
A binaries-only release including changes and bug fixes. Applied to an existing installation from a full distribution. Does not require a new license key.
A binaries-only release including changes and bug fixes. Applied to an existing installation from a full distribution. Does not require a new license key.
Changes marked with an asterisk, `*', includes a fix for a problem which potentially could cause the server to stop unexpectedly.
F.1 EMG 3.0.17.18116
Minor release.
· New keyword EXPIRE_INTERVAL which specifies how often (in seconds) to check for expired objects (default: 2)
· New keywords DISABLE_MESSAGEBODY and DISABLE_MESSAGEOPTION to suppress corresponding DB tables being used
· New connector keyword MODEM_BPS to set bitrate on GSM modem connections
· New connector keyword FAILOVER_ALL which will move all queued entries to specified connector if connector goes into state error
· Keyword MAXSESSIONS did not reject new sessions when limit exceeded
· UCP: Send "0" instead of alphanumeric source address in DLRs
· UCP: OTOA value of 1139 should set NPI=1
· SMPP: If MESSAGESTATE2/RECEIPTEDMESSAGEID are used parameters from DLR body must be ignored
· MM7: Allow SOAPAction header to be missing
· FAILOVER with invalid connector would cause NPE*
· Keyword session, potenial NPE if keyword matches but source address is missing*
· DLR log level was not always set correctly after a refresh/reload
· Improved escaping of options in log files
· Minor improvements in GSM modem driver
· Minor performance improvements
F.2 EMG 3.0.16.14262
Minor release.
· EMG is now available in version without SSL/encryption support
· Database schema change for "emguser" table (build 13555)
· Import performance for handling of incoming delivery reports
· New connector keyword FAILOVER for re-routing of message when an error is returned in response to submit operation
· New connector keywords FORCE_SOURCEPORT_IN and FORCE_DESTPORT_IN
· Fix for potential crash when orphaned messages expired
· PDU log format change for unknown fields, previously logged as "UNKNOWN:<value>", now logged as "?<key>:<value>"
· HTTP: Two potential buffer overflows eliminated *
· OIS: Multiple fixes for sending and receiving message incl UDH support
· UCP: Protocol id is now treated as string and not as numeric value
· SMPP: DLR_ERR_HEX can now be used for outgoing DLRs
· SMPP: Handle delivery receipts from Huawei SMSC correctly
· WAP PUSH SI/SL in UTF-8 is now handled correctly
· Validation of values for INTERFACEVERSION added when SMPP is used
· Signature change (2 new arguments) for DB functions "db_sendrequest" and "db_readresponse". Plugins using these functions must be re-compiled to use the new signatures.
· Plus som additional potential minor memory leaks and null pointers fixed.
F.3 EMG 3.0.15.12050
Minor release.
· Added support for regular expressions in routlist files
· SMPP: New connector keyword DLR_ERR_HEX which indicates "err" field in incoming delivery receipts should be treated as hex
· SMPP: Handle delivery receipts from Comverse SMSC correctly
· UCP: Empty messages bodies was not handled *
· Problem with refresh/reload with connectors using SSL fixed
F.4 EMG 3.0.14.11726
Minor release.
· New general keyword DISABLE_CREDITS, which disables credit handling
· SMPP: Possible data corruption when parsing invalid pdus fixed *
· SMPP: Preserve DCS value when GSM MWI is used
· PAP: Improvements for PAP proxy possibilities
· UCP: New MGP option XSER_EXTRA for handling custom XSER fields
· DLR: Possible memory corruption under high load eliminated *
· DLR: Logic rewrite for performance improvement
· New MySQL driver for Solaris 10 x86
· Check for expired DLRs only once per minute
· Ensure connection is closed if we cannot write
F.5 EMG 3.0.13.10913
Minor release.
· New connector keyword OPS_MAXEXPIRED, which controls how many outstanding operations are allowed to expire before connection is closed. Default is 0.
· PAP: Missing "Content-type" could cause server to crash *
· SMPP: Make delivery report parsing a bit more flexible
· MGP: Fail message if UDH is not correctly encoded
· Enable forwarding of DLRs for temporary status by setting bit 2 for DLR option (DLR=2 for temp only or DLR=3 for temp and permanent status)
· Routing files was not checked properly by "emgd -verify"
· Fix in retry scheme handling which would cause action for one message to be applied to multiple messages
· "Holding" a connector which did not exist would cause server to crash *
· Minor memory leak when using PLUGINARG option
· DB: Schema change (19) in routelog, "npdus" now defaults to "1"
· DB: Schema change (20) in routelog, new field "origid" which is set to the id of the original message for DLRs
· DB: Schema change(21), new table "monthlysummary" for aggregated
F.6 EMG 3.0.12.10307
Minor release.
· PAP: Fix for respecting SI/SL
· SMSCI: Do not use mod 256 on transaction number
· Concatenated messages: Never convert from UCS2 to IA5 even if one part will fit, since this will corrupt message
· Concatenated messages: Ensure we do not split a message in the middle of a multi-byte character
· AUTOWAPPUSH_IN now supports a text in addition to the URL. The first URL found in the message will be extracted and the rest of the message used as the text
· Do not update routelog table with NULL values
· Bodies for large messages was not removed when using message persistence
F.7 EMG 3.0.11.9982
Minor release.
· CIMD2: TAB is not allowed in usernames
· HTTP: HTTP status 406 was incorrectly sent for messages with empty message body
· MGP: QPRIORITY can now be set by ADMIN users
· SMPP: Added support for parsing of Comverse DLR format
· SMPP: Field data_coding was not always set correctly
· SMPP: Fix for handling of messages longer than 255 bytes
· SMTP: E-mails with leading space in message body was not handled correctly
· SMTP: Functionality for "compressing" a Unicode message into GSM IA5, if it fits, improved
· SMTP: QUOTEDSUBJECT was not handled correctly
· UCP: "/" is not allowed in usernames
· UCP: Ensure correct length is used for billingid (max 20 chars)
· smtpload: More than 10 threads was not handled
· UDH calculation could sometimes be incorrect for long messages if "concat" attributes already present in UDH
· New protocol implemented, SMSCI (CIMD2 variant)
· Loglevel now reset to "info" during reload if not present
· Increased buffer size for network communication for improved SMTP performance
· Memory leak when clearing messages and PERSISTFILES in use
· Directory structure is now only traversed every minute when using PERSISTFILES
F.8 EMG 3.0.10.9505
Minor release.
· HTTP: Validate hex encoded message bodies
· MM7: Namespace added to DeliverRsp
· SMPP: Possible null pointer when receiving invalid data *
· emgclient: Invalid pointer problem when running "deleteall" on server with a lot of activity *
· PARSEMESSAGE did not handle all IA5 characters properly
· New keyword AUTOWAPPUSH_IN for receiving a link via SMTP and converting it into a WAP Push (SI).
· Improved performance of hex encoder/decoder
· Incoming connectors should not be set to "hold" on message errors
F.9 EMG 3.0.9.9284
Minor release.
· MGP: Return code from plugin call before_receive was not respected
· SMPP: enquire_link is not allowed if not logged in
· Optimizations in DLR handling
· Optimizations in logging
· Minor memory leak when database operation aborted unexcpectedly
F.10 EMG 3.0.8.9115
Minor release.
· SMPP: Messaging mode part of parameter esm_class was not respected
· SMPP: Timezone was not handled correctly for validity period
· SMPP: Handle DLRs with BUFFERD or ACCEPTD status
· SMPP: Optional parameters with a length > 128 were not handled properly*
· UCP: Message body was hex encoded twice when logged
· HTTP: Read to "end of file" if content-length is missing
· HTTP/MGP: Handle incoming DLRs
· HTTP/MGP: Now it is allowed to set XUSERNAME option if ALLOWROUTE is specified
· HTTP/EBE: New connector keyword USERESPONSE which allows for a message id to be read
· SMTP: Potential null pointer when message body empty which would cause crash on Solaris*
· EBE: Improved handling of childs in order to avoid zombie processes
· MM7: Reordered some fields
· MM7: Fixed memory leak when converting from MIME to MM7
· MM7: new protocol variant MM7-TMOBILE for interoperability with T-Mobile MMC
· emgstat: Display more of connectorname if screen is wider than 80 characters
· mmscomp: Fix potential crash
· Outgoing messages were counted twice for some protocols
· Keyword CONNECTORLOGDB can now be used for connectors as well as in general section
· New connector keyword LOGDB_EVENTS for specifying which connector events should be written to connectorlog table in database
· New connector keyword NODLR to suppress DLRs being generated from HTTP, SMTP, EBE connectors
· New connector keyword CHARCODE_CONVERT which enables automatic conversion between IA5 and Latin-1 for messages sent over connector
· New DB keyword SOCKET for connecting to MySQL databases using a UNIX socket instead of TCP/IP. As a consequence PORT now must always be specified
· Automcatic conversion of UCS2 messages which does not use the "high byte" to Latin-1 added
· DLRs received with a buffered status are now handled and will update the "bufferedstatus" field in routelog accordingly
· Default lifetime for a DLR entry increased to 73 hours
· Default value for IDLETIMEOUT for outgoing connectors is now KEEPALIVE + 10 seconds
· GSM modems would not work correctly if emgd had more than 64 file descriptors open*
· New column "msgtype" in routelog table. Now routelog can be used for all message statistics without using connectorlog
· DB: Multiple schema changes for routelog
· DB: Warn if INSTANCES > 1 for a DB profile since this is not supported
· Plugin API: Added functions plugin_thread_start and plugin_thread_stop for thread-specific handling when using plugins
· Plugin API: Plugins using more than 1 instance were not thread-safe*
· Performance: Optimization of allocated buffers has increased performance substantially for this release
· Performance: Switch to mtmalloc routines on Solaris which is much faster for multi-threaded applications
· Solaris 10 x86 is now supported
F.11 EMG 3.0.7.8470
Minor release.
· Updated OpenSSL version to 0.9.7i
· Unnecessary counting of DLRs could cause high load on DLR intensive systems
· Environment variable EMGLOGDIR did not work properly
· Use of MAXSESSIONS in users file could cause deadlock *
· Eliminated potential buffer overflow in UDH parsing *
· Users connecting and then disconnecting without logging in could cause thread to be left hanging
· DCS value for IA5 message was sometimes set to 1 instead of 0
· SMTP: FORCE_CHARCODE=UCS2 would cause server to crash *
· UCP: MT_ALERT_RESP was incorrectly decoded
· pushtohex: WAP opaque data was not correctly encoded
F.12 EMG 3.0.6.8403
Minor release.
· MIME: Handle UTF-8 in MIME trees properly
· CIMD2: Protocolid was not respected
· SMPP: Potential buffer overflow when parsing pdu *
· SMPP: Send error "invalid command length" on invalid pdu length
· SMPP: Reject unsupported operations
· SMPP: Handle generic_nack properly
· SMPP: Added support for vendor-specific optional parameters
· UCP: Potential buffer overflow when parsing pdu *
· UCP: Protocolid was not respected
· MM1: Potential null pointer problem fixed *
· MM1: Use sender timestamp for date field
· MM1: Force read-reply and delivery-report to false if messageclass=auto
· MM7: Handle "env:Client" as a generic client error
· MM7: Duplicate "<Priority>" tags was sometimes sent
· MM7: Use transid "0" in reply if transid is missing in request
· MM7: 5xx responses was not handled correctly
· emgclient: delete operation could delete wrong message
· Option MAXTOTALQUEUESIZE was not respected for most protocols
· Added MGP option DESTNETWORK which can be used for MNP routing
· URLs that starts with "https" in (SUB)ADDRESS should give SSL
· Algorithm for splitting long messages did not always work correctly
· Now IDLETIMEOUT is used when waiting for HTTP responses
· Minor memory leak fixed related to using invalid connector keywords
· Warn if KEEPALIVE is set to a greater value than IDLETIMEOUT
· Possible deadlock when authentication users from file and using maxsessions
· Session counter did not always handle disconnecting users correctly
· Support for multiple RETRYSCHEME keywords per connector
· Warn if DEFAULT_MSGTYPE is supplied with an invalid message type
· Potential invalid reads on big-endian archs (Solaris) *
· Plugins: Implementation of ZMRDB (MNP in Germany) and T-Mobile (Germany) billing plugins
F.13 EMG 3.0.5.7719
Minor release.
· Treat HTTP status 202 (accepted) as delivery ok
· SMTP: Error 450 is message specific and should not block entire domain for retry
· SMTP: There was a 30 second hard-coded "idle timeout" for incoming connections
· Prune /dlr and /sat directories when using persistence
· Syntax \xx can be used for binary data in keywords
· MSGTYPE=DLR was not sent for DLRs over SMTP
· EBE connector did not count used instances correctly
· New connector keyword DELAYFIRSTMESSAGE which causes a delay before the first message is sent over a connection
· Relative SMPP time did not respect days, months or years when specified
· Added concept of "weak" keywords which has a lower priority than keyword sessions via WEAKKEYWORD in routing file
· User-specific force of source address did not always work as expected
· Avoid null pointer when emgstat is used immediately after server startup *
· Binary messages should not be parsed for keywords
· Delivery time was not handled correctly for CIMD2, SMPP and UCP
· Protocol ID (GSM 3.40 TP-PID) was not handled correctly
· Keyword sessions could generate high load due to inefficient tree traversal
· Keyword sessions was only checked for messages containing a keyword
· SMPP message length was incorrectly set on big-endian platforms
· DLR: Expire field was not persisted and therefore lost on server restart
· UCP: Number of sessions was not always decreased on disconnect
· UCP: Message type was not set correctly for UCS2 and 8 bit messages via UCP deliver operation
· HTTP: Fix UDH parse problem for incoming requests
· HTTP: Avoid possible null pointer *
· MM7: Send UTF-8 data without conversion using encoding quoted-printable
· MMS: New connector option MMS_TEXT_CHARSET used to set character set for text parts in MMS
· DCS parameter was not handled correctly for HTTP
· MM1: Set status in replies
· Log plugin rejects in connector log
· Minor perfomance optimization in hex encoder
· Build date is now included in version information
· Arcor fixes
· DB schema change to version 15
F.14 EMG 3.0.4.6983
Minor release.
· New connector keyword ROUTING for specifying a connector-specific routing table
· New connector keywords REVDLR and REVDLR_IN for switching source and destination address for sent and received DLRs respectively
· New connector keywords used for setting TON and NPI when detecting address types automatically: AUTOMATICTONNPI_SHORTCODE_TON, AUTOMATICTONNPI_SHORTCODE_NPI,
AUTOMATICTONNPI_ALPHANUMERIC_TON, AUTOMATICTONNPI_ALPHANUMERIC_NPI,
AUTOMATICTONNPI_DEFAULT_TON, AUTOMATICTONNPI_DEFAULT_NPI
AUTOMATICTONNPI_ALPHANUMERIC_TON, AUTOMATICTONNPI_ALPHANUMERIC_NPI,
AUTOMATICTONNPI_DEFAULT_TON, AUTOMATICTONNPI_DEFAULT_NPI
· New connector keyword REGEXP_KEYWORD for applying regular expressions to keywords
· Added new MGP options for SMPP fields source_subaddress, dest_subaddress and its_session_info
· Apply mappings to keywords as well as message body
· MMS: Keyword parsing for MMS messages implemented, first check subject and if subject does not exist use first word in first plain text message part
· MIME: Ensure quoted-printable lines are CRLF terminated
· MM7: Put short codes in ShortCode tag correctly
· MM7: Allow empty Subject tag
· Handle empty SMTP messages
· Fixed potential crash for invalid formatted HTTP cookies *
· Fixed potential crash when DNS lookup failed *
· Fixed potential buffer overflow in MM1 parser *
F.15 EMG 3.0.3.6691
Minor release.
· New connector option REJECT_EMPTY for rejecting messages with empty message body
· CMR: Fix for CMR where messages could be routed under high server load. Ported from EMG 2.5t
· DLR: Problem with UCP DLR matching when id overflow
· DLR: Fixed problem with DLR matching when FORCE_DESTADDR was used
· GSM: New connector options for protocol GSM: SCAADDR, SCAADDRTON and SCAADDRNPI used to set SMSC address in message PDU
· GSM: Always use capital letters when hex encoding in driver for GSM modems
· HTTP: Always URL encode MGP option values sent over HTTP
· MGP: Requesting route log via MGP could cause emgd to crash *
· MIME: Do not insert CRLF before boundary attribute in Content-Type header
· MIME: Handle when space is missing after ":" in headers
· MIME: Potential buffer overflow in MIME part ids *
· MMS: Force connection close when using HTTP 1.0
· MM7: Various MM7 fixes
· SAT: QUOTEDREPLY did not work properly
· SAT: Subject was not saved properly when using SAT with SMTP
· ARCOR: Added Arcor multimessage packet logging
· Orphans: A small ORPHANSSIZE was used emgd could crash on server startup *
· Authentication: When authenticating from database emguser and useraccess was joined improperly allowing access to server from any IP address
· Authentication: Separate warning message when user has exceeded max number of simultaneous sessions
· Credits: Improved handling of credits charging 1 credit when receiving message and later charge additional credits if message was split into multiple PDUs
· Refresh: Connector hold flag was reset during server refresh/reload
· License: On Linux when MAC address of eth0 is not available use IP address for license check instead
· Added reasontext for CIMD2, SMPP and UCP for protocol specific error information
· Fixed minor memory leak when incoming connections was terminated prematurely
F.16 EMG 3.0
First official release of EMG 3.



