Sophie

Sophie

distrib > Mandriva > 2008.0 > x86_64 > by-pkgid > 00bdf001b179ab7cab5a36ebc3f9271b > files > 158

gnugk-2.2.6-2mdv2008.0.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
 <TITLE>OpenH323 Gatekeeper - The GNU Gatekeeper: Monitoring the Gatekeeper</TITLE>
 <LINK HREF="manual-12.html" REL=previous>
 <LINK HREF="manual.html#toc13" REL=contents>
</HEAD>
<BODY>
Next
<A HREF="manual-12.html">Previous</A>
<A HREF="manual.html#toc13">Contents</A>
<HR>
<H2><A NAME="monitor"></A> <A NAME="s13">13.</A> <A HREF="manual.html#toc13">Monitoring the Gatekeeper</A></H2>


<H2><A NAME="ss13.1">13.1</A> <A HREF="manual.html#toc13.1">Status Port</A>
</H2>

<P>The status port is the external interface for monitoring and controlling the gatekeeper.
The gatekeeper will send out messages about ongoing calls to all
connected clients and it can receive commands via this interface.</P>

<P>The messages sent by the gatekeeper to the status port are grouped 
into three <B>output trace levels</B>:
<UL>
<LI>Level 0
<BLOCKQUOTE>
Reload notifications and direct replies to entered commands.
</BLOCKQUOTE>
</LI>
<LI>Level 1
<BLOCKQUOTE>
Reload notifications, direct replies to entered commands, CDRs and Route Requests.
</BLOCKQUOTE>
</LI>
<LI>Level 2
<BLOCKQUOTE>
Output everything (reload notifications, direct replies to entered commands, 
CDRs, Route Requests, RAS, ...). This is the <B>default</B> output level.
</BLOCKQUOTE>
</LI>
</UL>

The client connected to the status port can choose the output level it is interested in.</P>

<P>The interface is a simple TCP port (default: 7000), you can connect to with telnet or another client. One example of a different client is the Java GUI, aka GkGUI.
Another example is the Automatic Call Distribution application, aka GnuGk ACD.</P>

<H3>Application Areas</H3>

<P>What you do with the powers of the Status Interface is up to you, but here are a few ideas:
<UL>
<LI>Call Monitoring</LI>
<LI>Monitoring the registered endpoints</LI>
<LI>Graphical User Interface
<BLOCKQUOTE>
See GkGUI.
</BLOCKQUOTE>
</LI>
<LI>Call Routing
<BLOCKQUOTE>
See GnuGk ACD.
</BLOCKQUOTE>
</LI>
<LI>Billing Applications
<BLOCKQUOTE>
Analyze the CDR messages and forward them to a billing application.
</BLOCKQUOTE>
</LI>
<LI>Interfacing external extensions
<BLOCKQUOTE>
If you don't want to publish the source code to additional features, just publish the core functionality and interface to it through the status interface and keep the external part private.
</BLOCKQUOTE>
</LI>
</UL>
</P>

<H3>Examples</H3>

<P>Suppose you are just interested in the CDRs (call details records) and want to process them as a batch at regular intervals.</P>
<P>Here is a simple Perl script (<CODE>gnugk_cdr.pl</CODE>) that starts the gatekeeper and also forks a very simple client for the Status Interface and writes just the CDRs into a logfile. You'll have to modify it a little to fit your needs.</P>
<P>
<PRE>
#!/usr/bin/perl
# sample program that demonstrates how to write the CDRs to a log file
use strict;
use IO::Socket;
use IO::Handle;

my $logfile = "/home/jan/cdr.log";      # CHANGE THIS
my $gk_host = "localhost";
my $gk_port = 7000;
my $gk_pid;

if ($gk_pid = fork()) {
        # parent will listen to gatekeeper status
        sleep(1);       # wait for gk to start
        my $sock = IO::Socket::INET->new(PeerAddr => $gk_host, PeerPort => $gk_port, Proto => 'tcp');
        if (!defined $sock) {
                die "Can't connect to gatekeeper at $gk_host:$gk_port";
        }
        $SIG{HUP} = sub { kill 1, $gk_pid; };   # pass HUP to gatekeeper
        $SIG{INT} = sub { close (CDRFILE); kill 2, $gk_pid; };  # close file when terminated

        open (CDRFILE, ">>$logfile");
        CDRFILE->autoflush(1);  # don't buffer output
        while (!$sock->eof()) {
                my $msg = $sock->getline();
                $msg = (split(/;/, $msg))[0];   # remove junk at end of line
                my $msgtype = (split(/\|/, $msg))[0];
                if ($msgtype eq "CDR") {
                        print CDRFILE "$msg\n";
                }
        }
        close (CDRFILE);
} else {
        # child starts gatekeeper
        exec("gnugk");
}
</PRE>
</P>
<P>Keep in mind that this is just an example to show the usage of the status port.
You can use the FileAcct module to log CDRs in a production system.</P>

<H3>GUI for the Gatekeeper</H3>

<P>There are several Graphical User Interface (GUI) frontends for the gatekeeper.</P>
<P>
<UL>
<LI>Java GUI<P>Developed by Jan Willamowius.
You can monitor the registrations and calls that go through the gatekeeper.
A right-click on a button gives you a pop up menu for that endpoint.</P>
<P>This GUI works with Java 1.0 built into most web browsers.
For security reasons the GUI must be run as a standalone application
or served by a web server on the same IP number as the gatekeeper
(you cannot run it as an applet via a local file).</P>
<P>The program is available at
<A HREF="http://www.gnugk.org/h323gui.html">GnuGk Java GUI</A></P>

</LI>
<LI>GkGUI<P>A new standalone Java program developed by
<A HREF="http://www.citron.com.tw/">Citron Network Inc.</A>
It requires Java 1.4. New features include:</P>
<P>
<UL>
<LI>Monitor multiple gatekeepers simultaneously.</LI>
<LI>Two view modes: Button List and Tree List.</LI>
<LI>Call Detail Record(CDR) and statistics.</LI>
<LI>GK Status Log.</LI>
<LI>Different colors for different endpoint types.</LI>
<LI>Modify gatekeeper configuration.</LI>
<LI>Forced unregister endpoints.</LI>
<LI>Save and print status log and CDR.</LI>
</UL>
</P>
<P>The GkGUI is released under GNU General Public License, available at
<A HREF="http://www.gnugk.org/h323develop.html#java">GnuGk Development</A></P>
</LI>
</UL>
</P>

<H2><A NAME="ss13.2">13.2</A> <A HREF="manual.html#toc13.2">Commands (Reference)</A>
</H2>

<P>This section lists all commands that you can issue to the status port (manually or with an external application). All commands are case-insensitive. But some parameters may be case-sensitive.</P>
<P>The command <CODE>help</CODE> or <CODE>h</CODE> will show you a list of all available commands.</P>
<P>
<UL>
<LI><CODE>Reload</CODE><BR>
<P>Reload the configuration.</P>

</LI>
<LI><CODE>Version</CODE>, <CODE>v</CODE><BR>
<P>Show the version and OS information of the gatekeeper.</P>

</LI>
<LI><CODE>Statistics</CODE>, <CODE>s</CODE><BR>
<P>Show the statistics information of the gatekeeper.
<DL>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
Statistics
-- Endpoint Statistics --
Total Endpoints: 21  Terminals: 17  Gateways: 4  NATed: 2
Cached Endpoints: 1  Terminals: 1  Gateways: 0
-- Call Statistics --
Current Calls: 1 Active: 1 From Neighbor: 0 From Parent: 0
Total Calls: 1539  Successful: 1076  From Neighbor: 60  From Parent: 5
Startup: Fri, 21 Jun 2002 10:50:22 +0800   Running: 11 days 04:22:59
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>PrintAllRegistrations</CODE>, <CODE>r</CODE>, <CODE>?</CODE><BR>
<P>Show all registered endpoints.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
AllRegistrations
RCF|IP:Port|Aliases|Terminal_Type|EndpointID
...
Number of Endpoints: n
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
AllRegistrations
RCF|10.1.1.10:1720|800:dialedDigits=Wei:h323_ID|terminal|1289_endp
RCF|10.0.1.43:1720|613:dialedDigits=Jacky Tsai:h323_ID|terminal|1328_endp
RCF|10.0.1.55:1720|705:dialedDigits=Sherry Liu:h323_ID|terminal|1333_endp
Number of Endpoints: 3
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>PrintAllRegistrationsVerbose</CODE>, <CODE>rv</CODE>, <CODE>??</CODE><BR>
<P>Show details of all registered endpoints.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
AllRegistrations
RCF|IP:Port|Aliases|Terminal_Type|EndpointID
Registration_Time C(Active_Call/Connected_Call/Total_Call) &lt;r&gt;
[Prefixes: ##] (gateway only)
...
Number of Endpoints: n
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
AllRegistrations
RCF|10.0.1.8:1720|Accel-GW2:h323_ID|gateway|1322_endp
Wed, 26 Jun 2002 16:40:03 +0800 C(1/5/33) &lt;1&gt;
Prefixes: 09,002
RCF|10.1.1.10:1720|800:dialedDigits=Wei:h323_ID|terminal|1289_endp
Wed, 26 Jun 2002 16:40:55 +0800 C(0/32/39) &lt;1&gt;
RCF|10.0.1.66:1720|716:dialedDigits=Vicky:h323_ID|terminal|1425_endp
Wed, 26 Jun 2002 16:40:58 +0800 C(1/47/53) &lt;1&gt;
Number of Endpoints: 2
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>PrintCurrentCalls</CODE>, <CODE>c</CODE>, <CODE>!</CODE><BR>
<P>Show all current calls using the same ACF syntax as in call establishment.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
CurrentCalls
Call No. # | CallID | Call_Duration | Left_Time
Dialed_Number
ACF|Caller_IP:Port|Caller_EPID|CRV|DestinationInfo|SrcInfo|IsAnswered;
ACF|Callee_IP:Port|Callee_EPID|CRV|DestinationInfo|SrcInfo|IsAnswered;
...
Number of Calls: Current_Call Active: Active_Call From Neighbor: Call_From_Neighbor \
From Parent: Call_From_Parent
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
CurrentCalls
Call No. 29 | CallID bd c6 17 ff aa ea 18 10 85 95 44 45 53 54 77 77 | 109 | 491
Dial 0953378875:dialedDigits
ACF|10.0.1.49:1720|4048_CGK1|25263|frank:h323_ID|gunter:h323_ID|false;
ACF|10.1.1.1:1720|4037_CGK1|25263|gunter:h323_ID|frank:h323_ID|true;
Call No. 30 | CallID 70 0e dd c0 9a cf 11 5e 00 01 00 05 5d f9 28 4d | 37 | 563
Dial 0938736860:dialedDigits
ACF|10.0.1.48:1032|4041_CGK1|11896|sue:h323_ID|peter:h323_ID|false;
ACF|10.1.1.1:1720|4037_CGK1|11896|peter:h323_ID|sue:h323_ID|true;
Number of Calls: 2 Active: 2 From Neighbor: 0 From Parent: 0
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>PrintCurrentCallsVerbose</CODE>, <CODE>cv</CODE>, <CODE>!!</CODE><BR>
<P>Show details of all current calls.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
CurrentCalls
Call No. # | CallID | Call_Duration | Left_Time
Dialed_Number
ACF|Caller_IP:Port|Caller_EPID|CRV|DestinationInfo|SrcInfo|IsAnswered;
ACF|Callee_IP:Port|Callee_EPID|CRV|DestinationInfo|SrcInfo|IsAnswered;
# Caller_Aliases|Callee_Aliases|Bandwidth|Connected_Time &lt;r&gt;
...
Number of Calls: Current_Call Active: Active_Call From NB: Call_From_Neighbor
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
CurrentCalls
Call No. 48 | CallID 7d 5a f1 0a ad ea 18 10 89 16 00 50 fc 3f 0c f5 | 30 | 570
Dial 0225067272:dialedDigits
ACF|10.0.1.200:1720|1448_endp|19618|frank:h323_ID|gunter:h323_ID|false;
ACF|10.0.1.7:1720|1325_endp|19618|gunter:h323_ID|frank:h323_ID|true;
# Sherry:h323_ID|Accel-GW1:h323_ID|200000|Wed, 26 Jun 2002 17:29:55 +0800 &lt;2&gt;
Number of Calls: 1 Active: 1 From NB: 0
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>Find</CODE>, <CODE>f</CODE><BR>
<P>Find a registered endpoint by an alias or a prefix. To find an alias
of the specified type (h323_ID, dialedDigits), prepend the alias type name
(h323, e164, url, email) to the alias, followed by a colon.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
Find Alias
RCF|IP:Port|Aliases|Terminal_Type|EndpointID
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
f 800
RCF|10.1.1.10:1720|800:dialedDigits=Wei:h323_ID|terminal|1289_endp
;
f 801
SoftPBX: alias 801 not found!
f h323:Wei
RCF|10.1.1.10:1720|800:dialedDigits=Wei:h323_ID|terminal|1289_endp
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>FindVerbose</CODE>, <CODE>fv</CODE><BR>
<P>Find details of a registered endpoint by an alias or a prefix. To find an alias
of the specified type (h323_ID, dialedDigits), prepend the alias type name
(h323, e164, url, email) to the alias, followed by a colon.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
FindVerbose Alias
RCF|IP:Port|Aliases|Terminal_Type|EndpointID
Registration_Time C(Active_Call/Connected_Call/Total_Call) &lt;r&gt;
[Prefixes: ##] (gateway only)
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
fv 02
RCF|10.0.1.100:1720|TFN:h323_ID|gateway|4037_CGK1
Wed, 26 Jun 2002 17:47:29 +0800 C(0/84/120) &lt;1&gt;
Prefixes: 02,09
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>UnregisterIP</CODE><BR>
<P>Forcefully unregister an endpoint by IP and call signaling port.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
UnregisterIP IP[:Port]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
UnregisterIP 10.0.1.31:1720
URQ|10.0.1.31:1032|1326_endp|maintenance;
SoftPBX: Endpoint 10.0.1.31:1720 unregistered!
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>UnregisterAlias</CODE><BR>
<P>Forcefully unregister an endpoint by one of its aliases. To match an alias
of the specified type (h323_ID, dialedDigits), prepend the alias type name
(h323, e164, url, email) to the alias, followed by a colon.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
UnregisterAlias Alias
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
UnregisterAlias 601
URQ|10.0.1.31:1032|1326_endp|maintenance;
SoftPBX: Endpoint 601 unregistered!
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>UnregisterAllEndpoints</CODE><BR>
<P>Forcefully unregister all registered endpoints.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
UnregisterAllEndpoints
URQ|10.0.1.7:1024|1325_endp|maintenance;
URQ|10.0.1.8:1024|1322_endp|maintenance;
URQ|10.0.1.32:1032|1324_endp|maintenance;
URQ|10.0.1.36:1032|1323_endp|maintenance;
URQ|10.0.1.42:1032|1318_endp|maintenance;
Done
;
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>DisconnectCall</CODE><BR>
<P>Disconnect a call with given number (internal, gatekeeper assigned call number,
not the caller's, callee's phone number).
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
DisconnectCall Number
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
DisconnectCall 1533
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>DisconnectIP</CODE><BR>
<P>Disconnect all calls of an endpoint by IP and call signaling port.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
DisconnectIP IP[:Port]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
DisconnectIP 10.0.1.31:1720
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>DisconnectAlias</CODE><BR>
<P>Disconnect all calls of an endpoint by one of its aliases. To match an alias
of the specified type (h323_ID, dialedDigits), prepend the alias type name
(h323, e164, url, email) to the alias, followed by a colon.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
DisconnectAlias Alias
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
DisconnectAlias 601
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>ClearCalls</CODE><BR>
<P>Disconnect all calls on the gatekeeper.</P>

</LI>
<LI><CODE>GK</CODE><BR>
<P>Show the information of the parent gatekeeper.</P>

</LI>
<LI><CODE>Trace</CODE><BR>
<P>Set the status interface output trace level. It controls which messages
are sent to this client:
<UL>
<LI><CODE>trace 0</CODE> or <CODE>trace min</CODE><BR>
<P>Only direct responses to commands and reload notifications.</P>
</LI>
<LI><CODE>trace 1</CODE><BR>
<P>CDRs, direct responses to commands and reload notifications.</P>
</LI>
<LI><CODE>trace 2</CODE> or <CODE>trace max</CODE><BR>
<P>Show all (RAS, CDRs, direct responses to commands, reload notifications, etc).</P>
</LI>
</UL>
</P>

</LI>
<LI><CODE>Debug</CODE><BR>
<P>Only used for debug purpose. Options:
<UL>
<LI><CODE>trc [+|-|n]</CODE><BR>
<P>Show/modify trace level.</P>
</LI>
<LI><CODE>cfg SEC PAR</CODE><BR>
<P>Read and print a config parameter in a section.</P>
</LI>
<LI><CODE>set SEC PAR VAL</CODE><BR>
<P>Write a config value parameter in a section.</P>
</LI>
<LI><CODE>remove SEC PAR</CODE><BR>
<P>Remove a config value parameter in a section.</P>
</LI>
<LI><CODE>remove SEC</CODE><BR>
<P>Remove a section.</P>
</LI>
<LI><CODE>printrm VERBOSE</CODE><BR>
<P>Print all removed endpoint records.</P>
</LI>
</UL>

<DL>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
debug trc 3
debug set RoutedMode H245Routed 1
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>Who</CODE><BR>
<P>Show all people on the status port.</P>

</LI>
<LI><CODE>RouteReject</CODE><BR>
<P>Terminate this call on a virtual queue.
This command is used as a response to a RouteRequest event (see below).
CallingEndpointID and CallRef must be passed back as they are in the coresponding RouteRequest.
The CallID parameter is optional; if it is given it has to be the same format as
signaled by RouteRequest with parameter SignalCallID=1.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
RouteReject CallingEndpointID CallRef [CallID]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
RouteReject endp_4711 1234
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>RouteToAlias</CODE>, <CODE>rta</CODE><BR>
<P>Route this call on a virtual queue to the specified alias.
This command is used as a response to a RouteRequest event (see below).
CallingEndpointID and CallRef must be passed back as they are in the coresponding RouteRequest.
The CallID parameter is optional; if it is given it has to be the same format as
signaled by RouteRequest with parameter SignalCallID=1.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
RouteToAlias Alias CallingEndpointID CallRef [CallID]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
RouteToAlias Suzi endp_4711 1234
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>RouteToGateway</CODE>, <CODE>rtg</CODE><BR>
<P>Route this call on a virtual queue to the specified alias and set the destinationSignallAddress.
This command is used as a response to a RouteRequest event (see below).
You can use this command to route calls to out-of-zone gateways or MCUs not registered with the gatekeeper. Make sure that the 'vqueue' and 'explicit' policy is in effect for these calls.
CallingEndpointID and CallRef must be passed back as they are in the coresponding RouteRequest.
The CallID parameter is optional; if it is given it has to be the same format as
signaled by RouteRequest with parameter SignalCallID=1.
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
RouteToGateway Alias IP:Port CallingEndpointID CallRef [CallID]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
RouteToGateway Suzi 192.168.0.50 endp_4711 1234
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
<LI><CODE>Exit</CODE>, <CODE>q</CODE><BR>
<P>Quit the status port.</P>

</LI>
<LI><CODE>TransferCall</CODE><BR>
<P>Transfer an established call from alias A to alias B. When before alias A is talking with alias X, then alias A is talking with alias B after the TransferCall.</P>
<P>Currently this works only with endpoints that properly support
Q.931 Facility messages (so it doesn't work with Netmeeting).
<DL>
<DT><B>Format:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
TransferCall Source-Alias New-Destination-Alias
</PRE>
</CODE></BLOCKQUOTE>
</P>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
TransferCall Frank Peter
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>

</LI>
</UL>
</P>

<H2><A NAME="ss13.3">13.3</A> <A HREF="manual.html#toc13.3">Messages (Reference)</A>
</H2>

<P>The section describes the messages output to the status interface.</P>
<P>
<UL>
<LI><CODE>GCF|IP|Aliases|Endpoint_Type;</CODE><BR>
<P>The gatekeeper receives a GatekeeperRequest (GRQ) and responds with
a GatekeeperConfirm (GCF).</P>

</LI>
<LI><CODE>GRJ|IP|Aliases|Endpoint_Type|RejectReason;</CODE><BR>
<P>The gatekeeper receives a GatekeeperRequest (GRQ) and responds with
a GatekeeperReject (GRJ).</P>

</LI>
<LI><CODE>RCF|IP:Port|Aliases|Endpoint_Type|EndpointID;</CODE><BR>
<P>The gatekeeper receives a RegistrationRequest (RRQ) and responds with
a RegistrationConfirm (RCF).</P>

</LI>
<LI><CODE>RRJ|IP|Aliases|Endpoint_Type|RejectReason;</CODE><BR>
<P>The gatekeeper receives a RegistrationRequest (RRQ) and responds with
a RegistrationReject (RRJ).</P>

</LI>
<LI><CODE>ACF|Caller_IP:Port|Caller_EndpointID|CRV|DestinationInfo|SrcInfo|IsAnswered[|CallID];</CODE><BR>
<P>The gatekeeper receives an AdmissionRequest (ARQ) and responds with
an AdmissionConfirm (ACF).
The CallID is only sent when SignalCallId=1 is set.</P>

</LI>
<LI><CODE>ARJ|Caller_IP:Port|DestinationInfo|SrcInfo|IsAnswered|RejectReason[|CallID];</CODE><BR>
<P>The gatekeeper receives an AdmissionRequest (ARQ) and responds with
an AdmissionReject (ARJ).
The CallID is only sent when SignalCallId=1 is set.</P>

</LI>
<LI><CODE>DCF|IP|EndpointID|CRV|DisengageReason[|CallID];</CODE><BR>
<P>The gatekeeper receives a DisengageRequest (DRQ) and responds with
a DisengageConfirm (DCF).
The CallID is only sent when SignalCallId=1 is set.</P>

</LI>
<LI><CODE>DRJ|IP|EndpointID|CRV|RejectReason[|CallID];</CODE><BR>
<P>The gatekeeper receives a DisengageRequest (DRQ) and responds with
a DisengageReject (DRJ).
The CallID is only sent when SignalCallId=1 is set.</P>

</LI>
<LI><CODE>LCF|IP|EndpointID|DestinationInfo|SrcInfo;</CODE><BR>
<P>The gatekeeper receives a LocationRequest (LRQ) and responds with
a LocationConfirm (LCF).</P>

</LI>
<LI><CODE>LRJ|IP|DestinationInfo|SrcInfo|RejectReason;</CODE><BR>
<P>The gatekeeper receives a LocationRequest (LRQ) and responds with
a LocationReject (LRJ).</P>

</LI>
<LI><CODE>BCF|IP|EndpointID|Bandwidth;</CODE><BR>
<P>The gatekeeper receives a BandwidthRequest (BRQ) and responds with
a BandwidthConfirm (BCF).</P>

</LI>
<LI><CODE>BRJ|IP|EndpointID|Bandwidth|RejectReason;</CODE><BR>
<P>The gatekeeper receives a BandwidthRequest (BRQ) and responds with
a BandwidthReject (BRJ).</P>

</LI>
<LI><CODE>UCF|IP|EndpointID;</CODE><BR>
<P>The gatekeeper receives an UnregistrationRequest (URQ) and responds with
an UnregistrationConfirm (UCF).</P>

</LI>
<LI><CODE>URJ|IP|EndpointID|RejectReason;</CODE><BR>
<P>The gatekeeper receives an UnregistrationRequest (URQ) and responds with
an UnregistrationReject (URJ).</P>

</LI>
<LI><CODE>IRQ|IP:Port|EndpointID;</CODE><BR>
<P>The gatekeeper sends an InfoRequest (IRQ) to an endpoint to query if it
is still alive. The endpoint shall respond with an InfoRequestResponse (IRR)
immediately.</P>

</LI>
<LI><CODE>URQ|IP:Port|EndpointID|Reason;</CODE><BR>
<P>The gatekeeper sends an UnregistrationRequest (URQ) to an endpoint to
cancel its registration. The endpoint shall respond with
an UnregistrationConfirm (UCF).</P>

</LI>
<LI><CODE>CDR|CallNo|CallId|Duration|Starttime|Endtime|CallerIP|CallerEndId|</CODE> \<BR>
<CODE>CalledIP|CalledEndId|DestinationInfo|SrcInfo|GatekeeperID;</CODE><BR>
<P>After a call disconnected, the call detail record is shown (in one line).</P>

</LI>
<LI><CODE>RouteRequest|CallerIP:Port|CallerEndpointId|CallRef|VirtualQueue|CallerAlias[|CallID];</CODE><BR>
<P>Request for an external application to route an incoming call on a virtual queue.
This can be done with a RouteToAlias or RouteReject command.
The CallID is only sent when SignalCallId=1 is set.</P>

</LI>
</UL>
</P>

<H2><A NAME="statusportfiltering"></A> <A NAME="ss13.4">13.4</A> <A HREF="manual.html#toc13.4">Status Port Filtering</A>
</H2>

<P>Status port filtering facilitates control on the amount and type of output messages shown to the end user.
Filtering is done using regular expressions which are used to decide whether to include (show) or
exclude (ignore) an output message.
Filtering control is done using the following set of commands:</P>
<P>
<UL>
<LI><CODE>addincludefilter REGEX</CODE><BR>
Adds regular expression to the include list
</LI>
<LI><CODE>addexcludefilter REGEX</CODE><BR>
Adds regular expression to the exclude list
</LI>
<LI><CODE>removeincludefilter INDEX</CODE><BR>
Removes filter at given INDEX from the include list
</LI>
<LI><CODE>removeexcludefilter INDEX</CODE><BR>
Removes filter at given INDEX from the exclude list
</LI>
<LI><CODE>filter 1|0</CODE><BR>
Enable/Disable message filtering
</LI>
<LI><CODE>printincludefilters</CODE><BR>
Print include filter list
</LI>
<LI><CODE>printexcludefilters</CODE><BR>
Print exclude filter list
</LI>
</UL>
</P>
<P>In order to enable usage of predefined filters, new section named 
<A HREF="manual-4.html#gkstatusfilteringsect">[GkStatus::Filtering]</A> has been
introduced. At this section, users can put all their predefined filters to be load when status port starts.</P>
<P>
<DL>
<DT><B>Example:</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
[GkStatus::Filtering]
IncludeFilter=.+
ExcludeFilter=.RQ
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>
<P>When filtering come active, by <CODE>filter 1</CODE> command, all messages will be shown but lines with ARQ, LRQ etc.
Same effect can be achieved by using the command line:
<BLOCKQUOTE><CODE>
<PRE>
addincludefilter .+
addexcludefilter .RQ
filter 1
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Note that enable filtering when no filters are defined, automatically excludes all message output.</P>


<HR>
Next
<A HREF="manual-12.html">Previous</A>
<A HREF="manual.html#toc13">Contents</A>
</BODY>
</HTML>