FrontlineSMS
============

Overview
--------

FrontlineSMS is a system for both manual and automatic processing of SMS, supporting creation of various SMS workflows. The application is written in Java (resp. Groovy) and uses Grails layout engine. It has its own installer which deploys single-tenant Jetty lightweight applicaiton server. To work efficiently, FrontlineSMS requires a device with SMS capabilities or a connection to third-party service such as Twilio.

The version of FrontlineSMS is no longer maintained by the original developers and no new updates are expected to appear. The manufacturer currently offers and supports only a cloud version of FrontlineSMS.

Upstream URL: https://github.com/frontlinesms/frontlinesms2

Fork URL: https://github.com/trendspotter/frontlinesms2 - the fork contains the last known working version of installer as a release.

Modem capabilities
------------------

There are special considerations to be taken whenever an application witch direct access to hardware is run in a container. Currently FrontlineSMS has not been tested with such device and it is expected that some extra work or container configuration not present in any other application needs to be done in order to make the hardware device available and usable by the container.

Localization
------------

FrontlineSMS is localized to Czech only locally on SpoterVM. Upstream doesn't contain the localization as the application is not developed anymore. The localization is supplied as a Java property file ``WEB-INF/grails-app/i18n/messages_cs.properties`` and then once again as the same file packed and minifies as ``assets/i18n/frontlinesms-core_messages_cs.js``. The minified file can be created using ``frontlinesms-lang-js.py`` helper script in SpotterVM repository.

Java support
------------

Due to the age of the application (latest release somewhere in 2014), FrontlineSMS doesn't work well with current versions of Java runtime. The last know working version is Java 8.222.10 supplied by Alpine 3.8. More recent version, e.g. Java 8.242 cause HTTP connection accept failures.

X server
--------

Although FrontlineSMS is a web application, it requires X server as it attempts to install a systray icon. On a headless server, this requirement can be worked around using ``xf86-video-dummy`` package which works as a *blackhole* display driver.

The X server is then started as

.. code-block:: bash

    Xorg -noreset +extension GLX +extension RANDR +extension RENDER -config dummy.conf :10

Where the ``dummy.conf`` looks as follows

.. code-block:: xorg.conf

    Section "ServerFlags"
      Option "DontVTSwitch" "true"
      Option "AllowMouseOpenFail" "true"
      Option "PciForceNone" "true"
      Option "AutoEnableDevices" "false"
      Option "AutoAddDevices" "false"
    EndSection

    Section "InputDevice"
      Identifier "dummy_mouse"
      Option "CorePointer" "true"
      Driver "void"
    EndSection

    Section "InputDevice"
      Identifier "dummy_keyboard"
      Option "CoreKeyboard" "true"
      Driver "void"
    EndSection

    Section "Device"
      Identifier "dummy_videocard"
      Driver "dummy"
      Option "ConstantDPI" "true"
      VideoRam 192000
    EndSection

    Section "Monitor"
      Identifier "dummy_monitor"
      HorizSync   5.0 - 1000.0
      VertRefresh 5.0 - 200.0
      Modeline "1280x720" 27.41 1280 1312 1416 1448 720 737 740 757
    EndSection

    Section "Screen"
      Identifier "dummy_screen"
      Device "dummy_videocard"
      Monitor "dummy_monitor"
      DefaultDepth 24
      SubSection "Display"
        Viewport 0 0
        Depth 24
        Modes "1280x720"
        Virtual 8192 4096
      EndSubSection
    EndSection

    Section "ServerLayout"
      Identifier   "dummy_layout"
      Screen       "dummy_screen"
      InputDevice  "dummy_mouse"
      InputDevice  "dummy_keyboard"
    EndSection
