Vtrin Server
Vtrin Server (also Vtrin-NetServer) is the Data Abstraction server in Edge nodes. Vtrin Server is also the service name of the View Server. In addition to providing secure WebSocket communication to the View Client, it also works as a stand-alone web server.
Vtrin Server is a service that provides remote access to the Vtrin user interface client. (In addition, local connections are usually done through the Vtrin Server, as it allows for an additional protection layer for the database tables.)
The Engineering UI user interface connects the database using the services of the Vtrin Server as the very first step when the client is started. If the connection string begins with wss:// or `tcp://. Then the connection is done through the Vtrin Server.
Configuration
After installation, no configuration changes are required (or conditions where configuration changes are required should at least be very rare). Vtrin Server reads the configuration on startup from the file Vtrin-NetServer.exe.config, which is located in the same directory where Vtrin Server is started (Example: "C:\Program Files\ABB Oy\RTDB\Bin). The directory can be checked from the services.msc properties "Path to executable". This directory is a bit different depending on the operating system type (64 or 32 bit), or the type of RTDB installation (Data Collector or Main).
The configuration file is XML and contains, for example, details of what IP addresses and ports are used, what database to connect to, and what kind of buffer sizes and timeouts are available for different kinds of communication scenarios. The meaning of each parameter is briefly and quite technically described using XML comments.
Sometimes it is valuable to run the service interactively from the command line. This can be done by disabling the service from services.msc and stopping it. The command line can be copied from the services.msc properties "Path to executable", and adding -d to the end. For example:
"C:\Program Files\ABB Oy\RTDB\Bin\Vtrin-NetServer.exe" -d
Stopping the service is done by pressing the "ESC" button. Note that this is quite different to what is done for some other services that are stopped using Ctrl-C. For Vtrin-NetServer, this would violently terminate the program and potentially break database tables.
For you changes to be applied, you need to manually rester "Vtrin Server" service on your system. On Windows, that can be done using Task Manager application.
Global configuration parameters
| Parameter | Default Value | Meaning |
|---|---|---|
AccountQueryFilter |
Domain='%COMPUTERNAME%' |
Win32_Account query WHERE clause - can be used for performance reasons to prevent Vtrin-NetServer from scanning the complete domain for users. (if the security editor seems to freeze, you need to tune this one). %COMPUTERNAME% is substituted with the name of the machine running the Vtrin Server. |
AllowGuestLogin |
false |
(In 5.0 SR2 - see also |
AllowPlainTextPasswords |
false |
Enable to allow using authentication on non-secure (HTTP/WS) connections (very bad idea). |
AlternativeServers |
none |
Information about redundant database servers. Value is the wss-based URI string, e.g. "wss:// |
ChangeSendDelay |
500 |
Time to wait in ms when event is triggered for further events to combine them into a single frame, set to zero to disable (will disable lag, but cause a lot of TCP ping pong with any larger amounts of events). |
CertificateName |
Windows« vtrincert Linux (on 5.3 Q1/2025 and above)« vtrincert.pem |
Friendly name of a certificate in the local machine / my certificate store to be used for HTTPS/WSS connections OR a filename of a file in PKCS12 (PFX) format that contains both public and private key and is protected by password 'vtrincert'. The file storage should not be used in production systems, it is currently provided in order to test .NET Core implementations that lack the certificate store. |
CipherSuiteBlacklist |
5.3 December 2023 and later only. Comma separated list name *parts* of the cipher suites that should not be used. E.g. "_AES_128_" prevents using any cipher suites using 128bit AES (containing _AES_128_ in their name). Do not put extra whitespace in the comma separated list. The names are case sensitive. In addition to this setting there this builtin blacklist in VtrinLib that cannot be modified (as of 2023-10-25): TLS_RSA_WITH_,TLS_PSK_WITH_,_ECDH_,_DH_,_DHE_,_anon_,_DES_,_DES40_,_RC4_,_3DES_,_IDEA_,_NULL_,_MD5,_CBC_ (However, you can enable some of them again by using CipherSuiteWhitelist) |
|
CipherSuiteWhitelist |
5.3 December 2023 and later only. Comma separated list of name *parts* of the cipher suites that should be enabled regardless of them being blacklisted either by CipherSuiteBlacklist setting or VtrinLib's internal blacklist. On Windows it is not possible to enable any ciphers that are not already enabled on OS level, on Linux you can. Do not put extra whitespace in he comma separated list. The names are case sensitive. |
|
ConnectMessage |
A message to display when user connects to the system. Can be used to display eg. a legal disclaimer or such. |
|
Debug |
false |
Set to enable extra logging and dumping exception call stacks to clients. |
DisableNativeConnectionStringJSHandling |
false |
Set to disable connectionstring.js handling under Vtrin Server, allowing use of IIS plugin to do the work. |
DisablePersistAspxWrite |
false |
Set to disable the possibility to store View dashboards as .mdd files. |
DoSBanExtendThreshold |
10 |
These settings control Vtrin-NetServer's application level denial of service protection. If more than DoSBanThreshold connections are established to server from one IP address within the DoSGuardTimeSeconds then that IP address is banned for DoSBanTimeMinutes. If a banned IP address tries to establish more than DoSBanExtendThreshold connections within DoSGuardTimeSeconds average within the ban time, then the ban is extended by an additional DoSBanTimeMinutes. DoSExcludeLocalhost can be used to exclude the localhost from the ban processing (default behavior). Note that if some 3rd party software is used for forwarding connections to Vtrin-NetServer, then all connections might appear to be coming form localhost effectively rendering this protection useless. |
DoSBanThreshold |
500 |
|
DoSBanTimeMinutes |
1 |
|
DoSExcludeLocalhost |
true |
|
DoSGuardTimeSeconds |
15 |
|
EnableCertificateAuthentication |
false |
Set to enable authentication by client certificate (mutual authentication). Note: enabling is global and causes certificate to be requested even for directories the certificate authentication is disabled! |
EnableKerberosAuthentication |
true |
(OBSOLETE in 5.0 SR2t) Enable to using Kerberos authentication. (On Windows only) |
EnableOData |
false |
Enables the OData API endpoint. |
EnableSSL2 (< 5.2) |
false |
Enable to allow using SSL2 encryption. Warning: SSL2 is known as vulnerable and should be avoided. No longer supported in 5.2 and later. |
EnableSSL3 (< 5.2) |
false |
Enable to allow using SSL3 encryption. Warning: SSL3 is known as vulnerable and should be avoided. No longer supported in 5.2 and later. |
EnableTLS1 |
false (was true in 510.1803.21230.93 and older) |
Disable to ban the use of TLS 1.0 encryption. |
EnableTLS1.1 |
true |
Disable to ban the use of TLS 1.1 encryption. |
EnableTLS1.2 |
true on Windows 8/2012 and newer |
Disable to ban the use of TLS 1.2 encryption. (In Windows 2008, this should be set to false for the Vtrin 5.0 version so that the Vtrin Server will not try to use an unsupported protocol version, leading to the error "A call to SSPI failed" to the Vtrin Server log file, at least in the current (2017-08-30) version. Notice that starting from version 5.1, Vtrin no longer supports Windows 2008). |
EnforceHTTPS |
false |
Enforce use of HTTPS by redirecting all HTTP connections. |
ForwardHTTPConnectionsTo |
Address to forward HTTP connections to, eg. http://localhost:81. |
|
ForwardHTTPSConnectionsTo |
Address to forward HTTPS connections to, eg. https://localhost:444. |
|
Hostname |
auto |
Hostname to be used for unique naming of the datasources within this machine, use "auto" for autodetect. Autodetect will use NLB name automatically if only one NLB group is present. |
LDAPServers |
Comma separated list of fully qualified domain names of the domains that can be used for additional user authentication. (see LDAP authentication below for further info). Leave empty to disable. |
|
LogFile |
Name of the file to store diagnostic messages into, name (not the extension) will be suffixed with date and there will be one file for every day. |
|
LogLength |
30 |
Length of the diagnostic log in days. |
LoginPageTitle |
cpmPlus Login |
[Forms Authentication] The title shown on the login page. |
LoginPageCopyright |
[Forms Authentication] The copyright text on the login page. |
|
LoginPageDisclaimer |
This is a private system. Do not attempt to logon unless you are an authorized user. Any authorized or unauthorized access and use may be monitored and can result in criminal or civil prosecution under applicable law. |
[Forms Authentication] The disclaimer text on the login page. |
LoginPageUsernameLabel |
Username |
[Forms Authentication] The username label text on the login page. |
LoginPagePasswordLabel |
Password |
[Forms Authentication] The password label text on the login page. |
LoginPageButtonLabel |
Login |
[Forms Authentication] The submit button text on the login page. |
LoginPageLoginFailed |
Authentication Failed. Wrong username or password. |
[Forms Authentication] The error message for failed login attempt shown on the login page. |
LoginPageCustomLogo |
[Forms Authentication] The URL to a custom image shown in the top left corner of the login page. NOTE: It is advisable to install the image file in the login folder under the SourceRoot OR to a folder that has anonymous access enabled. |
|
MaxConcurrentBackfillCommits |
3 |
Maximum number of threads that can write backfill data to database in parallel. |
MaxConcurrentBackfillRequestsPerSession |
4 |
Maximum number of active backfill requests per session. |
MaxConcurrentCallsPerSession |
3 |
Maximum number of calls in concurrent execution for a single session. |
MaxConcurrentSessionsPerUser |
10 |
Maximum number of concurrent sessions for one user. |
MaxConcurrentGuestSessions |
20 |
Maximum number of concurrent sessions for non-authenticated users. |
MaxRequestSize |
32768 |
(Available in 5.3 2025/Q2+) Maximum http request size in bytes. Larger requests will lead in terminating the connection. |
SendQueueLimit |
512 |
Maximum number of outgoing frames to queue for a single client. If exceeded, the connection is automatically closed. |
SessionCookieLifetimeSeconds |
300 |
Time to keep the HTTP session cookie alive after the connection is closed. After session cookie is expired the authentication must be done again. |
SourceRoot |
view |
The directory the WS/WSS connections are being served from (under the WWWRoot). To specify more than one alternative, use semicolon separated list (eg. "view;history"). |
UILogLengthDays |
30 |
Length of the update log (UILog/UILogDetail classes).(version info: before version 5.0 that it was fixed to 30 days) |
UseWin32InteractiveLogin |
false |
(Available in 5.2 SR1+) If enabled Vtrin Server will try to call win32 LogonUser-method with LOGON32_LOGON_INTERACTIVE -parameter in case the normal call with LOGON32_LOGON_NETWORK fails. This is generally not a good idea as it is network logon that you are actually making, but it allows use of local user accounts in systems that prevent network login (eg. ABB laptops). |
WebSocketServerPort |
80 |
Port to host HTTP/WS serving, set to zero to disable. |
WebSocketServerSecurePort |
443 |
Port to host HTTPS/WSS serving, set to zero to disable. |
WebSocketHandshakeTimeoutMS |
10000 |
Timeout during WebSocket handshake and web request processing. Keep low to make Denial Of Service attacks bit harder. |
WebSocketReadTimeoutMS |
600000 |
Timeout when waiting for commands from an established WebSocket connection. |
WebSocketWriteTimeoutMS |
30000 |
Timeout when writing results to an established WebSocket connection. |
WWWRoot |
Windows« c:inetpubwwwrootLinux« /srv/miaroot |
The root directory of the HTTP/HTTPS serving. |
*) The setting was datasource-specific in version 4.6 and older.
LDAP authentication (Windows only, 5.0.1 and above)
For cases where the server running the Vtrin Server process is not part of the same domain as the users accessing it, and there is no trust between the domains, you may specify a list of allowed user domains in the "LDAPServers" configuration entry. This makes it possible for users of foreign domains to log on to the system. The access control definitions of these users must be done using foreign domain groups/usernames. Please use the following checklist when setting up the LDAP authentication support:
- The listed names must be fully qualified domain names (eg. not NMEA, but instead NMEA.abb.com).
- The servers must be configured to support the secure socket layer.
- The domain's secure socket layer certificate must be installed and/or trusted by the server running Vtrin Server.
- The domain servers must be introduced either by DNS or the host file to the server running Vtrin Server.
The Secure Socket Layer support is required to prevent man-in-the-middle attacks, as well as introducing a malicious domain controller, together with DNS poisoning.
Datasource specific configuration parameters
For each datasource, the configuration must contain a set of entries starting with DataSource[n], where n is a number starting from zero and increasing by one for each of the datasources.
| Parameter | Default Value | Meaning | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DataSource[n].Uri |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].ServerDSN |
Connection string for the server-side driver. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].UserName |
Username for Vtrin Server to logon to datasource - you should grant all required privileges for this user as Vtrin Server has its own authentication and security handling. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].Password |
Password for VtrinServer to logon to datasource | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].AdministratorGroup |
Windows« BUILTINAdministratorsLinux« root |
User or group, the members of which are allowed to bypass all security checks. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].RobotGroup |
Windows« RobotsLinux« robots |
User or group, the members of which will be excluded from logging changes to prevent flooding of the logs. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].TimeZone |
Override to timezone setting, if not specified the server tries to detect the timezone from the operating system settings (which can be bit inaccurate in Windows as Windows does not contain proper timezone information itself). |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].PGMPort |
0 |
Legacy .NET Remoting only: PGM (Pragmatic General Multicast = reliable multicast protocol) port - 0 to disable - PGM Usage requires installing operating system PGM support for both client and server side. Current Windows versions require administrative privileges for programs that use PGM. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].PGMIP |
234.231.x.x |
Legacy .NET Remoting only: PGM address used for keeping clients up to date. Any x's in this address will be replaced with hashcode from the ServerDSN. In IPv6 environments, try FF0F:0:0:0:ABB:F1:x:x. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].PGMWindowSizeMs |
30000 |
Legacy .NET Remoting only: PGM window size in milliseconds - note that when PGM is enabled, the memory usage will be PGMWindowSizeMs/1000*PGMRateKbps/8, so do not set too high. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].PGMRateKbps |
8192 |
Legacy .NET Remoting only: PGM maximum transmission rate in kilobits per second. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].UDPMulticastPort |
7609 |
Legacy .NET Remoting only: UDP Multicast port - 0 to disable. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].UDPMulticastIP |
234.231.x.x |
Legacy .NET Remoting only: UDP Multicast address used for keeping clients up to date. Any x's in this address will be replaced with hashcode from the ServerDSN. In IPv6 environments, try FF0F:0:0:0:ABB:F1:x:x. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].TCPEventTransportPort |
0 |
Legacy .NET Remoting only: Set to non-zero to enable the use of a secondary TCP connection for transferring real time events. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].MulticastAdapterIPList |
Legacy .NET Remoting only: List of network adapter IPs to use for multicasting - use ipconfig on command-line to obtain. Leave empty to use all available adapters. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].MulticastTimer |
1000 |
Legacy .NET Remoting only: Multicast delay in ms when sending packets if data is available. May send faster if packets get filled faster. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].MulticastTimeToLive |
1 |
Legacy .NET Remoting only: Multicast time to live - increase this to pass routers if required. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].MulticastReceiverTimeout |
30000 |
Legacy .NET remoting only: Multicast timeout in ms for clients - if no multicast is received within this period, the client will ask data via the primary TCP/HTTP connection. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].MulticastMaxMessageSize |
29440 |
Legacy .NET Remoting only: Multicast maximum message size. Setting it to a multiple of a standard Ethernet packet's usable size of 1472 is typically the most optimal. Note that UDP protocol does not support message sizes over 64kB. Messages larger than this will be transferred via the primary connection. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].MulticastMessageQueueSpan |
60000 |
Legacy .NET Remoting only: Time to buffer sent multicast messages, so that clients can fetch them via TCP/HTTP. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].MulticastReceiveBufferSizeInKB |
1024 |
Legacy .NET Remoting only: Size of the multicast receive buffer on the client side - make this larger if you are having a lot of events or experiencing packet loss on multicast. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].MulticastSendBufferSizeInKB |
1024 |
Legacy .NET Remoting only: Size of the multicast send buffer on the server side - make this larger if you are having a lot of events. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DataSource[n].MulticastCompressionEnabled |
true |
Legacy .NET Remoting only: Specifies whether the multicast traffic should be compressed or not. |
| Parameter | isRequired | Datatype | Description | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
accessType |
Yes |
enum |
Defines allow or deny rule for the authorization. Can be one of the following values (case insensitive):
NOTE: Deny rules are stronger than Allow rules. We recommend configuring an "allow" rules instead of a "deny" rules. Allow rules grant access only to users in the specified role, while deny rules can sometimes lead to unintended access issues in certain scenarios. | ||||||||||||||||||||||||||||||||||||||||||
role |
no |
string |
Specifies the user group(s) or individual username(s) for the authorization rule. Multiple user groups can be added, in a comma-separated list. The value is not case insensitive Note: If the user group has no associated domain just provide the user group. On windows, usernames require a prefix indicating either computer name or domain name. On Linux, usernames do not require any prefix and can be provided directly. | ||||||||||||||||||||||||||||||||||||||||||
verbs |
No |
string |
Defines the HTTP methods for the authorization rule. Multiple HTTP methods can be added to a comma-separated list. If the value is left blank or not defined, then by default it will apply to all HTTP methods. NOTE: Not yet implemented. It is generally preferable to avoid using deny rules. However, if a deny rule must be enforced, it is recommended considering the use of individual usernames rather than entire user groups to maintain granular access control.
|
| Connection Type | JSON | Binary |
|---|---|---|
| Websocket | ✓ | ✓ |
| HTTP POST (REST) | ✓ | |
| HTTP GET with URL-parameters | ✓ |
All connection types support both secure (https/wss) and unsecure (http/ws) connections, depending on the Vtrin Server Configuration.
WebSocket
WebSocket connections can be done with any standard WebSocket library compliant with RFC 6455. All text frames are expected to contain JSON serialized commands and all binary frames are expected to contain binary serialized commands. The server will reply to JSON serialized commands with JSON, and to binary serialized commands with binary, so it is also possible to mix the JSON and binary serialization within a single connection. As WebSocket is a true full duplex transport, any subscribed values will arrive immediately as soon as the server has sent them.
HTTP
With plain HTTP connectivity, you can only use JSON serialization. Since HTTP connections are not persistent, your session is lost whenever the connection is terminated, unless your application supports cookies. In this case, your session stays alive for an additional 90 seconds, during which you can even reconnect and continue. This naturally has no effect on cases where all the commands you are executing are stateless by their nature. The JSON serialized connections can be sent to the server as a body of a HTTP POST or as URL parameter (execute=...), and the server will then reply with a JSON serialized message. In case there are active subscriptions that the server has new data to be sent, this data will not automatically get to the client. Only if the client makes some other call, the server will bundle the subscribed data together with the actual reply of the call. The body of the POST can either be plain JSON or URL-encoded, in which case the request must have a Content-Type header with the value of "application/x-www-form-urlencoded".
Call Structure
Regardless of the communication and serialization method, the call structure is always the same. In a single message, there can either be a single command or multiple commands combined together. When sending multiple commands to the server in separate messages, the server runs the commands in parallel. When multiple commands are combined into a single message, they are executed sequentially. There are two types of commands: function executes and pushes. Both of these commands start similarly with the client-specified call id, but differ after that. The function executes provide a way to asynchronously execute parametrized commands on the server, while getting a return value back. Pushes provide an efficient way to produce data to the server without getting a return value back. Both pushes and method executes can be combined into the same message. The client can freely select a 64bit (52 bit on JSON) positive value for the call id that is used in the calls, but the client has to make sure that there are never two identical ids existing at the same time. As JavaScript does not support 64bit integers, the value is serialized as double instead, leading to an effective precision of only 52 bits.
A single command is presented as an array. When combining multiple commands into the same message, the single commands are combined as an array, resulting in an array of arrays. Arrays are used instead of name-value collections to maximize the performance, as JSON specification does not guarantee the order of the name-value pairs in the serialization process. This enforces the server to fully deserialize the message before executing it, while arrays are guaranteed to retain their order, making it possible to start the execution of the command immediately.
Function Calls
| Index | Name | Description |
|---|---|---|
| 0 | Call Id | A 64bit (52bit on JSON) call id the client can freely select |
| 1 | Function Name | Name of the function to execute |
| 2 | Parameters | Array of function parameters |
**Pushes **
| Index | Name | Description |
|---|---|---|
| 0 | Call Id | A 64bit (52bit on JSON) push subscription id |
| 1 | Push data | An array containing the pushed data |
**Function Call Reply **
| Index | Name | Description |
|---|---|---|
| 0 | Call Id | Call Id as it was on success, negated on failure |
| 1 | Return Value | Function return value on success, exception message (string) on failure |
Examples
The following examples are in JSON, but the exact same data can be serialized as binary as well. For the full API documentation, please refer to ABB Ability(TM) History View documentation.
Getting Time From Server Call:
[1,"GetServerTimeInUTCFromServer",\[]]Server reply:
[1,"14815255832914531"]List Currently Connected Users Call:
[1,"FetchClassData",\["ServerUser",["UserName"],-1,"ORDER BY UserName"]]Server reply:
[1,{"Data":["COM600-PC\\COM600","COM600-PC\\COM600","COM600-PC\\Demo","COM600-PC\\Ilpo"],"Truncated":false}]Error in Call Parameters Call, which contains "error" in a parameter that should contain an integer value:
[1,"FetchClassData",\["ServerUser",["UserName"],"error"]]Server replies with negated call id (-1 instead of 1) and error message:
[-1,"System.Runtime.Serialization.SerializationException,mscorlib: Invalid string '\"error\"]]' to decode as a Int32 starting from position 47."]Combining Get Server Time and Get Connected Users Together Call:
[\[1,"GetServerTimeInUTCFromServer",\[]],\[2,"FetchClassData",\["ServerUser",["UserName"],-1,"ORDER BY UserName"]]]Server reply:
[[1,"14815267524747434"],\[2,{"Data":["COM600-PC\\COM600","COM600-PC\\COM600","COM600-PC\\Demo","COM600-PC\\Ilpo"],"Truncated":false}]Getting Server Time via URL Parameter Type to URL of your browser:
https://localhost/view/connectionstring.data?execute=[1,"GetServerTimeInUTCFromServer",[]]
Body of the reply from server:
[1,"14815255832914531"]Updated 2 months ago
