Skip to content

@selvanair selvanair released this Nov 30, 2017 · 3 commits to echo-msg-v2 since this release

To test, copy the included executable (64 bit only) to any folder and run. No special installation needed if openssl library is in the PATH. Else the executable may have to be copied to a folder where openssl dlls are.

By default repeated messages are suppressed for 24 hours (or GUI restart). To change this, start the GUI from command line as

openvpn-gui.exe --popup_mute_interval n

where n is in hours. Use 0 to disable muting. This parameter is not yet runtime configurable.

To show a message at start just add

echo msg Some message text
echo msg-window title

to the config. Use msg-notify instead of msg-window to use notification. To send the same from the server use

push "msg Some message text"
push "msg-window title"

For more details including multi-line messages, when quoting is necessary and examples, see the commit message reproduced below.

Tested on: Windows 7

=================================================
Support sending of messages from the server using echo

Process four new echo commands to construct messages to be
displayed to the user:

echo msg message-text
echo msg-n message-text
echo msg-window message-title
echo msg-notify message-title

Note: All rules of push and echo processing apply and determine
what is received as echo commands by the GUI. In addition,
'url-encoded' characters (% followed by two hex digits) are
decoded and displayed.

The message is constructed in the GUI by concatenating the text
specified in one or more "echo msg text" or "echo msg-n text"
commands. In case of "echo msg text" the previous text, if any,
is appended with a new line. An empty text in this case will
just add a new line.

The message ends and gets displayed when one of the following
are received:

echo msg-window title
echo msg-notify title

where "title" becomes the title of the message window. In case of
msg-window, a modeless window shows the message, in the latter case
a notification balloon is shown.

Example: when pushed from the server:

push "echo msg I say let the world go to hell%2C"
push "echo msg I must have my cup of tea."
push "echo msg-window Notes from the underground"

will display a modeless window as

Notes from the underground

I say let the world go to hell,
I must have my cup of tea.

Note that the message itself is not quoted in the above examples
and so it relies on the server's option-parser combining
individual words into a space separated string. Number of words
on a line is limited by the maximum number of parameters allowed
in openvpn commands (16). This limitation may be avoided by quoting
the text that follows so that it appears as one parameter to the options
parser.

The comma character is not allowed in pushed strings, so
it has to be sent encoded as %2C as shown above.
Such encoding of arbitrary bytes is supported. For example,
newlines may be embedded (needs to be %0D%0A on windows)
although the same may be achieved in a cleaner way using
multiple msg directives.

An example with embedded spaces and multiple lines concatenated
without a new line in between (note use of single quotes)

push "echo msg I swear to you gentlemen%2C that to be"
push "echo msg-n ' overly conscious is a sickness%2C ' "
push "echo msg-n a real%2C thorough sickness."
push "echo msg-notify Quote of the Day"

will show up as a notification that displays for an
Windows-version-dependent interval as:

Quote of the Day

I swear to you gentlemen, that to be overly conscious
is a sickness, a real, thorough sickness.

where the location of the line break is automatically determined
by the built-in notification framework.

Commands like "echo msg ..." in the config file are also
processed the same way. It gets displayed when the GUI connects
to the management interface and receives all pending echo.
Pushed message(s) get displayed when the client daemon
processes push-reply and passes on echo directives to the
GUI.

  • msg-window : displayed only when starting from a disconnected state
    not when reconnecting by SIGUSR1 or SIGHUP

  • msg-notify : displayed during first connection as well as
    reconnections -- i.e., whenever echo or pushed
    echo are received.

In both cases repeated messages are suppressed for a period
(24 h by default) -- set by popup_mute_interval.

It may be set from command-line as --popup_mute_interval 12
(for 12 hours). Use 0 for no muting.

TODO:

  • make the repeated message suppression run-time configurable
  • save msg history when GUI exits and reload on start
Assets 3
You can’t perform that action at this time.