Hi all,
new year, new approaches. In December I was tasked to think about a real SMSC with SMPP input and SS7 output (or SMPP in the future) and I wrote down my ideas[1] about data storage, approach, how to achieve scaling. What is missing fail-over but there are some ideas for this as well.
The implementation will be done using Pharo and at least the first data storage will use mongodb >= 3.2. In the past my Pharo work has not been hosted in git but for this project it will change and maybe it creates some more visibility, historically documentation and debian packages were not too visible but that will be different this time as well.
If you are interested in specification, Smalltalk, testing, load testing, SS7 or such please join me in the development.
happy hacking holger
[1] https://github.com/zecke/osmo-smsc/blob/master/README.asciidoc it will move to git.osmocom.org but I just wanted to have online asciidoc rendering.
On 18 Jan 2016, at 16:56, Holger Freyther holger@freyther.de wrote:
Good Morning,
If you are interested in specification, Smalltalk, testing, load testing, SS7 or such please join me in the development.
progress was a bit slower due having to handle administration topics at sysmocom but last weekend I completed most of the database interface. The biggest challenge was to enforce only one system will deliver to a specific destination at the same time, e.g. for multi-part SMS one should not send more than one fragment at a time.
I currently solve this by using Compare-And-Swap (CAS) to lock a single SMS and then try to insert a unique lock for this destination into another collection. If that worked I will try to lock other SMS that are to be delivered (or in a couple of seconds). This way the SMS will look lock and no other node will try to use it (otherwise nodes would busy loop trying to lock a SMS that can not be delivered). All database operations have system tests and are executed on travis-ci with a recent mongodb.
Right now I am completing the inserting of SubmitSM and DeliverSM into the database and the next stop is to work on delivery using SMPP and MAP. I will extract a lot of functionality from the HomeRouting SMS system, e.g. the SMPP<->MAP conversion, the dialogue handling for MAPv3/MAPv2.
As usual anyone interested in playing with the system, contributing to it, writing system tests or load tests is more than welcome to participate.
holger
On 09 Feb 2016, at 12:09, Holger Freyther holger@freyther.de wrote:
On 18 Jan 2016, at 16:56, Holger Freyther holger@freyther.de wrote:
Good Morning,
Hi!
As usual anyone interested in playing with the system, contributing to it, writing system tests or load tests is more than welcome to participate.
progress has continued but several administration topics has delayed me a bit. We now have a complete REST interface for managing SMPP and SS7 links in the inserter and delivery part of the system. The delivery part can now lock SMS, lock the destination and select messages to be sent.
There is also the first system test that tests the REST interface and we are working on a system test that brings up the inserter and inserts SMPP messages into the DB.
I have worked on configuring delivery routes through REST. One can define a route that matches:
* by default * a destination address prefix * a destination + source address prefix * a destination + source address prefix and the link the message arrived
Each route defines 0-N delivery methods. A delivery method refers a SMPP or SS7 link and some parameters. E.g. for SS7 the to be used MAP version is configured, the source GT, the SMSC number, the GT translation flags for SCCP.
As usual the source code and all intermediate versions is free software (still on my private github repo as the travis-ci system integration is quite neat but that will change).
kind regards holger
On 19 Feb 2016, at 20:34, Holger Freyther holger@freyther.de wrote:
Hi!
As usual the source code and all intermediate versions is free software (still on my private github repo as the travis-ci system integration is quite neat but that will change).
I have now finished the delivery code for SMPP and SS7/MAP (forwardSM/mt-ForwardSM). The code is missing some unit tests and might not work yet but the structure for it is there.
The next steps will be:
* Continue on packaging and system-tests * Add (unit) tests for simulating the various failures on SMPP and SS7 delivery * Use the "write-concern" of mongo for writing * Deploy and measure performance of the system.
holger