All Projects → moiji-mobile → smsc

moiji-mobile / smsc

Licence: AGPL-3.0 license
Flexible and scalable GSM Short Message Center (SMSC)

Programming Languages

smalltalk
420 projects
python
139335 projects - #7 most used programming language
shell
77523 projects
HTML
75241 projects
Makefile
30231 projects

Projects that are alternatives of or similar to smsc

smpp.net
Short Message Peer-to-Peer (SMPP) .NET library
Stars: ✭ 29 (+26.09%)
Mutual labels:  smpp, smsc
tianditu-python
天地图切片(瓦片)以及POI下载
Stars: ✭ 92 (+300%)
Mutual labels:  map
osmo-bts
Osmocom GSM Base Transceiver Station (BTS); mirrored from https://gitea.osmocom.org/cellular-infrastructure/osmo-bts
Stars: ✭ 51 (+121.74%)
Mutual labels:  gsm
navdatareader
Navdatareader is a command line tool that uses the atools fs/bgl and fs/writer to store a full flight simulator scenery database into a relational database like Sqlite or MySql.
Stars: ✭ 35 (+52.17%)
Mutual labels:  map
php-sorted-collections
Sorted Collections for PHP
Stars: ✭ 22 (-4.35%)
Mutual labels:  map
korona.ws
🗺 Coronavirus interactive map of Poland
Stars: ✭ 74 (+221.74%)
Mutual labels:  map
SXAU-guide
微信小程序校园导航地图——小标识
Stars: ✭ 12 (-47.83%)
Mutual labels:  map
vue-map-chart
VueJS map chart component
Stars: ✭ 27 (+17.39%)
Mutual labels:  map
coin-map-android
Easily find places to spend sats anywhere on the planet
Stars: ✭ 23 (+0%)
Mutual labels:  map
DaoHang
一个基于百度地图api的demo,采用Material Design设计界面,有全景图、室内地图等功能。
Stars: ✭ 15 (-34.78%)
Mutual labels:  map
game-map-editor
game-map-editor
Stars: ✭ 17 (-26.09%)
Mutual labels:  map
RFMap
RFMap - Radio Frequency Mapper
Stars: ✭ 23 (+0%)
Mutual labels:  gsm
leaflet.minichart
Leaflet.minichart is a leaflet plugin for adding to a leaflet map small animated charts
Stars: ✭ 27 (+17.39%)
Mutual labels:  map
leaflet-tag-filter-button
Adds tag filter control for layers (marker, geojson features etc.) to LeafLet.
Stars: ✭ 48 (+108.7%)
Mutual labels:  map
mxmaps
An R package for making maps of Mexico
Stars: ✭ 60 (+160.87%)
Mutual labels:  map
GoogleMap Demo
GoogleMap一些常用API总结库
Stars: ✭ 24 (+4.35%)
Mutual labels:  map
TomScottMap
A unofficial map of the videos created by Tom Scott. See his Youtube channel for the complete list of videos (including those that are not geo-referenceable).
Stars: ✭ 30 (+30.43%)
Mutual labels:  map
sledge-formats
C# parsers and formats for Half-Life 1 and related engines.
Stars: ✭ 35 (+52.17%)
Mutual labels:  map
vue-static-map
a simple component to generate an static google map
Stars: ✭ 24 (+4.35%)
Mutual labels:  map
openfairdb
Open Fair DB is the CreativCommons Backend of Kartevonmorgen.org
Stars: ✭ 53 (+130.43%)
Mutual labels:  map

Scalable Smalltalk Short Message Center (SMSC)

Build Status Test Status

The work on this software has been sponsored by On-Waves ehf. Commercial support for deployment, maintenance and extensions is available through moiji-mobile. Please contact [email protected].

Design Goals

  • Receive to be delivered SMS by SMPP from multiple connections.

  • Store DeliverSM, SubmitSM or MAP T-PDU (Submit or Deliver)

  • Be able to have multiple delivery processes.

Design Ideas

Overview

overview

Storage

The central storage is planned to be a MongoDB. The reason is that it supports tailable cursors on capped collections, replication, atomic update of a document and the write concern for replication.

SMS/SMPP Record

One record will be a single message with meta information. Most of the information will be extracted for some queries. Most notable the following fields need to be there:

  • Arrival time at the SMSC

  • Destination number

  • Priority

  • Sender Report needed

  • Expiration time

  • Retry counter

  • Scheduled re-transmit time

  • Locking information (state + time)

  • Payload being either SMPP DeliverSM, SubmitSM or MAP T-PDU

Event structure

Create small capped collection for notification entries. This allows one to use a tailable mongo cursor that blocks until an entry has been inserted into the collection.

SMPP Inserter

Receive SMPP SubmitSM/DeliverSM and store in the database for store and forward. Multiple inserters must be able to run in parallel.

  • Use existing Smalltalk SMPP framework to open or listen to connections

  • After the content has been inserted add an event (which will lead to the delivery agents waking up)

Delivery

The task is to wake up for the next delivery time or when a new SMS has been inserted into the table. By using a capped collection for the notifcation collection the cursor will become readable and the system can wake up and select the message to be delivered. With a system of multiple delivery nodes running, all of them will wake up but only one will be able to lock the SMPP record with a CAS and process with the delivery process.

Once a SMS has been picked it will be checked if there are more SMS for this subscriber and up to four for messages will be blocked and scheduled in the same delivery run. If the delivery of a message fails the next delivery time will be set and the delivery worker goes back to waiting for work.

In general we want to avoid two delivery nodes to deliver to the same subscriber. This might result in a more complicated CAS locking scheme. The first lock would be to declare interest to deliver to the user and second lock would increase the lock by checking that no other delivery node has reached that level. Once that lock level has been reached it can try to find up to four different messages for delivery on the same TCAP session.

We might decide to put the delivery history (attempts, timestamps, info) into the record as well to help with debugging.

On delivery the encoded data might need to be converted. This can lead to conversion from any format to any other format. This might resolve in SMPP to GSM and Deliver to Submit.

Clean-up

As the locking process might leave some locked SMS behind and we need to remove SMS that were never delivered there should be a clean-up task with the following responsibilities:

  • Remove old SMS that could not be delivered

  • Reset SMS that are in the pending state for too long

Database locking protocol

There is one collection for "sms" and one for the "locks". Each SMS is one entry in the "sms" collection and for each destination MSISDN there is either one or no entry in the "locks" collection.

A worker will use Compare-And-Swap to lock one entry that is to be delivered. It is possible that two workers lock two SMS to the same user. This means as the next step both workers will try to get a destination lock. This is by having a unique index per destination MSISDN in the "locks" collection and then using CAS to try to lock the destination.

The system that could not lock the destination will need to release the lock and it is done using a CAS as well.

The system that got the lock and will now continue. It will try to lock more SMS using the CAS approach to lock matching SMS and ignore the current lock setting. The SMS will be either removed or unlocked depending on the delivery result. The lock from the other system will either be used after it has been unlocked or it will be stolen.

A third system might try to do delivery and needs to avoid always locking a SMS that is currently been delivered to. This is done by maintaining a list of excluded destMSISDN in the current round.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].