Hi fellow wiki editors!

To help newly registered users get more familiar with the wiki (and maybe older users too) there is now a {{Welcome to the wiki}} template. Have a look at it and feel free to add it to new users discussion pages (and perhaps your own).

I have tried to keep the template short, but meaningful. /Johan G


From FlightGear wiki
Revision as of 14:44, 10 November 2016 by T3r (Talk | contribs) (TerraSync algorithm)

Jump to: navigation, search


Torsten created a branch topics/mpdiscovery-via-dns with a first implementation - just in case somebody might want to have a look. It does contain full lookup of a server list by checking the SRV records and each server's properties via TXT records with name=value text and value being a b64 encoded JSON string. It does not /yet/ contain a "is-online" check.[1]

The latter being considered to be implemented using UDP ‘ping’, i.e. because we can include some interesting info in it.[2]

Usage of DNS within FlightGear

The Domain Name System (DNS) is being used within FlightGear to look up resources providing several services. Its use started with release 2016.2.1 as an experimental feature to resolve the location of the TerraSync servers. This page documents the used services in detail[3].

Its creation was inspired by a discussion that took place on the FlightGear devel mailing list in 11/2016 to stop using a dedicated web service for retrieving a list of active multiplayer servers and instead use DNS [4].

FlightGear systems using DNS

Currently, (as of version 2016.4.0) these systems use DNS for service discovery:


The TerraSync client queries NAPTR record This is a link to a Wikipedia articles for the DNS name terrasync.flightgear.org. As of version 2016.4, the configured entries are:

At system start, FlightGear sends a query for the DNS name terrasync.flightgear.org. The URL for scenery download is encoded in the regex field between the last two exclamation marks. This string MUST start with !^.*$! and must end with !, the regex itself is not interpreted by the TerraSync client, only the fixed string is taken. The DNS to query is currently not configurable at system start by setting a property. The version number can be changed by setting property /sim/terrasync/scenery-version to a value other than the default "ws20".

Algorithm to pick a Server

  • At startup, if TerraSync is enabled and if the property /sim/terrasync/http-server is set to "automatic" (the default), a DNS query for terrasync.flightgear.org is sent and the response filtered for entries with the flag field set to "U".
  • All entries that have a "order" value higher than the lowest order are discarded. (currently the sourceforge entry)
  • The remaining entries are filtered for those with the lowest preference. (both other entries survive this filter)
  • a random entry from the remaining list is picked for the entire session of FlightGear.

This is implemented in SGTerraSync::WorkerThread::run() here.

The property /sim/terrasync/http-server can be set to user defined URL pointing to the location of a custom TerraSync server e.g. http://myterrasync.org/custom-scenery. This will disable the above algorithm.


The multiplayer client queries SRV record This is a link to a Wikipedia articles for a list of multiplayer servers and TXT record This is a link to a Wikipedia articles on each server for detailed information about the server.

The SRV record for a multiplayer server looks like this: _fgms._udp IN SRV 10 20 5001 mpserver01 All entries currently use the same values for priority and weight. The port numbers for active servers are set to the port number of the running fgms instance. The port number is zero for inactive servers.

The TXT record for each referenced multiplayer server looks like this:

mpserver01 IN TXT "flightgear-mpserver=eyJuYW1lIjoibXBzZXJ2ZXIwMSIsImxvY2F0aW9uIjoiRnJhbmtmdXJ0LEdlcm1hbnkifQo="

with the text data used as in RFC 1464 - Using the Domain Name System To Store Arbitrary String Attributes. The attribute name flightgear-mpserver marks this entry as "ours" while it's attribute value is a base64 encoded json string containing additional attributes for the server not available within the SRV record. For the given example, the base64 string of


decodes to