Howto:Set up a FGCom server: Difference between revisions

From FlightGear wiki
Jump to navigation Jump to search
(Moved from FGCOM)
 
(Replaced content with '__TOC__ = Install Asterisk = You need a base install of Asterisk, you can either install it via a package manager or via the source code. For easiness (and because I can) I …')
Line 1: Line 1:
For running a [[FGCom]] server you need Asterisk and depending on the amount of users much bandwith and CPU power. Because of puting pilots and [[Air Traffic Control]]lers in a VoIP conference the server-admin has to assure that there is enough network and CPU power to avoid drop-outs of the voice stream.
__TOC__


==Pre-requirements==
= Install Asterisk =
Install Asterisk on top of your favorite distribution. Please refer to installation manuals (e.g. [http://www.asteriskguru.com/ Asterisk-Guru]) that you can find on the net. You do not need H.323 or SIP because the fgcom client uses IAX2 as VoIP signaling protocol. Only if you think about connecting external VoIP applications to FGCom you should consider to activate H.323 or SIP (but this is not the scope of this small howto).
You need a base install of Asterisk, you can either install it via a package manager or via the source code. For easiness (and because I can) I chose to do it via the package manager.
We used CentOS and the instructions for installing it are as follows:


Notice: You need to install the zaptel driver modules - even if you won't use any hardware for telecom interfacing. You need the ztdummy kernel module for the asterisk conference application MeetMe() because it simulates a hardware clock needed by this application. Further development of FGCOM might use app_conference which don't needs any timing device.
= Configuration Files =


For now we want to use /etc/asterisk as the base configuration directory.
There are 3 main configuration files that we need to work with and one file we need to generate and include:


==Setting up the radio frequencies==
=== extensions.conf ===
The radio frequencies are "simple" Conferences and realized due to the Asterisk application MeetMe().


===Part 1: General configuration===
=== iax.conf ===
First you have to set up the general configuration of the system. Put the following at the top of your "extensions.conf" file:


  [general]
=== sip.conf ===
  static=yes
  writeprotect=yes
  ;
  [globals]
  ;
  [macro-com]
  exten => s,1,Answer()
  exten => s,n,MeetMe(${MACRO_EXTEN},qd)
  exten => s,n,Hangup()
  ;
  [macro-echo]
  exten => s,1,Answer()
  exten => s,n,Echo()
  exten => s,n,Hangup()
  ;
  [guest]
  ; ATC-Help
  exten => 01-ZZZZ-911.000,1,Macro(com)
  exten => 012525252591100,1,Dial(Local/01-ZZZZ-911.000)
  exten => 01-ZZZZ-910.000,1,Macro(echo)
  exten => 012525252591000,1,Dial(Local/01-ZZZZ-910.000)
  ;
  [default]
  include => guest
  ;
  ; Code:
  ; 01 - FlightGear
  ; 02 - Microsoft Flight-Simulator
  ; 03 - ...
  ;
  ; Air2Air
  exten => 01-ZZZZ-123.450,1,Macro(com)
  exten => 012525252512345,1,Dial(Local/01-ZZZZ-123.450)
  exten => 01-ZZZZ-122.750,1,Macro(com)
  exten => 012525252512275,1,Dial(Local/01-ZZZZ-122.750)


===Part 2: Adding your favorite (all?) frequencies===
=== fgcom.inc ===
For this you have simply to create an extension for every touple of airport/frequency in extensions.conf. The following is an example for [[Berlin Tempelhof Airport]] (EDDI). The information comes from the file "apt.dat.gz" of your FlightGear installation.
 
  ; EDDI ATIS 126.020 - Berlin Tempelhof
  exten => 01-EDDI-126.020,1,Macro(com)
  exten => 010403030812602,1,Dial(Local/01-EDDI-126.020)
  ;
  ; EDDI BERLIN DEP 120.620 - Berlin Tempelhof
  exten => 01-EDDI-120.620,1,Macro(com)
  exten => 010403030812062,1,Dial(Local/01-EDDI-120.620)
  ;
  ; EDDI BERLIN DIRECTOR 121.120 - Berlin Tempelhof
  exten => 01-EDDI-121.120,1,Macro(com)
  exten => 010403030812112,1,Dial(Local/01-EDDI-121.120)
  ;
  ; EDDI BERLIN ARR 126.420 - Berlin Tempelhof
  exten => 01-EDDI-126.420,1,Macro(com)
  exten => 010403030812642,1,Dial(Local/01-EDDI-126.420)
  ;
  ; EDDI GND 121.950 - Berlin Tempelhof
  exten => 01-EDDI-121.950,1,Macro(com)
  exten => 010403030812195,1,Dial(Local/01-EDDI-121.950)
  ;
  ; EDDI TWR 119.570 - Berlin Tempelhof
  exten => 01-EDDI-119.570,1,Macro(com)
  exten => 010403030811957,1,Dial(Local/01-EDDI-119.570)
  ;
  ; EDDI BERLIN DIRECTOR 136.100 - Berlin Tempelhof
  exten => 01-EDDI-136.100,1,Macro(com)
  exten => 010403030813610,1,Dial(Local/01-EDDI-136.100)
  ;
  ; EDDI TWR 118.100 - Berlin Tempelhof
  exten => 01-EDDI-118.100,1,Macro(com)
  exten => 010403030811810,1,Dial(Local/01-EDDI-118.100)
  ;
  ; EDDI BERLIN DEP 119.500 - Berlin Tempelhof
  exten => 01-EDDI-119.500,1,Macro(com)
  exten => 010403030811950,1,Dial(Local/01-EDDI-119.500)
  ;
  ; EDDI BERLIN ARR 119.620 - Berlin Tempelhof
  exten => 01-EDDI-119.620,1,Macro(com)
  exten => 010403030811962,1,Dial(Local/01-EDDI-119.620)
 
What does the above mean? There are two lines (three with the comment) for each frequency: The first one sets up an extension named "01-EDDI-119.500". Yes, for VoIP you can use textual extensions but be careful if you want to setup your Asterisk-Server with POTS (=Plain old telephone service). Therefor you need the second line which is the same as above but without dashes and the letters in the decimal representation of the ASCII Code. The second line does only a "rewrite" of the numerical representation to the textual one.
 
For setting up all airports you can write your own simple script. But this maybe also not needed in further versions of FGCOM.
 
After editing the extensions.conf file you have to reload the extensions file (e.g. "asterisk -rx extensions reload").
 
You can add further nice goodies to your extensions.conf: MorseCode() for morsing the code of the VOR (MorseCode() will only work in Asterisk >= 1.4), Recording of metar data and playing this recording back when using the frequency of the metar information, ...
==Setting up user accounts==
The user accounts are located in the file iax.conf (and perhaps also in sip.conf, but this is not necessary). The top of the file should look like this:
 
  [general]
  bandwith=low
  disallow=lpc10
  jitterbuffer=yes
  forcejitterbuffer=no
  tos=lowdelay
  autokill=yes
  disallow=all
  allow=alaw
  allow=gsm
  allow=ilbc
  allow=g726
  allow=ulaw
  language=en
  maxauthreq=10
  context=guest
  ;
  [guest]
  type=user
  username=guest
  context=guest
  qualify=yes
  callerid=Guest IAX User
  host=dynamic
  ;
 
You may want to disallow more codecs or want to allow additional codecs (such as speex). But have in mind that the internal mixing of the conferences are done in "ulaw". But "ulaw" needs about 80 kBit/s because it does no compression. So you have to think about what's better for you: less bandwidth (per user) and more CPU usage or  more bandwidth (per user) and less CPU usage... you should also consider the "sound" of some codecs may not have the 'real radio sound'.
 
For each user you have to add a bunch of lines to your iax.conf file:
 
  [<USERNAME>]
  type=user
  username=<USERNAME>
  secret=<PASSWORD>
  context=default
  host=dynamic
  nat=yes
  notransfer=yes
 
You just have to fill in the <USERNAME> and <PASSWORD>. After each change you have to reload the configuration (e.g. "asterisk -rx reload chan_iax2.so"). Perhaps you want to write scripts for automatic configuration and so on. But be warned: Further versions of fgcom may use the multiplayer servers for getting usernames and position data and you have to change your scripts.
 
==Problems?==
If you have problems you can contact me via email at "dcoredump AT gmail.com".

Revision as of 22:56, 5 October 2010

Install Asterisk

You need a base install of Asterisk, you can either install it via a package manager or via the source code. For easiness (and because I can) I chose to do it via the package manager. We used CentOS and the instructions for installing it are as follows:

Configuration Files

There are 3 main configuration files that we need to work with and one file we need to generate and include:

extensions.conf

iax.conf

sip.conf

fgcom.inc