This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
The Macintosh shell package and the FreeBSD shell package on sourceforge have the complete
NCID system.
There are many Linux distributions based on Redhat or Ubuntu so the Fedora or Ubuntu packages
may install just fine. (For example, Linux Mint is an operating system based on Ubuntu.) Refer to
the INSTALL-"operating system" section for your "operating system".
If you cannot locate a package, you can download the source, compile and install it. Refer to the
INSTALL (generic) section of this documentation.
Configure the ncidd server
Now that you have installed NCID, you need to set the country code to format the telephone
number and configure the method used to obtain Caller ID:
set the country code to format the telephone number
a Caller ID modem connected to a Unix computer
the serial NetCallerID device connected to a Unix computer
the CTI Comet USB device via the NCID XDMF gateway
the Holtek HT9032D based PSTN Caller ID module via the NCID XDMF gateway
a Caller ID modem on a Windows computer via the NCID YAC (Yet Another Caller ID)
gateway
VoIP (Voice over Internet Protocol) phones via the NCID SIP (Session Initiation Protocol)
gateway
Whozz Calling (WC) Ethernet Link network device via the NCID WC gateway
an Android smartphone via the NCID Remote Notifier (RN) gateway
Set the country code to format the telephone number
You need to set the country code for your country from the country code list. Edit ncid.conf
and uncomment one of the following lines. No need to uncomment the default but you need to
replace <CountryCode> with your country code:
# set country = "US" # Default: country is United States # set country = "ZZ" # No country code for country # set country = "<CountryCode>" # use your country code
Using a modem connected to a Unix computer
Most modern modems support Caller ID but to determine if yours does follow the steps below
and then refer to Modem Caller ID Test.
The server needs to know which port the modem is on. The default port is different depending
on the Operating System:
Unknown Operating System distribution: /dev/modem Fedora, Redhat, Debian, Raspbian, Ubuntu: /dev/ttyACM0 FreeBSD: /dev/cuaU0 Mac OS X: /dev/cu.usbmodem24680241 Cygwin: /dev/com1
If the default modem port is incorrect, you need to enter the correct port by editing
ncidd.conf and either uncomment one of these lines, or add a line with the correct port:
# set ttyport = /dev/cu.modem # default Mac OS X internal modem # set ttyport = /dev/cu.usbmodem24680241 # Mac OS X USB modem # set ttyport = /dev/ttyS0 # Linux Serial Port 0 # set ttyport = /dev/ttyACM0 # Linux USB modem 0
If you wish to use the internal hangup feature, you need to uncomment one of these lines if
not using the default:
# set hangup = 0 # Default: do not terminate a call # set hangup = 1 # terminate the call # set hangup = 2 # generate FAX tones, then terminate the call # set hangup = 3 # play an announcement then terminate the call
If you wish to use the external hangup feature, you need to uncomment one of these lines if
not using the default:
# hupmode = 0 # Default: do not execute the hangup extension # hupmode = 1 # terminate the call # hupmode = 2 # generate FAX tones, then terminate the call # hupmode = 3 # play an announcement then terminate the call
After modifying ncidd.conf, start ncidd. If ncidd is already running, it must be restarted.
Using a serial NetCallerID device connected to a Unix computer
The serial NetCallerID (on the Wayback Machine) device is no longer manufactured by
Ugotcall, but you can sometimes find it on eBay.
Even though it supports Caller ID, the NetCallerID device is not a modem and it does not
support the NCID hangup feature. Start by hooking it up to a serial port and making the
changes above. Once that is completed, make these additional changes to ncidd.conf:
Uncomment this line:
# set cidinput = 1
Leave all hangup and hupmode set lines commented, for example:
# set hangup = 1
After modifying ncidd.conf, start ncidd. If ncidd is already running, it must be restarted.
Using the XDMF gateway
You would use the xdmf2ncid gateway if you are using the CTI Comet USB device or the Holtek
HT9032D based PSTN Caller ID module connected to a Linux based machine.
We have a complete section devoted to the XDMF gateway. See xdmf2ncid setup in the
Gateways topic for more information.
Using a Caller ID modem on a Windows computer via the NCID YAC gateway
You would use the YAC gateway if you are using a YAC server on a Windows computer running
-I indicates install -n indicates that the service never exits by itself (I don't recall why this has to be set, but it doesn't work otherwise) -p /usr/local/bin/ncidd: Application path which is run as a service. -f "Network CallerID daemon (ncidd)": Optional string which contains the service description (the desc you see in the Services listing) -a -D: passes the parameter "-D" to the ncidd program so it runs in debug mode. This keeps ncidd running in the "foreground" of the cygrunsrv process.
Likewise, to remove the ncidd service:
cygrunsrv -R ncidd
To install sip2ncid to run in the background, the command line is similar:
Explaining these parameters:
cygrunsrv -I sip2ncid -n -p /usr/local/bin/sip2ncid -y ncidd \ -a '-i "/Device/NPF_{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" \ -D' -f "Service picks network SIP packets and sends to ncidd" \ --termsig KILL
-I indicates install -n indicates that the service never exits by itself (I don't recall why this has to be set, but it doesn't work otherwise) -p /usr/local/bin/sip2ncid: Application path which is run as a service. -y ncidd: adds a service dependency with the ncidd service so that the ncidd service gets started automatically when you start sip2ncid -a '-i "/Device/NPF_{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" -D': note the single and double quotes in this section. You need to replace XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX in the above with NETWORK_INTERFACE from way above. To be clear, you want to replace /Device/NPF_{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} with NETWORK_INTERFACE from way above. -f "Service to pick SIP packets from network and send to ncidd": Optional string which contains the service description (the desc you see in the Services listing) --termsig KILL: termination signal to send. If you don't include this the service doesn't always get stopped.
Likewise, to remove the sip2ncid service:
cygrunsrv -R sip2ncid
To install ncid-notify to run in the background, the command
line is similar: cygrunsrv -I ncid-notify -p /bin/sh.exe -a \ '-c "/usr/local/bin/ncid --no-gui --module ncid-notify"' \ -f "Service to use notify service to send ncid messages to iPad"
Explaining these parameters:
-I indicates install -p /bin/sh.exe: Application path to run, which in this case is just sh.exe because ncid-notify is a shell script -a '-c "/usr/local/bin/ncid --no-gui --module ncid-notify"' these are the parameters that get sent to sh.exe: -c "/usr/local/bin/ncid: this is the path to the ncid script
--no-gui: tells ncid not to run as gui --module ncid-notify: tells ncid to pass data to "ncid-notify" -f "Service to use notify service to send ncid messages to iPad": Optional string which contains the service description (the desc you see in the Services listing) -y ncidd: you COULD also add this line to add a service dependency with the ncidd service so that the ncidd service gets started automatically when you start ncid-notify. I don't do this, because strictly speaking, you could be running ncidd on a different computer
Likewise, to remove the ncid-notify service:
cygrunsrv -R ncid-notify
DEB Package Install for Debian, Raspbian and Ubuntu
May be valid for other DEB Operating Systems
If NCID does not work, see INSTALL for some simple tests.
If you're using a gateway, review the appropriate section in Gateways.
Table of Contents
Sections:
COMPILE/INSTALL from Source:
INSTALL/UPGRADE from DEB Package:
CONFIGURE:
FIRST STARTUP:
START/STOP/RESTART/RELOAD/STATUS:
AUTOSTART:
LIST PACKAGE FILES:
PACKAGE REMOVAL:
KNOWN ISSUE - MODEMMANAGER MAY HANG NCID AT BOOT TIME:
COMPILE/INSTALL from Source:
It's very important to update the latest package info before continuing. Don't skip these
two steps! (NOTE: The apt command is preferred over apt-get and apt-cache.)
sudo apt update sudo apt upgrade
If any packages were listed as "kept back" and "not upgraded", do:
Method 2: Install or Upgrade the packages using gdebi-gtk (GUI):
If needed, use the menu item "Add/Remove..." to install the GDebi Package
Installer.
Using the file viewer: - Open the file viewer to view the NCID DEB packages - Select the DEB packages - Double-click selections or right-click selections and select
"Open with GDebi Package installer"
Method 3: Install or Upgrade the packages using gdebi (command line):
Install gdebi if needed:
sudo apt install gdebi
Install the server (required):
sudo gdebi ncid-<version>-1_<arch>.deb
Install the client (optional; includes most of the output modules):
sudo gdebi ncid-client-<version>-1_all.deb
Install any additional modules (optional):
sudo gdebi ncid-<module>-<version>-1_all.deb
Install any gateways (optional):
sudo gdebi ncid-gateways_<version>-1_<arch>.deb
Method 4: Install or Upgrade the packages using dpkg (command line):
Install the server (required):
sudo dpkg -i ncid-<version>_<arch>.deb
Install the client (optional; includes most of the output modules):
sudo dpkg -i ncid-client-<version>-1_all.deb
Install any additional modules (optional):
sudo dpkg -i ncid-<module>-<version>-1_all.deb
Install any gateways (optional):
sudo dpkg -i ncid-gateways_<version>-1_<arch>.deb
Force install of all dependencies:
sudo apt-get install -f
CONFIGURE:
The ncidd.conf file is used to configure ncidd.
The default modem port in ncidd is /dev/ttyACM0. If you need to change it, set your
modem port in ncidd.conf. This assumes serial port 0:
set ttyport = /dev/ttyS0
If you are using a Gateway to get the Caller ID instead of a local modem, you need to set
cidinput:
set cidinput = 2 # Caller ID from a gateway with modem support set cidinput = 3 # Caller ID from gateways without modem support
If you are using a local modem with or without a Gateway:
set cidinput = 0 (this is the default)
FIRST STARTUP:
If you are running the server and client on the same computer and using a modem:
sudo systemctl start ncidd ncid &
If you are running the server and using a gateway:
sudo systemctl start ncidd <name of gateway> ncid &
Call yourself and see if it works, if not:
stop the server and gateway:
sudo systemctl stop mcid wc2ncid
and continue reading the test sections.
If everything is OK, enable the NCID server, gateways and client modules you are using to
autostart at boot. There are rc.init scripts for starting ncid with output modules, for
example: ncid-page, ncid-kpopup, etc.
NOTE:
The ncid GUI client must be started after login, not boot. There is no ncid.init script to start or
stop it.
START/STOP/RESTART/RELOAD/STATUS:
Use the systemctl command to control any of the daemons. The systemctl commands are: start,
stop, restart, reload and status. The client using an output module can also be started using the
ncid-<module> instead of ncid. All output modules can be run at the same time.
Here are some examples:
Start the NCID server:
sudo systemctl start ncidd
Stop the sip2ncid server:
sudo systemctl stop sip2ncid
Restart the sip2ncid server:
sudo systemctl restart sip2ncid
Reload the server alias file:
sudo systemctl reload ncidd
Start ncid with ncid-page:
sudo systemctl start ncid-page
Status of ncid with ncid-speak:
sudo systemctl status ncid-speak
Review the man page: man systemctl
AUTOSTART:
Use the systemctl command to enable/disable the service at boot.
Here are some examples:
Start ncidd at boot:
sudo systemctl enable ncidd
Start ncid-page at boot:
sudo systemctl enable ncid-page
Disable ncidd startup at boot:
sudo systemctl disable ncidd
Review the man page: man systemctl
See also this section about a known issue where ModemManager may hang NCID at boot time.
LIST PACKAGE FILES:
To see all the files the package installed onto your system:
dpkg-query -L <package_name>
To see the files a .deb file will install
dpkg-deb -c <package_name.deb>
To work directly with package names rather than package files, you can use apt-file.
It lists contents for packages in your already-configured Apt repositories.
It is irrelevant whether any particular package is or is not installed.
You may need to install the apt-file package first:
sudo apt-file update apt-file list package_name
After installing apt-file:
apt-file list <package_name>
PACKAGE REMOVAL:
Use apt to remove any NCID package installed.
For example, to use apt to remove the ncid package:
Normal removal without removing configuration files and dependencies:
sudo apt remove ncid
Complete removal including configuration files:
sudo apt purge ncid
Remove ncid dependencies no longer needed:
sudo apt autoremove
Review the man page: man apt
KNOWN ISSUE - MODEMMANAGER MAY HANG NCID AT BOOT TIME:
Configurations known to have the issue:
You are running Ubuntu 14.xx or later with the ModemManager installed and running.
You are running Debian 9.xx or later and the ModemManager is not installed and/or is not
running.
You are running Ubuntu Mate on an Raspberry Pi model 3.
You are running Raspbian Jessie on an Raspberry Pi model 3.
It is a hardware modem mounted internally on a PCI card.
It is a USB modem.
Symptoms:
The NCID server is not sending caller ID to clients on your network.
Clients are unable to connect to the NCID server.
The NCID server log /var/log/ncidd.log indicates modem initialization did not complete and
appears to be hung. This also prevents other processes after it from starting until the NCID
server is killed.
You may see very strange modem responses in the NCID server log.
The NCID server problem is fixed by manually restarting it after the Operating System
boots.
The NCID server problem is fixed by manually unplugging and re-plugging in the USB
modem.
Solution: If the ModemManager is installed
The ModemManager is searching for a mobile broadband (2G/3G/4G) capable devices, by
querying various Serial and USB connected devices at boot time, by sending "AT+GCAP" (the
AT command for a modem to "Request Complete Capabilities List"). This can collide in terms of
the devices initialization timing, with the NCID server and the XDMF to NCID gateway.
The solution is to create the udev rules that will exclude from probing, devices used by the
NCID server and XDMF to NCID gateway.
Check out /usr/share/doc/ncid/README-udev for details.
Disabling the ModemManager should be used as a last resort, if for some reason the method of
Using the file viewer: - Open the file viewer to view the NCID RPM packages - Select the RPM packages - Right click selections and select "Open with Package installer"
Using dnf:
sudo dnf install ncid\*.rpm
CONFIGURE:
The ncidd.conf file is used to configure ncidd.
The default modem port in ncidd is /dev/ACM0. If you need to change it, set your modem
port in ncidd.conf. This assumes serial port 0:
set ttyport = /dev/ttyS0
If you are using a Gateway to get the Caller ID instead of a local modem, you need to set
cidinput:
set cidinput = 2 # Caller ID from a serial or USB device and optional gateways set cidinput = 3 # Caller ID from gateways without modem support
If you are using a local modem with or without a Gateway:
set cidinput = 0 (this is the default)
FIRST STARTUP:
If you are running the server and client on the same computer and using a modem:
sudo systemctl start ncidd ncid &
If you are running the server and using a gateway:
sudo systemctl start ncidd <name of gateway> ncid &
Call yourself and see if it works, if not,
stop the gateway and server:
sudo systemctl stop <name of gateway> ncidd
and continue reading the test sections.
If everything is OK, enable the NCID server, gateways and client modules you are using to
autostart at boot.
For example, to start ncidd and sip2ncid at boot:
sudo systemctl enable ncidd sip2ncid
The GUI ncid client must be started after login, not boot.
NOTE:
The ncid client normally starts in the GUI mode and there is no ncid.service script to start
or stop it. There are service scripts for starting ncid with output modules, for example:
ncid-page, ncid-kpopup, etc.
START/STOP/RESTART/RELOAD/STATUS:
Use the 'systemctl' command to control any of the daemons. The service commands are: start,
stop, restart, reload, reload-or-restart and status. The client can also be started using the output
module name instead of ncid. All output modules can be run at the same time.
Here are some examples:
Start the NCID server:
sudo systemctl start ncidd.service
Stop the sip2ncid server:
sudo systemctl stop sip2ncid.service
Reload the server alias file:
sudo systemctl reload-or-restart ncidd.service
Restart ncid using ncid-page:
sudo systemctl start ncid-page.service
Get the status of ncid using ncid-speak:
sudo systemctl status ncid-speak.service
Review the man page: man systemctl
AUTOSTART:
Use the 'systemctl' command to enable/disable a service to start at boot.
Here are some examples:
Autostart ncidd at boot:
sudo systemctl enable ncidd
Autostart ncidd and sip2ncid at boot:
sudo systemctl enable ncidd sip2ncid
Disable ncid-speak from starting at boot:
sudo systemctl disable ncid-speak
Review the man page: man systemctl
FreeBSD Install
If NCID does not work, see INSTALL for some simple tests.
If you're using a gateway, review the appropriate section in Gateways.
Table of Contents
Sections:
COMPILE:
INSTALL:
CONFIGURE:
STARTUP:
START/STOP/STATUS:
AUTOSTART:
TRIMMING LOG FILES:
GMAKE NOTE:
COMPILE:
See INSTALL.
INSTALL:
The NCID package installs in /usr/local.
Requirements
All packages can be installed from repositories or compiled from ports. Instructions assume the
user root and use pkg to install from repositories. If the sudo command is installed, replace pkg
with sudo pkg.
update the repository data and upgrade:
pkg update
pkg upgrade
Install sudo. The user needs to be in group wheel. A line in /usr/local/etc/sudoers needs to
be uncommented to allow users in group wheel to run as root.
pkg install sudo
The NCID Makefile requires gmake and bash. To obtain the Makefile usage: gmake
pkg install bash gmake
X-windows and Gnome (NCID default GUI environment)
pkg install xorg urwfonts gnome3
add to /etc/rc.conf
dbus_enable="YES"
hald_enable="YES"
gdm_enable="YES"
gnome_enable="YES"
add to /etc/fstab (required by Gnome)
proc /proc procfs rw 0 0
Compile ncid
pkg install libpcap pcre libphonenumber gmake gcc
install Perl config-simple and Data-HexDump
sudo pkg install p5-config-simple p5-Data-HexDump
install tk8.7 (tcl/tk version must be >= 8.6; pkg tk also installs tcl)
sudo pkg install tk87
make sure ncid calls tcl?.? or wish?.?
For example: tclsh8.7 and wish8.7 otherwise modify the TCLSH and WISH variables in
ncid
install logrotate
pkg install logrotate
install the vim editor (or another editor of your choice)
pkg install vim
Install or upgrade using the install script as root, if available:
GNU getopt is required when using the install script. See this note.
For an upgrade, the install script will preserve existing configurations and new ones installed
will have *.new as the extension.
Copy ncid-VERSION-freebsd_install.sh to the FreeBSD computer sh ncid-VERSION-freebsd_install.sh
Example:
sh ncid-1.10-freebsd_install.sh
You will need to manually compare your current configuration files with the *.new ones and
manually edit any differences.
If there is no binary package, you need to compile the source.
Gmake is required when compiling the source. See this note.
Your existing configuration files will be preserved and new ones installed will have *.new as the
extension.
Copy ncid-VERSION-src.tar.gz to the FreeBSD computer tar -xzvf ncid-VERSION-src.tar.gz gmake freebsd (compiles for /usr/local, see top of Makefile) gmake freebsd-install
CONFIGURE:
The ncidd.conf file is used to configure ncidd.
The default modem port in ncidd is a USB modem at /dev/cuaU0. There may also be
/dev/ttyACM0 in addition to /dev/cuaU0.
You should set the modem in ncidd.conf, if you need to change it. Use one of cuaa0,
cuaa2, cuaa3, cuaa4 in /dev which corresponds to COM1, COM2, COM3, COM4
If you are using COM1 then you would add this line to ncidd.conf:
set ttyport = /dev/cuaa0
If you are using a gateway instead of a local modem, you need to set cidinput:
set cidinput = 2 # Caller ID from a gateway with modem support set cidinput = 3 # Caller ID from gateways without modem support
If you are using a local modem with or without a gateway:
set cidinput = 0 (this is the default)
STARTUP:
If you are running the server and client on the same computer and using a modem:
/usr/local/etc/rc.d/ncidd onestart ncid &
If you are running the server and using a gateway:
/usr/local/etc/rc.d/rc.d/ncidd onestart /usr/local/etc/rc.d/rc.d/<name of gateway> onestart ncid &
Call yourself and see if it works, if not:
stop the gateway used:
/usr/local/etc/rc.d/rc.d/<name of gateway> onestop
stop the server:
/usr/local/etc/rc.d/rc.d/ncidd onestop
and continue reading the test sections.
If everything is OK, enable the NCID server, gateways and client modules you are using to
autostart at boot.
NOTE:
The ncid client normally starts in the GUI mode and there is no ncid.rc script to start or
stop it.
There are rc.d scripts for starting ncid with output modules, for example: ncid-page,
ncid-kpopup, etc.
START/STOP/STATUS:
The /usr/local/etc/rc.d/ncid* scripts to control any of the daemons. The rc.d commands are:
start, stop, restart, reload and status. The client can also be started using the output
module name instead of ncid. All output modules can be run at the same time.
Using the file viewer: - Open the file viewer to view the NCID RPM packages - Select the RPM packages - Right click selections and select "Open with Package installer"
Using dnf:
sudo dnf install ncid\*.rpm
CONFIGURE:
The ncidd.conf file is used to configure ncidd.
The default modem port in ncidd is /dev/ACM0. If you need to change it, set your modem
port in ncidd.conf. This assumes serial port 0:
set ttyport = /dev/ttyS0
If you are using a Gateway to get the Caller ID instead of a local modem, you need to set
cidinput:
set cidinput = 2 # Caller ID from a serial or USB device and optional gateways set cidinput = 3 # Caller ID from gateways without modem support
If you are using a local modem with or without a Gateway:
set cidinput = 0 (this is the default)
FIRST STARTUP:
If you are running the server and client on the same computer and using a modem:
sudo service ncidd start
ncid &
If you are running the server and using a gateway:
sudo service ncidd start sudo service <name of gateway> start ncid &
Call yourself and see if it works, if not,
stop the gateway used:
sudo service <name of gateway> stop
stop the server:
sudo service ncidd stop
and continue reading the test sections.
If everything is OK, enable the NCID server, gateways and client modules you are using, to
autostart at boot.
The GUI ncid client must be started after login, not boot.
NOTE:
The ncid client normally starts in the GUI mode and there is no ncid.init script to start or
stop it. There are rc.init scripts for starting ncid with output modules, for example: ncid-
page, ncid-kpopup, etc.
START/STOP/RESTART/RELOAD/STATUS:
Use the 'service' command to control any of the daemons. The service commands are: start, stop,
restart, reload and status. The client can also be started using the output module name instead of
ncid. All output modules can be run at the same time.
Here are some examples:
Start the NCID server:
sudo service ncidd start
Stop the sip2ncid server:
sudo service sip2ncid stop
Reload the server alias file:
sudo service ncidd reload
Restart ncid using ncid-page:
sudo service ncid-page start
Get the status of ncid using ncid-speak:
sudo service ncid-speak status
Review the man page: man service
AUTOSTART:
Use the 'chkconfig' command to turn the service on/off for starting at boot.
Here are some examples:
Autostart ncidd at boot:
sudo chkconfig ncidd on
Autostart ncid-page at boot:
sudo chkconfig ncid-page on
Autostart ncid-kpopup at boot:
sudo chkconfig ncid-kpopup on
List runlevels for sip2ncid:
sudo chkconfig --list sip2ncid
Disable ncid-speak from starting at boot:
sudo chkconfig ncid-speak off
Review the manpage: man chkconfig
Windows Install
Install either the Windows client package or the complete package.
Table of Contents
Sections:
WINDOWS CLIENT-ONLY INSTALL (NCID version 1.7 and newer):
Requirements
Typical Install
Minimal Install
Upgrade
Autostart at Login
Specifying command-line arguments and options
WINDOWS CLIENT-ONLY INSTALL (NCID version 1.6 and older):
Requirements
Install ncid.exe
WINDOWS CYGWIN COMPLETE INSTALL:
WINDOWS 10 COMPLETE INSTALL:
WINDOWS CLIENT-ONLY INSTALL (NCID version 1.7 and newer):
Requirements
Windows client version 1.7 and newer
NCID server
ActiveTcl-8.6.9 and newer
Go to the ActiveTcl download page
Scroll down to DOWNLOAD TCL: OTHER PLATFORMS AND VERSIONS.
Click on the latest version of the Windows-Installer (EXE) to begin downloading.
Run the installer downloaded:
ActiveTcl?.?.?.?.?-MSWin32-64-x64-?.exe
Accept all defaults. It is safe to ignore the two warnings highlighted in yellow that
begin with the phrase, "For a personal installation we assume...."
Typical Install
Download "ncid-VERSION-client_windows_setup.exe" from SourceForge.
Run the installer:
Decide if you want a desktop link (default).
Decide if you want a startup link (optional; can be added manually after installation).
Accept defaults for all other prompts until you get to the server address.
Change the server address if different from the default shown.
Processed config file: /etc/ncid/ncidd.conf Verbose level: 3 Configured to send 'cidlog' to clients. Configured to send 'cidinfo' to clients. Processed alias file: /etc/ncid/ncidd.alias Leading 1 from a call required in an alias definition CID logfile: /var/log/cidcall.log CID logfile maximum size: 110000 bytes Data logfile: /var/log/ciddata.log Telephone Line Identifier: - TTY port opened: /dev/ttyACM0 TTY port speed: 19200 TTY lock file: /var/lock/lockdev/LCK..ttyACM0 TTY port control signals enabled Caller ID from a modem and optional gateways Handles modem calls without Caller ID Sent Modem 20 of 20 characters: AT Z S0=0 E1 V1 Q0 Modem response: 26 characters in 1 read: AT Z S0=0 E1 V1 Q0 OK Try 1 to init modem: return = 0. Modem initialized. Sent Modem 11 of 11 characters: AT+VCID=1 Modem response: 17 characters in 1 read: AT+VCID=1 OK Modem set for CallerID. Network Port: 3333 Debug Mode Not using PID file, there was no '-P' option. Modem is fd 4
If you did start a client, you will get a line something like:
Client 6 from 127.0.0.1 connected, sent call log: /var/log/cidcall.log
Next, call yourself and you should see something like:
RING CIDINFO: *LINE*VOIP*RING*1*TIME*21:49:49* DATE = 0504 TIME = 2149 NMBR = 4075551212 NAME = Chmielewski Joh CID: *DATE*05042011*TIME*2149*LINE*VOIP*NMBR*4075551212*MESG*NONE*NAME*John* RING CIDINFO: *LINE*VOIP*RING*2*TIME*21:49:55*
Hang up the phone and a second or two later you should see:
CIDINFO: *LINE*VOIP*RING*0*TIME*21:50:02*
Do a <CTRL-C> to break out and end the test:
^CReceived Signal 2: Interrupt Terminated: 05/04/2011 21:53:30
If your modem does not support CID, ncidd will generate a CID line on ring 2 to indicate "No Caller
ID" by setting the number to "RING" and the name to "No Caller ID". You will get something like:
RING CIDINFO: *LINE*VOIP*RING*1*TIME*21:53:02* RING CIDINFO: *LINE*VOIP*RING*2*TIME*21:53:08* CID: *DATE*05042011*TIME*2153*LINE*VOIP*NMBR*RING*MESG*NONE*NAME*No Caller ID* RING CIDINFO: *LINE*VOIP*RING*3*TIME*21:53:14*
If ncidd is configured to not generate a CID line for "No Caller ID" (ncidd.conf has gencid=0), you
will get something like:
RING CIDINFO: *LINE*VOIP*RING*1*TIME*21:53:02* RING CIDINFO: *LINE*VOIP*RING*2*TIME*21:53:08* RING CIDINFO: *LINE*VOIP*RING*3*TIME*21:53:14*
Hang up the phone and a second or two later you should see:
CIDINFO: *LINE*VOIP*RING*0*TIME*21:53:21*
Do a <CTRL-C> to break out and end the test:
^CReceived Signal 2: Interrupt Terminated: 05/04/2011 21:53:30
Modem Commands that configure Caller ID
AT#CID=1
Enables Caller ID in USR, Texas Instruments, Rockwell compatible modems (excluding software
modems and Rockwell HCF), Hayes, several Pace modems, PowerBit, GVC, PCTel, IDC (VR
series) devices, Diamond Supra (Rockwell compatible).
AT+VCID=1
or
AT+FCLASS=8;+VCID=1
Enables Caller ID in all IS-101 modems, Lucent LT, Rockwell HCF (V.90 or K56FLEX, e.g. PCI
modems from Creative), some Pace modems (IS-101 compatible), Multitude, IDC, Cirrus Logic,
most IDC modems.
AT#CLS=8#CID=1
Enables Caller ID in voice mode on some 56K USR modems, some Rockwell compatible (Boca
Research, Cardinal, voice Zoom).
AT#CC1
Enables Caller ID on older non-voice Aspen modems, older Cirrus Logic, Motorola Voice Surfer,
Phoebe.
AT*ID1
Enables Caller ID on some Motorola modems.
AT%CCID=1
or
AT%CCID=3
Enables Caller ID on Practical Peripherals modems.
AT$JSCID=4,1
or
AT$JSCD=1,0
Enables Caller ID on ELSA ML 56k Internet II (Netherlands) modems.
AT#CID=1
or
AT+VCID=1
Enables Caller ID on most modems not listed above.
AT+FCLASS=8
or
AT+FCLASS=8;+VCID=1
or
AT-STE=1;+VCID=1
Generic commands to select Active Service Class (Voice Mode) on most voice modems.
AT+VRID=0
The other AT commands above enable Caller ID during an incoming call. This command reports
the most recently received Caller ID after a call has completed. It can sometimes be useful in
testing.
Modem Country Codes
U.S. Robotics Country Codes
This extended syntax command selects and indicates the country of operation for the modem. It
determines the settings for any operational parameters that need to be adjusted for national
Country Code Country Code Country Code Austria 0A Iceland 52 Poland 8A Belgium 0F Ireland 57 Portugal 8B Cyprus 2D Israel 58 Spain A0 Czech Republic 2E Italy 59 Slovakia FB Denmark 31 Latvia F8 Slovenia FC Estonia F9 Liechtenstein 68 Sweden A5 Finland 3C Lithuania F7 Switzerland A6 France 3D Luxembourg 69 TBR-21(Default) F6 Germany 42 Malta B4 Turkey AE Greece 46 Netherlands 7B United Kingdom B4 Hungary 51 Norway 82 United States B5
The factory default is F6 indicating TBR-21.
TBR-21 is a European telecommunications standard to which all telephone equipment must
adhere to, to be allowed connection to Europe's public switched telephone network. It is the
default even for U.S. Robotics modems sold in the United States.
Command to report current country code value
+GCI?
COMMAND RESPONSE:
+GCI: CountryCode
RESPONSE EXAMPLE FOR FRANCE:
+GCI: 3D
Command to report all supported country code values
+GCI=?
COMMAND RESPONSE:
+GCI: (CountryCode[,CountryCode][,CountryCode])
RESPONSE EXAMPLE:
This indicates the modem has been set for use in the United Kingdom, France or Germany.
+GCI: (B4,3D,42)
ACM5003-M Modem Country Code List (subset of the T.35 Country Code List used by
most modems)
Code Country Code Country Code Country 00 Japan 53 India 9C Singapore 07 Argentina 54 Indonesia 9F South Africa 09 Australia 57 Ireland A0 Spain 0A Austria 58 Israel A1 Sri Lanka 0F Belgium 59 Italy A5 Sweden 16 Brazil 61 Korea (Republic of) A6 Switzerland 1B Bulgaria 62 Kuwait A9 Thailand 20 Canada 64 Lebanon AD Tunisia 25 Chile 69 Luxembourg AE Turkey 26 China 6C Malaysia B3 United Arab Emirates 27 Columbia 73 Mexico B4 United Kingdom 2D Cyprus 77 Morocco B5 Unites States
2E Czech Republic 7B Netherlands B7 Uruguay 31 Denmark 7E New Zealand B8 Russia 36 Egypt 82 Norway F9 Estonia 3C Finland 84 Pakistan FA US Virgin Islands 3D France 89 Philippines FB Slovakia 42 Germany 8A Poland FC Slovenia 46 Greece 8B Portugal FD (Universal) 50 Hong Kong 8E Romania FE Taiwan 51 Hungary 98 Saudi Arabia 52 Iceland 99 Senegal
Selecting Modem Country Codes
Not every country has a separate country code. Some countries share country codes. Here is a list
of AT codes for some modems and a table of country codes to select for country locations.
NCID Gateways
Table of Contents
Gateways Index
email2ncid setup
ncid2ncid setup
obi2ncid setup
rn2ncid setup
sip2ncid setup
wc2ncid setup
xdmf2ncid setup
yac2ncid setup
email2ncid setup
How to setup the email-to-NCID message gateway to convert an email into an NCID message and
send it to the NCID server. If the notify option is used, it will only send the email subject line to the
NCID server.
Sections:
REQUIREMENTS
CONFIGURATION
TESTING
STEP-BY-STEP SETUP FOR RASPBERRY Pi
REQUIREMENTS:
A dynamic DNS service. Here are just a few examples:
<cml> Decimal number identifying the compression method (1, 129, 130, 140, or 141).
<cmid> Alphanumeric string describing the compression method (UNSIGNED PCM, IMA ADPCM, UNSIGNED PCM, 2 Bit ADPCM, or 4 Bit ADPCM).
<bps> Decimal number defining the average number of bits in the compressed sample not including silence compression (2, 4 or 8).
<tm> Decimal number (0) reporting the time interval, in units of 0.1 second, between timing marks. A value of 0 reports that timing marks are not supported.
<vsr> <range of values> containing the supported range of voice samples per second of the analog signal (8000).
<scs> <range of values> containing the supported range of sensitivity settings for voice receives (0). A 0 indicates not supported.
<sel> <range of values> containing the supported range of expansion values for voice transmits (0). A 0 indicates not supported.
Server Extensions
Table of Contents
Description
Hangup Extension
Description
The ncidd server supports Server Extensions. A Server Extension is an external script or
program that is called by ncidd to perform a function and return a result. Server Extensions are a
way for users to add functionality to NCID without requiring changes to NCID itself. Server
Extensions are isolated from the main NCID distribution and because of this they do not normally
require any changes when NCID is upgraded to a later version.
You can use any scripting or programming language desired.
Hangup Extension
The first Server Extension distributed with NCID is the Hangup Extension.
A Hangup Extension can be used with and without Internal Hangup. (Internal Hangup is defined as
call termination using the ncidd.blacklist and ncidd.whitelist files.)
It works like this:
When Caller ID is received from a modem and it is not terminated by the Internal Hangup logic
and is not in 'ncidd.whitelist', the server will check to see if a Hangup Extension has been
enabled. If so, the server will pass the current call info to the Hangup Extension, execute it and
wait for a response. If the Hangup Extension results in a positive match by returning the word
hangup, call termination will take place automatically.
The Hangup Extension can also change the "announce" file name to give a different message
to some callers, and can return a hangup reason that will be added to the displayed caller
name.
Hangup Extensions use all of the same Internal Hangup modes (normal, fax, announce). Be sure to
review the required Modem Configuration parameters.
Three settings in ncidd.conf control Hangup Extensions:
Setting Values
set hupmode
0 = disabled
1 = Normal Hangup
2 = Fax Hangup
3 = Announce Hangup
default: 0
set hupname
the name of the hangup script or program
default: hangup-nohangup
set huprmd
optional voice file to be played if hupmode = 3
default: "announce" file used by Internal Hangup (usually
DisconnectedNotInService.rmd)
When you enable a Hangup Extension, you also need to indicate the hangup script to use. The
default is hangup-nohangup which will run, but it will never trigger a hangup. When testing your
script you can give the full path name to where it is located. When it's working OK, copy it to the
path appropriate for your operating system:
/usr/share/ncid/extensions
or
/usr/local/share/ncid/extensions
Once the file is there you give the name of the script in ncidd.conf:
set hupname = hangup-custom
You create your own Hangup Extension script/program external to NCID in whatever language you
would like. It can have whatever logic you wish for terminating a call. You can even have it return
the name of a customized voice message file for individual phone numbers. It is not necessary for
your Hangup Extension to check ncidd.whitelist because the NCID server already does this for
you and will have automatically applied any Simple Expressions or Regular Expressions to the
incoming call.
The technical details of creating a Hangup Extension are outside the scope of this document (see
NCID-API).
However, several ready-to-use Hangup Extensions and template Hangup Extensions are included
with NCID. Template Hangup Extensions have a file name ending in '-skel' (short for "skeleton").
These will always be replaced when NCID is updated. Before customizing a template, it is essential
that you copy or rename the template script so that it does not end in '-skel'.
Below is a summary of the Hangup Extensions included with NCID:
The hangup-calls extension hangs up on every call not in the whitelist.
The hangup-closed-skel script is a template for playing a recorded "we are closed"
message prior to hanging up on calls within a specific time period. You need to customize
the start and end times and record a message. It is recommended that your recorded
message include the name of your business so callers can be sure they dialed the correct
number.
The hangup-combo-skel script is a template for calling two extension scripts. By default, it
calls hangup-fakenum and hangup-fcc. Rename it to hangup-combo after you have
customized it.
The hangup-fakenum extension hangs up on calls where the number is absent or not
allowed in the North American numbering plan, or where the name is mostly numeric.
Optionally, it will also check a list of valid area codes brought in with the get-areacodes-list
script. Read more at Enforcing the North American Numbering Plan.
The hangup-fcc extension hangs up on calls where the number can be found in the FCC's
open data list of "Unwanted Calls". The blacklist is stored locally in /etc/ncid/fcc.blacklist
and is typically updated daily by a cron job (or Mac OS X launchd daemon) that calls get-
fcc-list to fetch the latest version from a web site. Read more at CallerID Blacklist from
FCC Data.
The hangup-message-skel script is a template that contains a sample list of phone
numbers with their corresponding name of a recorded message (voice) file that is played
before terminating the call. There are no provisions to record a message from the caller;
If you want a page anytime the phone rings, you are finished.
if you only want a page if the phone call is unanswered or is at a certain ring count, you need to
uncomment the ncid_page line in ncid.conf, then change the ring count as desired.
Be careful, all Caller ID devices do not indicate rings. If RING is not sent by the modem, a ring
count will not work and the page will never be sent.
If you are using a modem, there is no indication of whether the the phone was answered or not.
The modem sends RING to ncidd each time it gets the ringing signal. When RING is not sent
anymore ncidd will indicate the end of ringing. A ring count of 4 is a good value to assume the
phone was not answered. Remove the '#' so you have this line:
set ncid_page {set Ring 4}
If you are using SIP, you can configure it to send the page on hangup without an answer by
modifying the above line to:
set ncid_page {set Ring -1}
See the comments in the ncid.conf file for more information on configuring the ring option line.
Verbose Levels
Table of Contents
Index
cidupdate verbose levels
ncid verbose levels
ncidd verbose levels
ncid2ncid verbose levels
ncidnumberinfo verbose levels
obi2ncid verbose levels
rn2ncid verbose levels
sip2ncid verbose levels
wc2ncid verbose levels
xdmf2ncid verbose levels
cidupdate verbose levels
Higher levels include lower levels.
LEVELR:
indicate if failed to open call log show rename from and to if asking for Y/n show result of attempted rename
LEVELE:
indicate if no config file indicate if there is a config error show system error show internal program error show Terminated on non-option errors
LEVEL9:
not used
LEVEL8:
exit normally when position in code reached
LEVEL7:
not used
LEVEL6:
show line fields created
LEVEL5:
not used
LEVEL4:
changed blacklist #= name changed whitelist #= name show old cid line
LEVEL3:
show write entry to new call log
LEVEL2:
not used
LEVEL1:
show start time show program name and version show command line options show config file name show alias file name show blacklist file name show whitelist file name show simple expresions or posix or perl regular expressions used for alias/blacklist/whitelist entries indicate alias file messages show if ignoring leading 1 in alias definition and calling number indicate blacklist and whitelist file messages show if ignoring leading 1 in alias definition and calling number show if updating current log or current and previous call logs show if skipping interactive prompt show end line show output call log name show terminated [by LEVEL8] with date and time
ncid verbose levels
Higher levels include lower levels.
LEVEL9:
not used
LEVEL8:
not used
LEVEL7:
not used
LEVEL6:
not used
LEVEL5:
show show Assigned numbers for data received from ncidd show status of host and port at after each config file and command line
LEVEL4:
shows fixed font family detected shows fixed font skipped shows history window font shows message window and display font shows help text font shows top level window geometry display history entries in milliseconds
LEVEL3:
show all discovered lineids show attempting to connect show server option received indicate if no call array label for phone line label
LEVEL2:
display history entries in milliseconds indicate rcfile and variable changed show all server options received
LEVEL1:
indicate if using PID file or not display about indicate if a output module is being used and which one indicate if optional module variable is not being used indicate if optional module variable is being used and ring count indicate width of name, number, line type and history window display received data if in raw mode indicate when call log is completely received show CIDINFO line on ring count match show data sent to module show message sent to module show CID data sent to module show unsupported line labels
show unsupported alias types display popup message show discovered lineid's show current font show number of fixed and total fonts show calculated history text field length of message window show history text field rows indicate window geometry previously not saved or show saved window geometry show window geometry show window minimum size show length of all visible columns in history window show number of visible columns out of total number columns show resized history field length of message window indicate if ncid-alert started in ncid.conf file when autostart is turned on* indicate rcfile and variable changed
ncidd server verbose levels
Higher levels include lower levels.
LEVELR
indicated received connected signal with date and time when a client connects if no clients are connected
LEVELE
indicate if no config file indicate if there is a config error indicate if there is no alias file indicate if there is a uname system call error indicate if open of ncidd log file failed indicate if open of call log failed indicate warning using noserial and nomodem in config file indicate if there is a set TTY error indicate warning if no modem or modem busy indicate if open TTY port failed indicate if TTY port fcntl error indicate if TTY port flush error indicate warning using normal hangup if using Announce Hangup and there is no recording file indicate what the hangup extension must start with "hangup-" indicate if hangup extension not found indicate if hangup extension must be executable indicate warning using normal mode if modem does not support FAX Hangup indicate warning using normal hangup if modem does not support Announce Hangup indicate warning using normal hangup if unknown hangup mode indicate if unable to parse ifaddress indicate if popen failed for cidupdate indicate if pclose failed for cidupdate indicate if popen failed for ncidutil
indicate if pclose failed for ncidutil indicate if "sh -c" fails to start hangup script indicate if hangup script failed to return hangup or OK indicate if pclose failed for hangup script indicate status of hangup script after trying to run it indicate if TTY port lockfile failed to open indicate if failed to remove lockfile indicate if signal terminated program indicate if if received unexpected signal indicate if system error indicate if internal program error show Terminated with date and time
LEVEL9:
(can only be set by the command line) show poll() events flag show individual tests in strmatch() skips LEVEL8
LEVEL8:
(can only be set by the command line) show alias, blacklist and whitelist tables normal exit
LEVEL7:
show alias, blacklist and whitelist tables
LEVEL6:
indicate client sent empty line show optional files failed to open indicate sending data to each client show progress messages while formatting the phone number
LEVEL5:
display data as a hexdump show modem command return codes for hangup show lastring and ring count if ring detected show processing hangup request
LEVEL4:
indicate if name and nmbr received but no date or time indicate date, time, nmbr received indicate date, time, name or date, time, name, mesg received indicate date, time, nmbr, mesg received indicate date, time, nmbr, name or date, time, nmbr, name, mesg received
detected TCI serial device format detected NetCallerID or gateway format indicate number without RING is Call Waiting (WID) show alias matching Begin: and End: with time and result show open, Begin, End and exit status for external cidupdate, ncidutil, and hangup scripts
LEVEL3:
show number of tries to init modem show modem responses show modem query commands for software version, country code, operation modes indicate Non 7-bit ASCII message deleted indicate Gateway sent CALL data indicate Gateway sent CALLINFO data indicate client sent text message indicate client sent unknown data show call data input show CIDINFO line show CID line show ACK line show calltype, hangup, hupmode, cidline and lineid if true, indicate cidline == lineid: check whitelist if true, indicate name of number on whitelist: skip hangup check if true, show cidline != lineid: skip hangup check show checked whitelist and blacklist for match or whitelist empty indicate match in blacklist or whitelist with values show hangup extension and arguments show default mode for hangup extension show WARNING: no recording file, using normal hangup (mode 1) show using hangup mode show using recording show hangup extension return code show meaning of MESG code if known and discarded indicate unable to go off hook to do the hangup indicate trouble in going on hook to finish the hangup
LEVEL2:
show lines that start with a 3 digit number show client connect/disconnect indicate if client sent a HELLO Identification line indicate if client sent a HELLO Command line indicate if client command accepted indicate end of client hello lines indicate status of call log indicate if LineIDS sent to client indicate if server options sent to client indicate end of cobnnection startup show number of times socket was zero in sequence when trying to remove client from poll show client removed on write error show client not found in poll table
indicate network client hung up indicate device or modem returned no data indicate end of call log or call log empty or no call log sent indicate end of connection startup show line sent to cidupdate show line sent to ncidutil show OPT lines show REQ: lines show INFO: lines show WRK: lines show RESP: lines indicate case where finishCID did not receive full call info
LEVEL1:
show started with date and time show server version indicate if could not create ncidd logfile indicate name and location of ncidd logfile indicate if no config file or config file processed indicate set command skipped in config file indicate error in opening ncidd log file indicate what is configured to send to the clients show verbose level indicate data type sent to clients indicate alias file messages indicate if leading 1 needed for aliases indicate blacklist and whitelist file messages indicate alias, blacklist and whitelist total/maximum entries, if any indicate cid logfile messages indicate of no call logfile indicate name and location of call logfile indicate if no data logfile indicate name and location of data logfile show Telephone Line Identifier show TTY port opened show TTY port speed show name and location of TTY lockfile show modem query results indicate TTY port control signals enabled or disabled indicate Caller ID from a serial or USB device and optional gateways indicate Caller ID from a modem and optional gateways indicate Handles modem calls without Caller ID indicate Does not handle modem calls without Caller ID indicate Caller ID from gateways without modem support indicate hangup option show network port indicate not using PID file if no '-P' option indicate pid file already exists indicate found stale pidfile indicate cannot write pidfile indicate wrote pid in pidfile
indicate end of startup indicate TTY in use with date and time indicate TTY free with date and time indicate cannot init TTY and terminated with date and time indicate Modem initialized. indicate Initialization string for modem is null. indicate Modem Chipset version indicate Modem set for CallerID. indicate Modem set for CallerID and Call Waiting. indicate Modem does or does not support FAX indicate Modem supports Snooping for call waiting indicate CallerID initialization string for modem is null. indicate CallerID TTY port initialized indicate serial device hung up and terminated with date and time indicate device error and terminated with date and time indicate serial device error and terminated with date and time indicate poll error indicate invalid request from serial device, terminated with date and time indicate Invalid Request, removed client indicate Write event not configured, removed client indicate device or modem read error indicate Device returns no data, Terminated with date and time indicate network connect error indicate network NOBLOCK error indicate too many network clients indicate network client read error indicate cid log is too large indicate sending log to client indicate removed pidfile indicate signal received and terminate program with date and time indicate SIGHUP received and reload alias files indicate SIGPIPE received and ignored with date and time indicate Failed to remove stale lockfile indicate Removed stale lockfile indicate success or failure to parse ifaddr to set the interface indicate which country code is set for number formatting show number display format selected if country is NANPA show error in rstarting external cidupdate, ncidutil, and hangup scripts indicate hangup script did not return hangup or OK
ncid2ncid gateway verbose levels
Higher levels include lower levels.
LEVELE
indicate if no config file indicate if there is a config error show gethostname error
LEVEL9:
(can only be set by the command line) not used
LEVEL8:
(can only be set by the command line) not used
LEVEL7:
not used
LEVEL6:
not used
LEVEL5:
not used
LEVEL4:
indicate reading socket show call log lines received
LEVEL3:
show all data received from all servers
LEVEL2:
indicate line sent to receiving NCID server indicate line from receiving NCID server
LEVEL1:
indicate cannot create or open existing logfile show start date and time show server version show command line indicate Debug mode indicate no config file or config file processed indicate set command skipped in config file show HELLO: IDENT: show HELLO: CMD: show error line in config file show verbose level indicate not using PID file, there was no '-P' option indicate found stale pidfile indicate wrote pid in pidfile show Receiving Host host:port show server greeting line show configured Sending Hosts host:port show configured servers greeting line
indicate client disconnected indicate client reconnected indicate Hung Up indicate Poll Error indicate Removed client, invalid request indicate Removed client, write event not configured indicate line cannot be sent to receiving NCID server indicate removed pidfile show terminated with date and time
ncidnumberinfo verbose levels
Higher levels include lower levels.
LEVELE:
indicate if a phone number must be given show usage for adding a phonenumber show system error show internal program error show Terminated on non-option errors
LEVEL9:
not used
LEVEL8:
exit normally when position in code reached
LEVEL7:
not used
LEVEL6:
not used
LEVEL5:
not used
LEVEL4:
not used
LEVEL3:
show raw telephone number
LEVEL2:
not used
LEVEL1:
show start time show program name and version show command line options show verbose level indicate NANP country format used show terminated [by LEVEL8] with date and time
obi2ncid gateway verbose levels
Higher levels include lower levels.
LEVEL9:
not used
LEVEL8:
not used
LEVEL7:
show call log from ncidd, if received
LEVEL6:
indicate start and end of received packets filter received packets
LEVEL5:
show call or message line from ncidd show log lines received from the obi
LEVEL4:
show what matched on a log line from the obi show variables set by the match
LEVEL3:
show CALL: line generated show CALLINFO: line generated indicate Outgoing call not completed
LEVEL2:
not used
LEVEL1:
show Started show command line and any options on separate lines
show logfile name and opened as append or overwrite or could not open show processed config file or config file not found show name and version show verbose level show Hostname flag show IDENT show Command show Line ID show NCID address:port show delay time between retrying failed connection show debug mode if in debug mode show test mode if in test mode show PID or some PID problem or not using PID file show connected to NCID <address:port> or error exit show greeting line from NCID show listening port or error exit show exit on error show signals ingnored show NCID server disconnected if it goes away and trying to reconnect show terminated and signal that caused it
rn2ncid gateway verbose levels
Higher levels include lower levels.
LEVEL9:
not used
LEVEL8:
not used
LEVEL7:
not used
LEVEL6:
not used
LEVEL5:
show call log from ncidd, if received show call or message line from ncidd show messgae line from remote notification
LEVEL4:
not used
LEVEL3:
show notification type show Call: line generated if type RING show NOT: line generated if type PING, Battery, SMS, MMS, or VOICEMAIL show notice of a SMS or MMS message show unknown notification type show notification type was rejected
LEVEL2:
not used
LEVEL1:
show Started show command line and any options on separate lines show logfile name and opened as append or overwrite or could not open show processed config file or config file not found show name and version show verbose level show HELLO: IDENT: show HELLO: CMD: show Line ID show debug mode if in debug mode show test mode if in test mode show reject option values or none show pid or some PID problem show connected to NCID <address:port> or error exit show greeting line from NCID show delay between each try to reconnect to server show listening port or error exit show NCID server disconnected if it goes away and trying to reconnect
sip2ncid gateway verbose levels
Higher levels include lower levels.
LEVEL9:
(can only be set by the command line) show lines received from the NCID server
LEVEL8:
not used
LEVEL7:
not used
LEVEL6:
not used
LEVEL5:
not used (reserved for hex dumps)
LEVEL4:
show startup lines from server show packet from and to addresses show packet source and destination ports show packet data size in bytes show linenum array and contact as they are compared for an INVITE indicate checked for outgoing call show INVITE contact was not registered for out call indicate Alarm Timeout and msgsent flag show call log if sent show Loopback encapsulation type
LEVEL3:
show SIP packets give character count of lines received from the NCID server show protocol information for the packet show warning SIP packet truncated indicate examining packet for line label indicate number, or name and number, in packet show alarm timeout, pcap\_loop() return value and msgsent flags show calls table search, additions and deletions
LEVEL2:
show CALL and CALLINFO lines show packet number received and date show request line show outgoing call show cidmsg log line generated show trying responses show Warning: could not connect to the NCID server
LEVEL1:
indicate cannot create or open existing logfile show start date and time show server and API versions indicate test mode indicate Debug mode indicate no config file indicate config file processed indicate set command skipped in config file show error line in config file indicate Reading from dumpfile indicate Writing to dumpfile show verbose level show HELLO: IDENT:
show HELLO: CMD: show Line ID show status: Warn clients: 'No SIP packets' & 'SIP packets returned' show NCID status show network interface used show applied filter indicate no filter applied indicate No SIP packets received indicate SIP packets returned indicate not using PID file, there was no '-P' option indicate pid file already exists indicate found stale pidfile indicate wrote pid in pidfile alarm SIP packets returned Warning: SIP Packet truncated Warning: simultaneous calls exceeded invalid IP header length show registered line number indicate Number of telephone lines exceeded show CID line sent to NCID indicate packet parse problems indicate caller hangup before answer indicate hangup after answer Warning: cannot get CallID Warning: Warning no SIP packets indicate pcap_loop error indicate removed pidfile indicate program terminated with date and time show extension size show pcap linktype for the device
wc2ncid gateway verbose levels
Higher levels include lower levels.
LEVEL9:
not used
LEVEL8:
not used
LEVEL7:
not used
LEVEL6:
not used
LEVEL5:
show call log from ncidd, if received show Caller ID line from ncidd
LEVEL4:
show hex dump of received packet
LEVEL3:
show unit and serial numbers from Whozz Calling device show Call line from Whozz Calling device
LEVEL2:
show CALL and CALLINFO lines sent to ncidd show Phone Off Hook show Phone On Hook
LEVEL1:
show Started show command line and any options on separate lines show name and version show verbose level show debug mode if in debug mode show test mode if in test mode show logfile name and whether opened as append or overwrite show logfile could not be opened show processed config file or config file not found show Hostname flag show IDENT show Command show connected to NCID <address:port> or error exit show greeting line from NCID show opened broadcast port show closed broadcast port show opened WC device port show closed WC device port show commands sent show Pause after sending ^^Id-V show checking and setting required flags indicate command data received or timeout in seconds show data from some commands show Waiting for calls from <server:port>
xdmf2ncid gateway verbose levels
Higher levels include lower levels.
LEVEL9:
not used
LEVEL8:
not used
LEVEL7:
not used
LEVEL6:
indicate start and end of received packets filter received packets
LEVEL5:
show call log from ncidd, if received show call or message line from ncidd
LEVEL4:
indicate U counts from Holtek HT9032D show Hex Dump of Message indicate <SDMF|XDMF> packet and bytes to checksum show Message Length show Calculated Checksum Good show Got Call Type show Got Date & Time show Got Caller Number show Got Why No Number show Got Caller Name show Got Why No Name show Got unknown show Detected Call type
LEVEL3:
indicate data received from Holtek HT9032D indicate Ignored Holtek HT9032D noise packet indicate detected Comet device indicate ASCII Hex detected indicate Detected XDMF Hex message show Received Message show Calculated Checksum Bad, if bad show Call line sent to server indicate ERROR - not an XDMF packet
LEVEL2:
not used
LEVEL1:
show Started show command line and any options on separate lines
show logfile name and opened as append or overwrite or could not open show processed config file or config file not found show name and version indicate configured for Holtek HT9032D indicate configured for a Comet or modem show verbose level show Hostname Flag show HELLO: IDENT: show HELLO: CMD: show Line ID show NCID <address:port> show delay time between retrying failed connection show <ttyport> show debug mode if in debug mode show test mode if in test mode show PID or some PID problem or not using PID file show connected to NCID <address:port> or error exit show greeting line from NCID show Connected to USB port <ttyport> show Waiting for calls from <ttyport> show exit on error show signals ingnored show NCID server disconnected if it goes away and trying to reconnect show terminated and signal that caused it
NCID Contributors
Table of Contents
Any omissions are entirely my fault. Please notify jlc of any corrections or additions.
John L. Chmielewski
Designed, developed and wrote most of the programs.
Mark Salyzyn
Ported ncidd to BSD and Macintosh.
Wrote getopt.c and poll.c .
Mace Moneta
Wrote nciduser , which was the basis for ncid-speak .
Contributed ideas and code to ncid client.
Contributed the Mac OS X portion of ncid-speak .
Dan Lawrence
Contributed to ncid-email so paging would work.
Contributed information on freewrap for ncid client on Windows.
Aron Green
Helped fix termios settings to work with FreeBSD.
Contributed ncid.sh and ncidd.sh start/stop scripts for FreeBSD.
software; it applies also to any other work released this way by its authors. You can apply it to your
programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses
are designed to make sure that you have the freedom to distribute copies of free software (and charge
for them if you wish), that you receive source code or can get it if you want it, that you can change
the software or use pieces of it in new free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you these rights or asking you to
surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the
software, or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on
to the recipients the same freedoms that you received. You must make sure that they, too, receive or
can get the source code. And you must show them these terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps:
1. assert copyright on the software, and
2. offer you this License giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this
free software. For both users' and authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of the software
inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the
area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those products. If such problems
arise substantially in other domains, we stand ready to extend this provision to those domains in
future versions of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents. States should not allow patents
to restrict development and use of software on general-purpose computers, but in those that do, we
wish to avoid the special danger that patents applied to a free program could make it effectively
proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-
free.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS
0. Definitions.
This License refers to version 3 of the GNU General Public License.
Copyright also means copyright-like laws that apply to other kinds of works, such as semiconductor
masks.
The Program refers to any copyrightable work licensed under this License. Each licensee is addressed
as you. Licensees and recipients may be individuals or organizations.
To modify a work means to copy from or adapt all or part of the work in a fashion requiring copyright
permission, other than the making of an exact copy. The resulting work is called a modified version of
the earlier work or a work based on the earlier work.
A covered work means either the unmodified Program or a work based on the Program.
To propagate a work means to do anything with it that, without permission, would make you directly
or secondarily liable for infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying, distribution (with or without
modification), making available to the public, and in some countries other activities as well.
To convey a work means any kind of propagation that enables other parties to make or receive copies.
Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays Appropriate Legal Notices to the extent that it includes a
convenient and prominently visible feature that
1. displays an appropriate copyright notice, and
2. tells the user that there is no warranty for the work (except to the extent that warranties are
provided), that licensees may convey the work under this License, and how to view a copy of
this License.
If the interface presents a list of user commands or options, such as a menu, a prominent item in the
list meets this criterion.
1. Source Code.
The source code for a work means the preferred form of the work for making modifications to it.
Object code means any non-source form of a work.
A Standard Interface means an interface that either is an official standard defined by a recognized
standards body, or, in the case of interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The System Libraries of an executable work include anything, other than the work as a whole, that (a)
is included in the normal form of packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that Major Component, or to
implement a Standard Interface for which an implementation is available to the public in source code
form. A Major Component, in this context, means a major essential component (kernel, window
system, and so on) of the specific operating system (if any) on which the executable work runs, or a
compiler used to produce the work, or an object code interpreter used to run it.
The Corresponding Source for a work in object code form means all the source code needed to
generate, install, and (for an executable work) run the object code and to modify the work, including
scripts to control those activities. However, it does not include the work's System Libraries, or general-
purpose tools or generally available free programs which are used unmodified in performing those
activities but which are not part of the work. For example, Corresponding Source includes interface
definition files associated with source files for the work, and the source code for shared libraries and
dynamically linked subprograms that the work is specifically designed to require, such as by intimate
data communication or control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from
other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and are
irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a covered work is covered by this
License only if the output, given its content, constitutes a covered work. This License acknowledges
your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long
as your license otherwise remains in force. You may convey covered works to others for the sole
purpose of having them make modifications exclusively for you, or provide you with facilities for
running those works, provided that you comply with the terms of this License in conveying all material
for which you do not control copyright. Those thus making or running the covered works for you must
do so exclusively on your behalf, under your direction and control, on terms that prohibit them from
making any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below.
Sublicensing is not allowed; section 10 makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological measure under any applicable law
fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of technological
measures to the extent such circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit operation or modification of the
work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you receive it, in any medium,
provided that you conspicuously and appropriately publish on each copy an appropriate copyright
notice; keep intact all notices stating that this License and any non-permissive terms added in accord
with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer support or
warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to produce it from the Program, in
the form of source code under the terms of section 4, provided that you also meet all of these
conditions:
a) The work must carry prominent notices stating that you modified it, and giving a relevant
date.
b) The work must carry prominent notices stating that it is released under this License and
any conditions added under section 7. This requirement modifies the requirement in section 4
to keep intact all notices.
c) You must license the entire work, as a whole, under this License to anyone who comes into
possession of a copy. This License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts, regardless of how they are
packaged. This License gives no permission to license the work in any other way, but it does
not invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices;
however, if the Program has interactive interfaces that do not display Appropriate Legal
Notices, your work need not make them do so.
A compilation of a covered work with other separate and independent works, which are not by their
nature extensions of the covered work, and which are not combined with it such as to form a larger
program, in or on a volume of a storage or distribution medium, is called an aggregate if the
compilation and its resulting copyright are not used to limit the access or legal rights of the
compilation's users beyond what the individual works permit. Inclusion of a covered work in an
aggregate does not cause this License to apply to the other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of sections 4 and 5, provided
that you also convey the machine-readable Corresponding Source under the terms of this License, in
one of these ways:
a) Convey the object code in, or embodied in, a physical product (including a physical
distribution medium), accompanied by the Corresponding Source fixed on a durable physical
medium customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product (including a physical
distribution medium), accompanied by a written offer, valid for at least three years and valid
for as long as you offer spare parts or customer support for that product model, to give
anyone who possesses the object code either
1. a copy of the Corresponding Source for all the software in the product that is covered
by this License, on a durable physical medium customarily used for software
interchange, for a price no more than your reasonable cost of physically performing
this conveying of source, or
2. access to copy the Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written offer to provide the
Corresponding Source. This alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord with subsection 6b.
d) Convey the object code by offering access from a designated place (gratis or for a charge),
and offer equivalent access to the Corresponding Source in the same way through the same
place at no further charge. You need not require recipients to copy the Corresponding Source
along with the object code. If the place to copy the object code is a network server, the
Corresponding Source may be on a different server operated by you or a third party) that
supports equivalent copying facilities, provided you maintain clear directions next to the
object code saying where to find the Corresponding Source. Regardless of what server hosts
the Corresponding Source, you remain obligated to ensure that it is available for as long as
needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you inform other peers
where the object code and Corresponding Source of the work are being offered to the general
public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Corresponding Source
as a System Library, need not be included in conveying the object code work.
A User Product is either
1. a consumer product, which means any tangible personal property which is normally used for
personal, family, or household purposes, or
2. anything designed or sold for incorporation into a dwelling.
In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user, normally used refers to a typical or
common use of that class of product, regardless of the status of the particular user or of the way in
which the particular user actually uses, or expects or is expected to use, the product. A product is a
consumer product regardless of whether the product has substantial commercial, industrial or non-
consumer uses, unless such uses represent the only significant mode of use of the product.
Installation Information for a User Product means any methods, procedures, authorization keys, or
other information required to install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The information must suffice to ensure
that the continued functioning of the modified object code is in no case prevented or interfered with
solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User
Product, and the conveying occurs as part of a transaction in which the right of possession and use of
the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the
transaction is characterized), the Corresponding Source conveyed under this section must be
accompanied by the Installation Information. But this requirement does not apply if neither you nor
any third party retains the ability to install modified object code on the User Product (for example, the
work has been installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to
provide support service, warranty, or updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or installed. Access to a network may
be denied when the modification itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this section
must be in a format that is publicly documented (and with an implementation available to the public
in source code form), and must require no special password or key for unpacking, reading or copying.
7. Additional Terms.
Additional permissions are terms that supplement the terms of this License by making exceptions
from one or more of its conditions. Additional permissions that are applicable to the entire Program
shall be treated as though they were included in this License, to the extent that they are valid under
applicable law. If additional permissions apply only to part of the Program, that part may be used
separately under those permissions, but the entire Program remains governed by this License without
regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional
permissions from that copy, or from any part of it. (Additional permissions may be written to require
their own removal in certain cases when you modify the work.) You may place additional permissions
on material, added by you to a covered work, for which you have or can give appropriate copyright
permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you may
(if authorized by the copyright holders of that material) supplement the terms of this License with
terms:
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of
this License; or
b) Requiring preservation of specified reasonable legal notices or author attributions in that
material or in the Appropriate Legal Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified
versions of such material be marked in reasonable ways as different from the original version;
or
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or
service marks; or
f) Requiring indemnification of licensors and authors of that material by anyone who conveys
the material (or modified versions of it) with contractual assumptions of liability to the
recipient, for any liability that these contractual assumptions directly impose on those
licensors and authors.
All other non-permissive additional terms are considered further restrictions within the meaning of
section 10. If the Program as you received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further restriction, you may remove that term. If a
license document contains a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms of that license document,
provided that the further restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant source
files, a statement of the additional terms that apply to those files, or a notice indicating where to find
the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written
license, or stated as exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided under this License. Any
attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright holder
is reinstated
a) provisionally, unless and until the copyright holder explicitly and finally terminates your
license, and
b) permanently, if the copyright holder fails to notify you of the violation by some reasonable
means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright
holder notifies you of the violation by some reasonable means, this is the first time you have received
notice of violation of this License (for any work) from that copyright holder, and you cure the violation
prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have
received copies or rights from you under this License. If your rights have been terminated and not
permanently reinstated, you do not qualify to receive new licenses for the same material under
section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary
propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However, nothing other than this License
grants you permission to propagate or modify any covered work. These actions infringe copyright if
you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate
your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically receives a license from the original
licensors, to run, modify and propagate that work, subject to this License. You are not responsible for
enforcing compliance by third parties with this License.
An entity transaction is a transaction transferring control of an organization, or substantially all assets
of one, or subdividing an organization, or merging organizations. If propagation of a covered work
results from an entity transaction, each party to that transaction who receives a copy of the work also
receives whatever licenses to the work the party's predecessor in interest had or could give under the
previous paragraph, plus a right to possession of the Corresponding Source of the work from the
predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed under
this License. For example, you may not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation (including a cross-claim or
counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering
for sale, or importing the Program or any portion of it.
11. Patents.
A contributor is a copyright holder who authorizes use under this License of the Program or a work on
which the Program is based. The work thus licensed is called the contributor's contributor version.
A contributor's essential patent claims are all patent claims owned or controlled by the contributor,
whether already acquired or hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version, but do not include claims that
would be infringed only as a consequence of further modification of the contributor version. For
purposes of this definition, control includes the right to grant patent sublicenses in a manner
consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the
contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run,
modify and propagate the contents of its contributor version.
In the following three paragraphs, a patent license is any express agreement or commitment, however
denominated, not to enforce a patent (such as an express permission to practice a patent or covenant
not to sue for patent infringement). To grant such a patent license to a party means to make such an
agreement or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of
the work is not available for anyone to copy, free of charge and under the terms of this License,
through a publicly available network server or other readily accessible means, then you must either
1. cause the Corresponding Source to be so available, or
2. arrange to deprive yourself of the benefit of the patent license for this particular work, or
3. arrange, in a manner consistent with the requirements of this License, to extend the patent
license to downstream recipients.
Knowingly relying means you have actual knowledge that, but for the patent license, your conveying
the covered work in a country, or your recipient's use of the covered work in a country, would infringe
one or more identifiable patents in that country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by
procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving
the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered
work, then the patent license you grant is automatically extended to all recipients of the covered work
and works based on it.
A patent license is discriminatory if it does not include within the scope of its coverage, prohibits the
exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you are a party to an arrangement
with a third party that is in the business of distributing software, under which you make payment to
the third party based on the extent of your activity of conveying the work, and under which the third
party grants, to any of the parties who would receive the covered work from you, a discriminatory
patent license
a) in connection with copies of the covered work conveyed by you (or copies made from those
copies), or
b) primarily for and in connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent license was granted,
prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other
defenses to infringement that may otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the
conditions of this License, they do not excuse you from the conditions of this License. If you cannot
convey a covered work so as to satisfy simultaneously your obligations under this License and any
other pertinent obligations, then as a consequence you may not convey it at all. For example, if you
agree to terms that obligate you to collect a royalty for further conveying from those to whom you
convey the Program, the only way you could satisfy both those terms and this License would be to
refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have permission to link or combine any
covered work with a work licensed under version 3 of the GNU Affero General Public License into a
single combined work, and to convey the resulting work. The terms of this License will continue to
apply to the part which is the covered work, but the special requirements of the GNU Affero General
Public License, section 13, concerning interaction through a network will apply to the combination as
such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of the GNU General Public
License from time to time. Such new versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a certain
numbered version of the GNU General Public License or any later version applies to it, you have the
option of following the terms and conditions either of that numbered version or of any later version
published by the Free Software Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published by the Free Software
Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU General Public
License can be used, that proxy's public statement of acceptance of a version permanently authorizes
you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no additional
obligations are imposed on any author or copyright holder as a result of your choosing to follow a later
version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS
PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE
OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH
ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal
effect according to their terms, reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption
of liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible use to the public, the
best way to achieve this is to make it free software which everyone can redistribute and change under
these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each
source file to most effectively state the exclusion of warranty; and each file should have at least the
copyright line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an
interactive mode:
<program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
The hypothetical commands show w and show c should show the appropriate parts of the General
Public License. Of course, your program's commands might be different; for a GUI interface, you would
use an about box.
You should also get your employer (if you work as a programmer) or school, if any, to sign a copyright
disclaimer for the program, if necessary. For more information on this, and how to apply and follow the
GNU GPL, see http://www.gnu.org/licenses/.
The GNU General Public License does not permit incorporating your program into proprietary
programs. If your program is a subroutine library, you may consider it more useful to permit linking
proprietary applications with the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-