<!doctype linuxdoc system>
<!-- This is the User Manual for OpenH323 Gatekeeper - The GNU Gatekeeper -->
<!-- Maintained:   Chih-Wei Huang <cwhuang@linux.org.tw>                  -->
<!-- Citron Network Inc. 2002                                             -->

<article>
<!-- Title information -->
<title>OpenH323 Gatekeeper - The GNU Gatekeeper 使用手冊
<author>作者：
<htmlurl url="http://www.cwhuang.idv.tw/" name="黃志偉">
<tt><htmlurl url="mailto:cwhuang@linux.org.tw" name="&lt;cwhuang@linux.org.tw&gt;"></tt>
<date>v2.0, 1 August 2002
<!-- bgein on 23 April 2002 -->

<abstract>
這是 OpenH323 Gatekeeper - The GNU Gatekeeper 的中文版使用手冊。
說明如何編譯、安裝、設定與監看 OpenH323 Gatekeeper - The GNU Gatekeeper。
</abstract>

<!-- Table of contents -->
<toc>

<!-- Begin of document -->

<!----------          Next Section          ---------->
<sect>介紹
<sect1>關於此計畫
<p>
<bf>
<url url="http://www.willamowius.de/openh323gk.html" name="OpenH323 Gatekeeper - The GNU Gatekeeper">
</bf>
是一個自由軟體(或稱開放原始碼)計劃，目的在實作一個 H.323 gatekeeper。
H.323 gatekeeper 為 H.323 端點(endpoint)提供通話控制的服務，它是 H.323 標準的一部份。

根據 H.323 規格書的標準，gatekeeper 應提供下列服務：
<itemize>
<item>位址轉換
<item>通話許可管制
<item>頻寬控制
<item>區域管理
<item>信號管制
<item>通話認證
<item>頻寬管理
<item>通話管理
</itemize>

GNU Gatekeeper 依據
<url url="http://www.openh323.org/" name="OpenH323">
實作出以上大部份的功能。

H.323 規格書是由
<url url="http://www.itu.int/" name="ITU">
公佈的國際標準，做為網際網路上語音、影像及資料的通訊標準。詳細的說明見 Paul Jones' <url url="http://www.packetizer.com/iptel/h323/" name="primer on H.323">。

關於 gatekeeper 功能的詳細描述，可見
<url url="http://www.webproforum.com/h323/topic06.html" name="這裡">。

<sect1>版權聲明
<p>
GNU Gatekeeper 是自由軟體計劃，受
<htmlurl url="http://www.gnu.org/licenses/gpl.html" name="GNU 通用公共許可證"> (GNU GPL)
所保護及規範。此外，我們特別允許執行檔可與 OpenH323 及 OpenSSL 的函式庫連接。

簡單的說，GNU 通用公共許可證允許你可以自由的複製、散佈、出售或者修改本軟體。但是要求所有的衍生作品也必須以 GNU 通用公共許可證的規範釋出。這表示，你必須公開所有你修改本軟體的程式碼，以及任何你加進本軟體的程式(如果有的話)。細節請見 COPYING 這個檔案的說明。GNU 通用公共許可證的中文翻譯可在
<htmlurl url="http://www.linux.org.tw/CLDP/doc/GPL.html" name="CLDP"> 取得。

關於自由軟體的概念或理想，可參考
<htmlurl url="http://www.slat.org/faq/" name="軟體自由基金會"> 網站的說明。

如果你不願這樣做，你必須透過狀態介面以 TCP 連線的方式與 Gatekeeper 溝通。利用此方式你可以只將最基本的功能加入 Gatekeeper 中，而不公開你程式的其它部份。

<sect1>名稱
<p>
本計劃的正式名稱是
<em>OpenH323 Gatekeeper - The GNU Gatekeeper</em>，
簡稱 <em/OpenH323GK/ 或 <em/GnuGK/。請不要將本計劃與其它類似計劃搞混了!

目前有好幾個使用 OpenH323 的開放原始碼的 gatekeeper 計劃：
<itemize>
<item><url url="http://opengatekeeper.sourceforge.net/" name="OpenGatekeeper"> - by <url url="http://www.egoboo.com/" name="Egoboo">
<quote>一個功能完整的 gatekeeper 計劃，以 MPL 釋出。不過此計劃已經滿長一段時間沒有進展了。另有一個以 OpenGatekeeper 為基礎實作的 H.323 proxy，叫
<url url="http://openh323proxy.sourceforge.net/" name="OpenH323Proxy">.</quote>
<item><url url="http://www.openh323.org/code.html" name="OpenGK"> - by <url url="http://www.equival.com.au/" name="Equivalence">
<quote>功能還很陽春，也是以 MPL 釋出。</quote>
<item>OpenH323 Gatekeeper - 本計劃。
</itemize>

這幾個 gatekeeper 的計劃都使用非常類似的名稱，的確困擾了大多數的使用者。然而我們的 "OpenH323 Gatekeeper" 是其中最早開始的，因此選擇如此類似的名稱並不是我們的錯。然而為了讓人們能與其它計劃做出更清楚的區別，我們決定加上 "The GNU Gatekeeper" 的子標題，並且使用 <tt/gnugk/ 做為執行檔的名稱。

因此請記得，當你向我們回報問題或提供建議時，請使用本計劃正確的名字：<bf/OpenH323GK/ 或 <bf/GnuGK/。不要再說成是 <em/OpenGatekeeper/ 或 <em/OpenGK/ 了!

<sect1>特色
<p>
2.0 版的主要功能包括：
<itemize>
<item>
重新設計過的註冊及通話管理表格，可安全的在多執行緒下執行，能有效率的管理上萬個端點的註冊及上千通電話。
<item>
新的路由信號模式架構，支援轉送 H.225.0/Q.931 以及 H.245 信號，而不須產生更多的執行緒。因此執行緒的上限不會影響總通話數。
<item>
支援 H.323 proxy 模式，可轉送 RTP/RTCP 媒體通道以及 T.120 資料通道。以 H.245 tunnelling 模式和快速連接(fast-connect)模式開啟的通道皆可支援。在 proxy 模式下所有資料皆經由 Gatekeeper 轉送，端點間無直接的通信量，因此非常適合在 NAT 的環境下使用。
<item>
藉由交換 LRQ/LCF/LRJ 可支援 Gatekeeper 叢集，使通話可以跨越區域(zone)。如果 LRQ 的目的地未知，Gatekeeper 還可將其轉送到下一個 Gatekeeper。
<item>
支援多種認證機制，包括 H.235 密碼(MD5 或 SHA-1 加密)、IP 樣式或前置碼匹配的方式。支援以 MySQL 或 LDAP 做為後端認證資料庫。
<item>
支援 alternate gatekeepers 機制以達成備援或負載平衡的目的。如果 Gatekeeper 負擔過重，會將端點重導至其它的 gatekeepers 上。
<item>
可註冊至上層 Gatekeeper 成為一端點(閘道器)。以此方式可輕易的建立 Gatekeeper 的階層架構。
<item>
透過狀態界面可監視並控制 Gatekeeper，包括所有註冊及通話的統計。
<item>
可由狀態界面輸出通話明細記錄(CDR)，供後端計費系統使用。
<item>
絕大部份的設定都可在執行時動態的改變。藉由狀態界面下 `<tt/reload/' 指令，或送 <tt/HUP/ 信號給行程(僅適用於 Unix 平台)可讓 Gatekeeper 重新讀取設定檔。
</itemize>

<sect1>下載
<p>
最新的穩定及發展中的版本都可從這個 <url url="http://www.willamowius.com/h323download.html" name="下載網頁"> 取得。

若你想使用 CVS，可從
<url url="http://sourceforge.net/cvs/?group_id=4797" name="Sourceforge">
(<url url="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/openh323gk/" name="Web-GUI">)
的下載網頁取得。請注意，那是最新的發展版本，很可能會不穩定。

你也可以從
<url url="http://sourceforge.net/project/showfiles.php?group_id=4797" name="Sourceforge">
下載預先編譯好的執行檔，不過只有某些平台的版本而已。

<sect1>通信論壇
<p>
本計劃有兩個通信論壇(mailing list)，一個是給開發者用的，另一個是給一般的使用者用。

一般的使用、設定問題請寫信到
<url url="mailto:Openh323gk-users@sourceforge.net" name="users mailing list">。你可以在此找到所有的
<url url="http://sourceforge.net/mailarchive/forum.php?forum_id=8549" name="郵件收集">。欲加入此通信論壇，請點
<url url="http://lists.sourceforge.net/lists/listinfo/openh323gk-users" name="此處">。

若要回報問題，或提供錯誤更正，請寫信到
<url url="mailto:Openh323gk-developer@sourceforge.net" name="developers mailing list">。點選
<url url="http://sourceforge.net/mailarchive/forum.php?forum_id=3079" name="此處"> 可以找到所有的郵件收集。請注意，一般的使用問題不要寄到這裡，而該寄到上述的使用者論壇。這個論壇是給開發者使用的。當然，如果你想對此計劃有所貢獻，請
<url url="http://lists.sourceforge.net/lists/listinfo/openh323gk-developer" name="加入此論壇">。

<sect1>貢獻者
<p>
目前本計劃的主持人是
<url url="http://www.willamowius.de/" name="Jan Willamowius">
<tt><htmlurl url="mailto:jan@willamowius.de" name="&lt;jan@willamowius.de&gt;"></tt>。

2.0 版主要的功能與特性是由台灣的
<url url="http://www.cwhuang.idv.tw/" name="黃志偉">
<tt><htmlurl url="mailto:cwhuang@linux.org.tw" name="&lt;cwhuang@linux.org.tw&gt;"></tt>
和
<url url="http://www.citron.com.tw/" name="呈祺資訊網路">
所實作，包括重新設計以適合在多執行緒並行仍安全無慮的註冊及通話管理表格，新的路由模式(routed mode)架構、H.323 代理器(proxy)、H.235 認證模組以及 MySQL 後端連接。

位於德國的
<url url="http://www.mediaways.net/" name="mediaWays">
公司正在為本計劃加入 LDAP 資料庫子系統，重疊遞送(overlapped sending)以及先進路由機制。

本計劃最初是由 Xiang Ping Chen, Joe Metzger and Rajat Todi 所發展。

<bf/譯註：/本使用手冊是先寫成英文版再翻譯為中文。特別感謝張崇嚴和吳恆昇協助翻譯。


<!----------          Next Section          ---------->
<sect>編譯與安裝
<p>
<sect1>編譯 Gatekeeper
<p>
要編譯 Gatekeeper，你需要 PWLib 1.2 版和 OpenH323 1.8 版或以上。開發中的 Gatekeeper 版本通常需要搭配最新版的 OpenH323。

相關的函式庫可以到
<url url="http://www.openh323.org/code.html" name="OpenH323 下載網頁">
取得。編譯 OpenH323 的方式，請參考
<url url="http://www.openh323.org/build.html" name="這裡">
的指示。

編譯的順序：
<enum>
<item>PWLib (release 版 + debug 版)
<item>OpenH323
<item>OpenH323 test application (不一定要, 只是用來確定到目前為止一切正常。)
<item>Gatekeeper
</enum>

在 Unix 作業系統下，請先跳至 Gatekeeper 目錄。執行 <tt/make debug/ 來編譯 debug 版，或執行 <tt/make opt/ 來編譯 release 版。執行 <tt/make both/ 則可同時編譯兩種版本。

注意：你必須使用 GCC 2.95.2 版或以上，舊版的 GCC 可能無法正常編譯。

在 Windows 作業系統下，需開啟 Microsoft Visual C++ 6.0 or 7.0 (Visual C++ 5.0 太舊)來編譯所提供的 project (<tt/gk.dsw/) 。

Gatekeeper 從 2.0 版開始支援以 MySQL 和 LDAP 做為後端資料庫。如果你不需要這些支援，可以在 make 之前加上參數：

<tscreen><verb>
$ NO_MYSQL=1 make both
</verb></tscreen>

若要取消 LDAP 的支援：
<tscreen><verb>
$ NO_LDAP=1 make both
</verb></tscreen>

或是取消兩者：
<tscreen><verb>
$ NO_MYSQL=1 NO_LDAP=1 make both
</verb></tscreen>

<sect1>安裝 Gatekeeper
<p>
安裝 Gatekeeper 不需要什麼特殊的安裝步驟，只需將編譯好的可執行檔拷貝到你想存放的目錄裡，然後再手動新增一個設定檔。

設定檔的範例放在原始程式碼的 <tt>etc/</tt> 子目錄內。請參閱 <ref id="config" name="設定檔"> 一節，有更詳盡的說明。

舉例：在 Linux x86 平台下，最佳化的執行檔 <tt/gnugk/ 會產生在 <tt>obj_linux_x86_r/</tt> 子目錄裡。你可以把它拷貝到 <tt>/usr/sbin/</tt> 目錄，然後再新增設定檔 <tt>/etc/gnugk.ini</tt> 。最後，輸入以下指令來啟動 Gatekeeper：
<tscreen><verb>
$ /usr/sbin/gnugk -c /etc/gnugk.ini -o /var/log/gnugk.log -ttt
</verb></tscreen>

請參閱 <ref id="commandline" name="命令列參數"> 一節，有更詳盡的說明。

<sect1>預先編譯好的執行檔
<p>
如果你不想下載原始程式碼來自行編譯，在
<url url="http://sourceforge.net/project/showfiles.php?group_id=4797" name="SourceForge">
裡有一些已經編譯好的套件可供使用。但並非所有的版本都有預先編譯好的執行檔，下載前請先看清楚。

<bf/Red Hat packages (.rpm)/<p>
請先下載 RPMs ，再以 <tt/root/ 身份，輸入以下的指令來安裝 Gatekeeper：
<tscreen><verb>
$ rpm -Uvh gnugk-x.x.x.rpm（你下載的檔案的名稱）
</verb></tscreen>

<bf/Debian packages (.deb)/<p>
如果你是使用 unstable 版本的 Debian，請以 <tt/root/ 身份，輸入以下的指令來安裝 Gatekeeper：
<tscreen><verb>
$ apt-get install openh323gk
</verb></tscreen>


<!----------          Tutorial Section          ---------->
<sect>入門指引
<p>
<sect1>第一個簡單的試驗
<p>
選兩台連上區域網路的 Linux 工作站，裡面要安裝 OpenH323 1.1 版或以上和 OhPhone。在第一台機器上開兩個主控台，分別執行 Gatekeeper 和 ohphone。

<tscreen><verb>
jan@machine1 > gnugk -ttt
</verb></tscreen>

上一行指令表示：Gatekeeper 現在以直接信號模式執行。<tt/-ttt/ 參數指示 Gatekeeper 把除錯訊息顯示在主控台。你也可以用 "<tt/-o logfile/" 把除錯訊息存到一個檔案裡。關於信號模式的說明，請參閱 <ref id="routed" name="下一節"> 的說明。

<tscreen><verb>
jan@machine1 > ohphone -l -a -u jan
</verb></tscreen>

上一行指令表示：OhPhone 現在正在等候來電(<tt/-l/)，而且會自動接聽來電(<tt/-a/)。此外，OhPhone 會自動偵測 Gatekeeper，然後用 jan 這個使用者名稱來註冊到 Gatekeeper。(在某些原因下，若 OhPhone 無法自動偵測到 Gatekeeper，可以用 "<tt/-g 1.2.3.4/" 來指定運行 Gatekeeper 那一台機器的 IP 位置。)

在第二台機器上只需執行 OhPhone。

<tscreen><verb>
peter@machine2 > ohphone -u peter jan
</verb></tscreen>

上一行指令表示：第二台機器上的 OhPhone 會以 peter 這個使用者名稱來註冊到成功偵測到的 Gatekeeper，然後試著打電話給使用者 jan。Gatekeeper 會把使用者名稱 jan 轉換成 jan 所在的那一台機器的 IP 位置(在這個情形下是第一台機器)。如此一來，第二台機器上的 OhPhone 就知道應該要打給第一台機器才能找到 jan。

當有來電時，第一台機器上的 OhPhone 就會自動接通，最後 Peter 和 Jan 就能開始閒聊。

<sect1>用狀態界面來監控 Gatekeeper
<p>
現在我們試著來看看 Gatekeeper 處理了哪些信息。在第一台機器開一個新的主控台，然後用 telnet 來連到 Gatekeeper。

<tscreen><verb>
jan@machine1 > telnet machine1 7000
</verb></tscreen>

這時，你很有可能會收到 "Access forbidden!" 這個訊息。這是因為並非所有的人都能任意監控 Gatekeeper。現在我們新增一個檔案叫 <tt/gatekeeper.ini/，放到我們啟動 Gatekeeper 的那個目錄裡。<tt/gatekeeper.ini/ 的內容包括以下四行：

<tscreen><verb>
[Gatekeeper::Main]
Fourtytwo=42
[GkStatus::Auth]
rule=allow
</verb></tscreen>

請先用 Ctrl-C 停止 Gatekeeper，然後再重新啟動一次 Gatekeeper。當我們再次執行 telnet machine1 7000，就能與 Gatekeeper 保持連線了。

現在再重複 Peter 打給 Jan 的那個試驗，看看 Gatekeeper 在直接信號模式下處理了哪些訊息。在 telnet session 裡，有很多指令可以被執行。你可以鍵入"<tt/help/" 來列出可用的指令。如果你要結束與 Gatekeeper 的 telnet session ，則先鍵入 "<tt/quit/" ，再按 Enter。

<sect1>以路由信號模式啟動 Gatekeeper
<p>
啟動 Gatekeeper 於路由信號模式，就是表示 Gatekeeper 會要求所有的通話信號都要經過 Gatekeeper 來轉送。由於所有的信號都會通過 Gatekeeper，因此可以讓 Gatekeeper 對通話行為有更大的控制權。

<tscreen><verb>
jan@machine1 > gnugk -r
</verb></tscreen>

上一行指令表示以路由模式來執行 Gatekeeper。再一次 telnet 到埠號 7000，打一通電話看看 Gatekeeper 現在會處理哪些信息。注意：所有與多媒體相關的封包（包括聲音和影像），仍然是在兩個端點(就是試驗中那兩個 OhPhone)間直接傳送。注意：因為 Gatekeeper 路由模式更加的複雜，所以你很有可能在這個模式下遇到 Gatekeeper 程式上的錯誤。不過也無所謂，再執行一次就好囉。;-)

<p>
<sect1>虛擬的交換機：中斷通話
<p>
到目前為止，Gatekeeper 所表現出來的功能只是將符號名稱轉換成 IP 位置。雖然這是一個重要的功能，但卻不足以令人感到驚奇。

事實上，Gatekeeper 能夠對通話進行多樣化的控制，例如：中斷通話。當你連接到 Gatekeeper 的狀態界面，可以鍵入 "<tt/PrintCurrentCalls/" 來列出所有進行中的通話。如果你要終止兩個端點間的通話，你可以任意選擇其中一台的 IP 位置，然後鍵入 <tt/Disconnectip xxx.xxx.xxx.xxx/ 來中斷此通話。

你也可以寫一個簡單的程式，連線到 Gatekeeper 的狀態界面來監控所有進行中的通話。或是限制最長的通話時間為五分鐘，以免有人濫用系統資源。

Gatekeeper 也能做到來電轉接(call transfers)和來電跟隨(call forwarding)的功能。不過，目前尚未進行實作。

<sect1>將通話轉送給一般電話
<p>
要是沒有用 H.323 閘道器(Gateway)，網路電話的使用者只能撥打給其他網際網路上擁有網路電話的使用者。如果要撥打給傳統電話的用戶，就必須使用閘道器。

<tscreen><verb>
_________________          ______________
| endpoint "jan"|          |            |
| 192.168.88.35 |--------->| Gatekeeper |
|_______________|          |            |
_________________          |            |
| gateway "gw1" | outgoing |            |
| 192.168.88.37 |<---------|____________|
|_______________|
</verb></tscreen>


使用閘道器時， Gatekeeper 本身必須先知道哪些通話必須先被轉送到閘道器才能撥號出去，而哪些通話可以直接透過 Gatekeeper 做內部撥號。你可修改 Gatekeeper 設定檔的 [RasSvr::GWPrefixes] 小節來加以規範，告知 Gatekeeper，當撥打號碼的前幾個號碼符合設定條件時，就應該要轉送到閘道器。

<tscreen><verb>
[RasSvr::GWPrefixes]
gw1=0
</verb></tscreen>

以上的設定指示 Gatekeeper ，如果被撥打的 E.164 號碼開頭是 0 時，就將這通電話轉送給用 "gw1" H.323 alias 註冊到 Gatekeeper 的那一台閘道器，然後再由閘道器撥給目的地。這時如果沒有任何一台閘道器是用 "gw1" 這個 H.323 alias 註冊到 Gatekeeper，那電話就無法接通(注意：設定時，必須使用 Gateway 的 alias ，不能使用閘道器的 IP 位置來設定)。

<sect1>改寫 E.164 號碼
<p>
若你使用了閘道器，你通常會在閘道器內部使用不同的號碼。Gatekeper 在收到被撥的號碼時，可以先將號碼改寫，然後再將改寫後的號碼轉送到閘道器，進入電話網路撥號出去。你可以使用 <ref id="rewrite" name="RasSvr::RewriteE164"> 這一小節來作號碼的改寫。

以下的例子中，你可以用網路電話撥打一個喜歡的號碼 12345 ，事實上，卻是接通到 "gw1" 這台 gateway 後的電話，實際號碼卻是 08765。

<tscreen><verb>
[RasSvr::GWPrefixes]
gw1=0

[RasSvr::RewriteE164]
12345=08765
</verb></tscreen>


<!----------          Reference Section          ---------->
<sect>參考手冊
<p>
Gatekeeper 的行為完全取決於命令列選項和其設定檔案。一些命令列選項可能會覆蓋掉設定檔中的設定。例如: <tt/-l/ 選項將會覆蓋過設定檔中的 <tt/TimeToLive/ 設定。

<sect1>命令列選項
<label id="commandline">
<p>
幾乎每一個選項都有短格式及長格式，例如:
<tt/-c/ 和 <tt/--config/ 是相同的意思。
<p>

<sect2>基本選項
<p>
<descrip>
<tag/<tt/-h  --help//
顯示所有可獲得的選項。
<tag/<tt/-c  --config filename//
指定要使用的設定檔名。
<tag/<tt/-s  --section section//
指定要使用設定檔中的那一節做為主要章節。預設是 [Gatekeeper::Main]。
<tag/<tt/-i  --interface IP//
指定 Gatekeeper 監聽的界面(IP)。你可以省略這個選項讓 Gatekeeper 自動選擇監聽的 IP，除非你想要讓 Gatekeeper 監聽特定的 IP。
<tag/<tt/-l  --timetolive n//
指定端點註冊後有效存在的時間，單位為秒。這個選項將會覆蓋掉設定檔中的 <tt/TimeToLive/ 設定。更詳細的說明請參考<ref id="ttl" name="下一小節">。
<tag/<tt/-b  --bandwidth n//
指定 Gatekeeper 可獲得的總頻寬。不指定這個選項的話，頻寬管理功能預設將關閉。
<tag/<tt/--pid filename//
指定 pid 檔案,僅 Unix 版本有效。
</descrip>

<sect2>信號模式
<p>
這裡所列出的選項將會覆蓋掉設定檔中 <ref id="routed" name="[RoutedMode]"> 小節的設定。
<descrip>
<tag/<tt/-d  --direct//
使用直接信號模式。
<tag/<tt/-r  --routed//
使用路由信號模式。
<tag/<tt/-rr  --h245routed//
使用路由信號模式，並且啟動 H.245 路由模式。
</descrip>

<sect2>除錯訊息
<p>
<descrip>
<tag/<tt/-o  --output filename//
將除錯訊息寫到指定的檔案中。
<tag/<tt/-t  --trace//
加越多的 <tt/-t/ ,輸出的訊息將會越多越詳細。
例如: 使用 <tt/-ttttt/ 將除錯等級設成 5。
</descrip>

<sect1>設定檔
<label id="config">
<p>
本程式的設定檔是一標準的文字檔。基本的格式是：

<tscreen><verb>
[Section String]
鍵值=設定字串
</verb></tscreen>

一行的開頭若是井號(<tt/#/)或分號(<tt/;/)代表是註解。

在 <tt>etc/</tt> 子目錄下的 <tt/complete.ini/
包含了所有的章節及選項。一般來說你並不需要使用全部，那是沒有意義的。選擇你需要的章節使用。該目錄下還有許多有用的範例可供參考，你可以視情況修改後使用。

程式執行時也可以更改設定檔以改變 Gatekeeper 的行為。當你修改完後，記得要從狀態界面下 <tt/reload/ 指令，或者，在 Unix 上可以送 <tt/HUP/ 給 Gatekeeper 的行程。如：
<tscreen><verb>
kill -HUP `cat /var/run/gnugk.pid`
</verb></tscreen>

<sect2>Section &lsqb;Gatekeeper::Main&rsqb;
<p>
<itemize>
<item><tt/Fourtytwo=42/<newline>
預設值：<tt>無</tt>
<p>
本設定只是用來測試設定檔是否存在。如果找不到的話，會出現警示訊息。請確定你的設定檔包含了這一行。

<item><tt/Name=OpenH323GK/<newline>
預設值：<tt/OpenH323GK/
<p>
指定 Gatekeeper 的識別字串。本 Gatekeeper 僅會回應包含此識別字串的 GRQ，同時在回應給端點的訊息中也會包含此字串。

<item><tt/Home=192.168.1.1/<newline>
預設值：<tt/0.0.0.0/
<p>
指定此 Gatekeeper 傾聽(listen)的 IP 位址。也就是說，Gatekeeper 僅會接受送到此 IP 位址的連線請求。若是指定為 <tt/0.0.0.0/ 則表示所有的 IP 都可接受。一般來說你並不需要指定此選項，除非你想讓 Gatekeeper 只綁在某個你指定的 IP 上。

<item><tt/EndpointIDSuffix=_gk1/<newline>
預設值：<tt/_endp/
<p>
Gatekeeper 會為每個來註冊的端點指定一個獨一無二的識別字串。本選項可用來指定要附加在識別字串後的字元。若你有好幾個 Gatekeeper 此選項就特別有用。

<item><label id="ttl"><tt/TimeToLive=300/<newline>
預設值：<tt/-1/
<p>
H.323 端點向 Gatekeeper 的註冊是有時效性的。Gatekeeper 可在
RCF 的 <bf/timeToLive/ 欄位中指定註冊的時間。在指定的時間過後，註冊就失效了。端點必須定期持續的更新註冊，並且設定 RRQ 中的 <bf/keepAlive/ 欄位。這種更新註冊的訊息稱為 lightweight RRQ，僅需包含 H.225.0 中規定的最少資訊即可。

本選項用來指定註冊的時間，單位是秒數。不過端點可以在 RRQ 中的 <bf/timeToLive/ 欄位指定一個比這更短的時間。但為了避免產生大量的 RRQ 註冊訊息，若你指定比 60 秒更短的時間，Gatekeeper 會自動調整為 60 秒。

一旦某一端點的註冊期效過了，Gatekeeper 會接連送出兩個 IRQ 訊息，詢問此端點是否仍活著。若是此端點回應 IRR，Gatekeeper 便會主動延長註冊的期效。否則，Gatekeeper 會送 URQ 通知此端點離線，理由是 <bf/ttlExpired/。此時端點必須以完整的 RRQ 訊息重新註冊。

若將此選項指定為 <tt/-1/，則可關閉註冊時效的檢查。

<item><tt/TotalBandwidth=100000/<newline>
預設值：<tt/-1/
<p>
所有可用的頻寬，單位為 100 bits/s。

<item><tt/RedirectGK=Endpoints > 100 || Calls > 50/<newline>
預設值：<tt>無</tt>
<p>
當此 Gatekeeper 負擔過重時，利用此選項你可將過多的請求重導至其它的 Gatekeeper 上。例如，上述的設定表示若是註冊的端點數量到達 100 個時，更多的 RRQ 將會被拒絕，或者是同一時間的通話數量到達 50 時，再多的 ARQ 也將會被拒絕。

此外，你還可以將此選項設為 <tt/temporary/ 或 <tt/permanent/ 而主動將所有的端點都重導至其它的 Gatekeeper。此 Gatekeeper 在回應的 RAS 拒絕訊息中，會包含一個定義在 <tt/AlternateGKs/ 中的 Gatekeeper 清單，端點可根據優先權選擇向其它的 Gatekeeper 要求服務。注意若是設為 <tt/permanent/ 表示你的端點將一去不回，再也不會向原來的 Gatekeeper 註冊了。另外還請注意這個功能只有對支援 H.323 version 4 的端點有效。

<item><tt/AlternateGKs=1.2.3.4:1719:false:120:OpenH323GK/<newline>
預設值：<tt>無</tt>
<p>
此選項可讓你指定其它的 Gatekeeper 做為備援使用。也就是說，可以讓某些端點向第一台 Gatekeeper 註冊，而其餘端點向第二台 Gatekeeper。你甚至可以讓兩台
Gatekeeper 輪替使用以達到負載平衡的目的。不過此功能尚未經完整的測試，請小心。我們以 "primary GK" 代表這台你正在設定的 Gatekeeper，而 "alternate GK" 表示其餘做為備援用的 Gatekeeper。Primary GK 會在 RCF 中包含一欄位，告訴端點有那些額外的
Gatekeeper 可以使用。不過因為 alternate GK 需要知道在 primary GK 所有的註冊資料，否則它會拒絕通話。因此 primary GK 必須將所有的 RRQ 轉送到 alternate GK 上。

本選項用來指定 alternate GK 的清單，以分號區隔，每一項中再以冒號來細分。第一及第二小項指定 alternate GK 的 IP 及 port，第三小項指定端點在使用 alternate GK 通話前是否要先向其註冊。因為 primary GK 會轉送 RRQ，因此通常不需要再行註冊。第四小項指定優先權，值愈小表示優先順序愈高。通常 primary GK 的優先權是 1。最後一小項指定 alternate GK 的識別字串。

<item><tt/SendTo=1.2.3.4:1719/<newline>
預設值：<tt>無</tt>
<p>
指定要轉送 RRQ 的 IP 位垃及 port。並不需要和 <tt/AlternateGKs/ 相同，因此設為獨立的選項。

<item><tt/SkipForwards=1.2.3.4:5.6.7.8/<newline>
預設值：<tt>無</tt>
<p>
為避免循環轉送，你不可以將收到的轉送訊息再轉送出去(不論 primary 或 alternate GK 都一樣)。我們使用兩種機制來辨別是否為轉送訊息，第一是查看訊息是否包含某一特定欄位，再來是看訊息是否從此選項指定的 IP 送過來。

<item><tt/StatusPort=7000/<newline>
預設值：<tt/7000/
<p>
指定用來監看 Gatekeeper 之狀態界面的埠號。
細節參見 <ref id="monitor" name="監看"> 一節。

</itemize>

大多數的使用者不需要更改以下的設定，這主要是用來做為測試，或是非常特殊的情況下使用。

<itemize>
<item><tt/UnicastRasPort=1719/<newline>
預設值：<tt/1719/
<p>
Gatekeeper 的 RAS 埠號。

<item><tt/MulticastPort=1718/<newline>
預設值：<tt/1718/
<p>
Gatekeeper 的 RAS 群播埠號。

<item><tt/MulticastGroup=224.0.1.41/<newline>
預設值：<tt/224.0.1.41/
<p>
Gatekeeper 的 RAS 群播通道位置。

<item><tt/EndpointSignalPort=1720/<newline>
預設值：<tt/1720/
<p>
端點的預設信號通道埠號。

<item><tt/ListenQueueLength=1024/<newline>
預設值：<tt/1024/
<p>
TCP 可接受連線的佇列長度。

<item><tt/SignalReadTimeout=1000/<newline>
預設值：<tt/1000/
<p>
狀態界面通道的逾時時間，單位為毫秒。

<item><tt/StatusReadTimeout=3000/<newline>
預設值：<tt/3000/
<p>
信號通道(Q.931)的逾時時間，單位為毫秒。
</itemize>

<sect2>Section &lsqb;RoutedMode&rsqb;
<label id="routed">
<p>
當端點發出通話請求時，通話的信號傳送的方式有兩種。第一種稱為<bf/直接信號模式/，這個模式下信號直接送到受話的端點。第二種稱為<bf/路由信號模式/，此種模式下信號會經由 Gatekeeper 轉送到受話的端點。採用何種信號模式是由 Gatekeeper 來決定。

在路由信號模式下，Gatekeeper 還可以選擇是否再轉送 H.245 控制通道，以及語音、影像或資料的邏輯通道。因此衍生出下列模式：

<descrip>
<tag/情況一/
不轉送。也就是，H.245 通道及邏輯通道皆由兩個端點直接建立。
<tag/情況二/
轉送 H.245 控制通道，但邏輯通道仍由兩個端點直接建立。這種情況稱為 <bf/H.245 路由模式/。
<tag/情況三/
所有通道皆由 Gatekeeper 轉送，包括語音、影像的 RTP/RTCP 資訊，以及 T.120 的資料通道。這種情況下，兩個端點之間沒有直接的通信量，因此又稱為 H.323 代理器(Proxy)，可視為一種 H.323 到 H.323 的閘道器(gateway)。
</descrip>

本小節定義與信號路由模式相關的一些選項，包括情況一及二。情況三的選項定義在
<ref id="proxy" name="下一小節">。本節所有的設定都可在執行時期透過 <tt/reload/ 指令調整。

<itemize>
<item><tt/GKRouted=1/<newline>
預設值：<tt/0/
<p>
是否啟動路由信號模式。

<item><tt/H245Routed=1/<newline>
預設值：<tt/0/
<p>
是否啟動 H.245 路由模式。當然，只有在 <tt/GKRouted=1/ 時才有效。

<item><tt/CallSignalPort=0/<newline>
預設值：<tt/1721/
<p>
通話信號所使用的埠號，預設是 <tt/1721/。我們不使用 H.323 規定的 <tt/1720/，因此你可以在同一台機器上同時執行 Gatekeeper 及 H.323 端點程式。若設為 <tt/0/ 則會任選一個可用的埠號。

<item><tt/CallSignalHandlerNumber=2/<newline>
預設值：<tt/1/
<p>
指定信號處理器的數目。若你的 Gatekeeper 負擔很重，你可以試著增加此數目以改善效率。注意程式執行後此數目僅能增加不能減少。如果你不知道該設多少，就設為你機器上的 CPU 數目(也就是，雙 CPU 的機器就設為 2)。

<item><tt/AcceptNeighborsCalls=1/<newline>
預設值：<tt/1/
<p>
打開這個選項的話，Gatekeeper 會接受來自鄰近 Gatekeeper 或是上層 Gatekeeper 打進自己的區域，前題是 Setup 中的 <bf/destinationAddress/ 欄位符合某一已註冊的端點。此外，Gatekeeper 還會用它自己的信號位址放進回應 LRQ 的 LCF 中。這表示，在 GK-GK 的通話中信號會經由第二個 Gatekeeper 來轉送。因此第二個 Gatekeeper 可以正確的在 CDR 中記錄通話時間。

<item><tt/AcceptUnregisteredCalls=1/<newline>
預設值：<tt/0/
<p>
打開這個選項的話，Gatekeeper 會接受任意未註冊的端點打電話進來。不過，這將引起安全上的疑慮。除非你的網路是可信任的，否則不要輕易開啟這個選項。

<item><tt/RemoveH245AddressOnTunneling=1/<newline>
預設值：<tt/0/
<p>
某些端點會在 Q.931 的 UUIE 欄位中包含 h245Address，同時又設定 h245Tunneling 旗號。雖然這是合法的，然而在某些不良的實作上會導致互通性的問題。如果打開此選項，Gatekeeper 會在 h245Tunneling 旗號被設定時移除 h245Address 欄位。因此將迫使另一端點停留在 tunnelling 的模式，而避免互通性的問題。建議將此選項打開。

<item><tt/DropCallsByReleaseComplete=1/<newline>
預設值：<tt/0/
<p>
根據 H.323 規格書，Gatekeeper 可以藉由送出 RAS DisengageRequest (DRQ) 的訊息通知端點切斷一個通話。然而，某些不良的端點會忽略此訊息。若是打開此選項，Gatekeeper
會改送 Q.931 Release Complete 來強迫切斷通話。如果你發現從 Gatekeeper 無法強迫切斷通話，可以嘗試打開此選項。

<item><tt/SendReleaseCompleteOnDRQ=1/<newline>
預設值：<tt/0/
<p>
在通話結束時，端點會同時透過 Q.931 送出 Release Complete，以及透過 RAS 送出 DRQ。有可能因為 DRQ 先被收到處理，導致 Gatekeeper 關閉信號通道，而使得
Release Complete 無法被送到另一端點。某些端點(例如 Cisco CallManager)即使當信號通道關閉時也不會自動切斷通話，而導致問題，例如假使發話端掛斷了，受話端仍持續響鈐。將此選項打開可讓 Gatekeeper 在收到 DRQ 而關閉信號通道前主動送出 Release Complete。

<item><tt/SupportNATedEndpoints=1/<newline>
預設值：<tt/0/
<p>
是否允許端點從 NAT 伺服器後面來註冊。如果打開的話，Gatekeeper 會將 Q.931 及 H.245 通道中的 IP 位址轉換為 NAT 伺服器的 IP 位址。不過，你仍舊需要打開 NAT 伺服器的轉送機制以轉送 RTP/RTCP 的資料。

例如，採用 Linux 核心 2.4.x 的 NAT 伺服器可使用 <tt/iptables/ 來開啟轉送：
<tscreen><verb>
$ iptables -t nat -A PREROUTING -p udp -d $NATIP -j DNAT --to $EPIP
</verb></tscreen>

<item><tt/Q931PortRange=20000-20999/<newline>
預設值：<tt/0/ (任意)
<p>
指定 Q.931 信號通道使用的埠號範圍。注意此範圍將限制可同時通話的數量。

<item><tt/H245PortRange=30000-30999/<newline>
預設值：<tt/0/ (任意)
<p>
指定 H.245 控制通道使用的埠號範圍。注意此範圍將限制可同時通話的數量。
</itemize>

<p>
<sect2>Section &lsqb;Proxy&rsqb;
<label id="proxy">
<p>
本節定義 Gatekeeper 作為 H.323 proxy 的一些特性。在 proxy 模式下，Gatekeeper
將轉送所有從發話端到受話端的所有資料，因此兩個端點之間沒有直接的通信。如果你有一些端點位於 NAT 伺服器之後使用私有 IP，而有些端點在 NAT 外使用公用 IP 的話，proxy 模式將對你非常有用。

GNU Gatekeeper 支援轉送傳送聲音及影像的 RTP/RTCP 通道，以及傳送資料的 T.120 通道。不論是透過快速連接(fast-connect)程序或是 H.245 tunnelling 模式開啟的邏輯通道都能夠支援。

請注意，要讓 proxy 模式順利運作，Gatekeeper 對發話端和受話端兩邊的網路必須要有<bf/直接的連線/。

<itemize>
<item><tt/Enable=1/<newline>
預設值：<tt/0/
<p>
是否開啟 proxy 模式。當然你必須先使用<ref id="routed" name="前一節">介紹的路由信號模式。你不須指定使用 H.245 路由，Gatekeeper 會在必要時自動使用。

<item><tt>InternalNetwork=10.0.1.0/24</tt><newline>
預設值：<tt>無</tt>
<p>
定義內部網路區段。可指定多個網段，以分號或逗號區隔。僅有在發話端及受話端其中之一位於這裡所定義的內部網路區段，而另一個位於內部網路之外時，proxy 模式才會開啟。如果未指定，所有的通話都會使用 proxy 模式。

<descrip>
<tag/格式：/
<tt>InternalNetwork=network address/netmask[,network address/netmask,...]</tt>
<p>
其中 netmask 部份可用 <tt/./ 記號或 CIDR 表示法，如下例所示：
<tag/範例：/
<tt>InternalNetwork=10.0.0.0/255.0.0.0,192.168.0.0/24</tt>
</descrip>

<item><tt/T120PortRange=40000-40999/<newline>
預設值：<tt/0/ (random)
<p>
指定 T.120 通道的埠號範圍。注意此範圍將限制可同時通話的數量。

<item><tt/RTPPortRange=50000-59999/<newline>
預設值：<tt/10000-59999/
<p>
指定 RTP/RTCP 通道的埠號範圍。注意此範圍將限制可同時通話的數量。
</itemize>

<sect2>Section &lsqb;GkStatus::Auth&rsqb;
<p>
定義狀態界面的存取權限。
<itemize>
<item><tt/rule=allow/<newline>
預設值：<tt/forbid/
<p>
可用值有
<itemize>
<item><tt/forbid/ - 不允許任何連線。
<item><tt/allow/ - 允許任何連線。
<item><tt/explicit/ - 透過 <tt>ip=value</tt> 的方式明確指定那些 IP 可以連線，那些不行。其中 <tt/ip/ 就是欲監聽端的 IP，而 <tt/value/ 可為 <tt/1,0/、<tt/allow,forbid/ 或是 <tt/yes,no/。如果找不到對應的 <tt/ip/ 則使用 <tt/default/。
<item><tt/regex/ - 監聽端的 IP 須符合此處指定的正規表示式。首先套用 IP 規則(如 <tt/explicit/ 的方式)，若找不到的話才會使用正規表示式來判別。
<p><descrip>
<tag/範例：/
若欲允許 195.71.129.0/24 及 195.71.131.0/24 網段的 IP 可以連線，可設定
<quote><tt>regex=^195\.71\.(129|131)\.[0-9]+$</tt></quote>
</descrip>
</itemize>

<item><tt/default=allow/<newline>
預設值：<tt/forbid/
<p>
僅在 <tt/rule=explicit/ 時採用。
</itemize>

<sect2>Section &lsqb;RasSvr::GWPrefixes&rsqb;
<p>
本節指定那些 E.164 號碼應轉送到指定的閘道器。

<descrip>
<tag/格式：/
<tt>gw-alias=prefix[,prefix,...]</tt>
<p>
表示將所有以此處指定之前置碼開頭的號碼轉送至某一擁有此 alias 的閘道器，請注意你必須以閘道器的 alias 來指定，不可用 IP。
<tag/範例：/
<tt/test-gw=02,03/
</descrip>

<sect2>Section &lsqb;RasSvr::RewriteE164&rsqb;
<label id="rewrite">
<p>
本節定義 dialedDigits (E.164 號碼)的改寫規則。

<descrip>
<tag/格式：/
<tt>[!]original-prefix=target-prefix[,target-prefix,...]</tt>
<p>
若所撥的號碼以 <tt/original-prefix/ 開頭，將被改寫為 <tt/target-prefix/。可指定多種改寫方式，Gatekeeper 會任選其中一種。如果在 <tt/original-prefix/ 之前加 `<tt/!/'，則意義剛好相反。
<tag/範例：/
<tt/08=18888/
<p>
若撥 <tt/08345718/ 將被改寫為 <tt/18888345718/。
</descrip>

選項：
<itemize>
<item><tt/Fastmatch=08/<newline>
預設值：<tt>無</tt>
<p>
僅改寫以此開頭的號碼。
</itemize>

<sect2>Section &lsqb;RasSvr::PermanentEndpoints&rsqb;
<p>
本節你可以放入不支援 RAS 的端點，或是放入你不希望會過期被踢掉的端點。這裡指定的端點記錄將會一直保持在 Gatekeeper 的註冊表格中。不過，你仍可透過狀態界面手動移除之。

<descrip>
<tag/格式：/
<tt>IP[:port]=alias[,alias,...;prefix,prefix,...]</tt>
<tag/範例：/
閘道器：
<quote/<tt/10.0.1.5=Citron;009,008//
終端機：
<quote/<tt/10.0.1.10:1720=700//
</descrip>

<sect2>Section &lsqb;RasSvr::Neighbors&rsqb;
<label id="neighbor">
<p>
如果 ARQ 中的目的地不存在於此 Gatekeeper 所管理的區域，Gatekeeper 會嘗試送 LocationRequest (LRQ) 到鄰近的 gatekeeper 詢問，這些鄰近的 gatekeeper 稱為此 Gatekeeper 的 neighbors。Gatekeeper 會詢問那些 neighbors 取決於號碼是否符合該 neighbor 的前置碼。若前置碼為 ``<tt/*/'' 表示都符合。目前一個 neighbor 只能指定一個前置碼。

另一方面，Gatekeeper 僅會回應從本節定義的 neighbors 送來的 LRQ。你可以指定空的前置碼，這種情況下 Gatekeeper 不會送 LRQ 到那個 neighbor，但會接受那個 neighbor 送來的 LRQ。

<tt/password/ 欄位用來認證 LRQ 是否確從 neighbors 送來。見 <ref id="gkauth" name="[Gatekeeper::Auth]"> 的詳細說明。

<descrip>
<tag/格式：/
<tt>GKID=ip[:port;prefix;password;dynamic]</tt>
<p>
<tag/範例：/
<tt/GK1=192.168.0.5;*/<newline>
<tt/GK2=10.0.1.1:1719;035;gk2/<newline>
<tt/GK3=gk.citron.com.tw;;gk3;1/
</descrip>

<sect2>Section &lsqb;RasSvr::LRQFeatures&rsqb;
<p>
定義 LRQ 及 LCF 的一些特性。
<itemize>
<item><tt/NeighborTimeout=1/<newline>
預設值：<tt/2/
<p>
等待 neighbors 回應的逾時時間，以秒為單位。如果超過時間仍等不到回應，Gatekeeper
會回應 ARJ 給原提出請求的端點。

<item><tt/ForwardHopCount=2/<newline>
預設值：<tt>無</tt>
<p>
如果 Gatekeeper 收到的 LRQ 目的地也不在此區域中，它可將其再轉送至其它的 neighbors。在轉送前，Gatekeeper 會將 LRQ 中的 <bf/hopCount/ 減一。若是 <bf/hopCount/ 已到達 0，則不會再轉送。如此才不會造成 LRQ 被無限制的轉送下去。本選項定義 LRQ 的轉送次數。注意它影響的是 LRQ 的發送端而非轉送端。

<item><tt/IncludeDestinationInfoInLCF=0/<newline>
預設值：<tt/1/
<p>
Gatekeeper 會在回應的 LCF 中包含 <bf/destinationInfo/ 及 <bf/destinationType/
欄位，讓 neighbor gatekeeper 可以儲存下來。如此下次就不用再用 LRQ 來詢問了。然而，某些其它廠牌的 gatekeeper 會誤用此資訊，而造成互通性的問題。如果你與其它廠牌的 gatekeeper 互通時遭遇問題，可試著關閉此選項。

<item><tt/CiscoGKCompatible=1/<newline>
預設值：<tt/0/
<p>
要求 Gatekeeper 在 LRQ 中包含與 Cisco gatekeepers 相容的 NonStandardParameter 資訊。

</itemize>

<sect2>Section &lsqb;RasSvr::RRQFeatures&rsqb;
<p>
<itemize>
<item><tt/AcceptGatewayPrefixes=1/<newline>
預設值：<tt/1/
<p>
閘道器可透過 <bf/terminalType/ 裡的 <bf/supportedPrefixes/ 向 Gatekeeper 註冊前置碼。本選項指定 Gatekeeper 是否要接受閘道器自行註冊的前置碼。
</itemize>

<sect2>Section &lsqb;RasSvr::ARQFeatures&rsqb;
<p>
<itemize>
<item><tt/ArjReasonRouteCallToSCN=0/<newline>
預設值：<tt/1/
<p>
若打開的話，Gatekeeper 將拒絕從閘道器打來再打回去的通話，理由是 <bf/routeCallToSCN/。

<item><tt/ArjReasonRouteCallToGatekeeper=1/<newline>
預設值：<tt/1/
<p>
若打開的話，在路由模式下 Gatekeeper 在收到回電 ARQ 時若在通話表格中沒有對應的記錄，此通話將被拒絕，理由是 <bf/routeCallToGatekeeper/。端點在收到後應立刻結束通話，並重新送通話請求至 Gatekeeper。這就是說，發話端不能繞過 Gatekeeper 而直接連至受話端。

<item><tt/CallUnregisteredEndpoints=0/<newline>
預設值：<tt/1/
<p>
若打開本選項的話，Gatekeeper 會接受端點於 ARQ 中透過 <bf/destCallSignalAddress/ 自行指定受話端位址，不論此位址是否屬於某一已註冊的端點。這表示說，你可以明白的指定受話端的 IP 位址。

<item><tt/RemoveTrailingChar=#/<newline>
預設值：<tt>無</tt>
<p>
若 ARQ 中 <bf/destinationInfo/ 的最後一個字元與本選項指定的相同，則移除之。例如，某些端點會錯誤的將結束字元如 `&num;' 放進 <bf/destinationInfo/，你可以透過此選項拿掉它。
</itemize>

<sect2>Section &lsqb;CallTable&rsqb;
<p>
<itemize>
<item><tt/GenerateNBCDR=0/<newline>
預設值：<tt/1/
<p>
產生從 neighbor 區域打來的通話明細。由於發話端不屬於此區域，其 endpoint ID 會顯示為空的。

<item><tt/GenerateUCCDR=0/<newline>
預設值：<tt/0/
<p>
產生未接通電話的通話明細。通常僅使用於偵錯的目的。請注意通話接通的定義為，在路由模式下，以 Gatekeeper 收到 Q.931 Connect 訊息為準。在直接模式下，通話總是認為已接通。

<item><tt/DefaultCallTimeout=3600/<newline>
預設值：<tt/0/
<p>
預設的通話斷線時間，以秒為單位。若設為 <tt/0/ 表示取消此功能。
</itemize>

<sect2>Section &lsqb;Endpoint&rsqb;
<p>
GNU Gatekeeper 可以註冊至其它的 Gatekeeper 成為一個端點。利用此一特性，你可以輕易的建立 Gatekeeper 的階層架構。

<itemize>
<item><tt/Gatekeeper=10.0.1.1/<newline>
預設值：<tt/no/
<p>
定義上層的 Gatekeeper 位置。不要註冊到你自己喲，除非你瘋了。若設為 <tt/no/ 可取消此一功能。

<item><tt/Type=Gateway/<newline>
預設值：<tt/Gateway/
<p>
定義端點的類型。可設為 <tt/Gateway/ 或 <tt/Terminal/。

<item><tt/H323ID=CitronProxy/<newline>
預設值：<tt/OpenH323Gatekeeper/
<p>
指定端點的 H.323 ID。可指定數個，以逗號隔開。

<item><tt/E164=18888600000,18888700000/<newline>
預設值：<tt>無</tt>
<p>
指定端點的 E.164 (dialedDigits) aliases。也可指定數個，以逗號隔開。

<item><tt/Password=123456/<newline>
預設值：<tt>無</tt>
<p>
指定送給上層 Gatekeeper 的密碼。所有送到上層 Gatekeeper 的 RAS 請求都會將密碼包含在 <bf/cryptoTokens/ 欄位中。若未指定，則不會加上 <bf/cryptoTokens/ 欄位。
<p>
另外，此密碼也用於送給 neighbors 的 LRQ 中。

<item><tt/Prefix=188886,188887/<newline>
預設值：<tt>無</tt>
<p>
註冊到上層 Gatekeeper 的前置碼。僅有在類型為 <tt/Gateway/ 時才有效。

<item><tt/TimeToLive=900/<newline>
預設值：<tt>無</tt>
<p>
建議註冊的時效。不過真正的時效是由上層 Gatekeeper 在 RCF 中指定的。見<ref id="ttl" name="前面">的說明。

<item><tt/RRQRetryInterval=10/<newline>
預設值：<tt/10/
<p>
如果送出的 RRQ 未得到回應，隔多久再重送一次，以秒為單位。

<item><tt/ARQTimeout=2/<newline>
預設值：<tt/2/
<p>
定義 ARQ 請求的逾時時間。
</itemize>


<sect2>Section &lsqb;Endpoint::RewriteE164&rsqb;
<p>
一旦你指定註冊到上層 Gatekeeper 的前置碼後，上層 Gatekeeper 會將以此前置碼開頭的撥號送到下層 Gatekeeper。下層 Gatekeeper 可以據此節定義的規則來改寫目的地號碼。相對的，由下層 Gatekeeper 發出到上層的通話也會經由此節改寫其來源號碼。

<descrip>
<tag/格式：/
<tt/external prefix=internal prefix/
</descrip>

例如，你有如下的系統：

<tscreen><verb>
                        [Parent GK]
                        ID=CitronGK
                        /         \
                       /           \
                      /             \
                     /               \
                [Child GK]          [EP3]
                ID=ProxyGK          E164=18888200
                Prefix=188886
                /       \
               /         \
              /           \
           [EP1]         [EP2]
           E164=601      E164=602
</verb></tscreen>

定義這樣的改寫規則：
<tscreen><verb>
188886=6
</verb></tscreen>

若 EP1 打 <tt/18888200/ 呼叫 EP3，在 Q.931 Setup 中的 CallingPartyNumber 欄位會被改寫為 <tt/18888601/。相反的，EP3 可打 <tt/18888601/ 或 <tt/18888602/ 來呼叫 EP1 或 EP2。換句話說，每一個註冊在 Child GK 上開頭號碼為 '<tt/6/' 的端點，對註冊在 Parent GK 的端點來說，看起來就像是直接註冊在 Parent GK 且開頭號碼為'<tt/188886/'。

本小節與
<ref id="rewrite" name="RasSvr::RewriteE164">
的設定無關，而且後者會優先生效。

<sect2>Section &lsqb;Gatekeeper::Auth&rsqb;
<label id="gkauth">
<p>
本節定義 Gatekeeper 的認證機制。

<descrip>
<tag/語法：/
<tscreen><verb>
authrule=actions

 <authrule> := SimplePasswordAuth | AliasAuth | PrefixAuth | ...
 <actions>  := <control>[;<ras>,<ras>,...]
 <control>  := optional | required | sufficient
 <ras>      := GRQ | RRQ | URQ | ARQ | BRQ | DRQ | LRQ | IRQ
</verb></tscreen>
</descrip>
每一條規則都有三個結果：<tt/ok/、<tt/fail/ 及 <tt/next/。
<itemize>
<item><tt/ok/ - 此模組認可某個請求。
<item><tt/fail/ - 認證失敗應予回拒。
<item><tt/next/ - 此模組無法決定是否可接受某個請求。
</itemize>
每一規則也有三種方式可以控制：
<itemize>
<item><tt/optional/ - 如果此模組無法決定是否可接受某個請求，它將被送到下一模組。
<item><tt/required/ - 所有請求必須通過此模組的認證，否則將被回拒。通過請求的認證將被送到下一模組。
<item><tt/sufficient/ - 如果某個請求被認可，則它將被接受，否則將被回拒。這表示，這個模組決定請求的最後命運。在此模組之後不應再放其它模組，因為那將不會用到。
</itemize>

目前支援的模組有：
<itemize>
<item><tt>SimplePasswordAuth/MySQLPasswordAuth/LDAPPasswordAuth/ExternalPasswordAuth</tt>
<p>
此系列的模組檢查 RAS 訊息中的 <bf/tokens/ 或 <bf/cryptoTokens/ 欄位，其中至少要包含 generalID 及 password 兩個欄位。若是 <bf/cryptoTokens/ 欄位，目前僅支援 MD5 編碼的 <bf/cryptoEPPwdHash/ 標記，以及由 HMAC-SHA1-96 編碼的 <bf/nestedcryptoToken/ 標記(必須安裝 libssl)。

對 <tt/SimplePasswordAuth/、 <tt/MySQLPasswordAuth/、 <tt/LDAPPasswordAuth/ 及 <tt/ExternalPasswordAuth/ 模組而言，ID 及 password 分別存於 <ref id="password" name="[Password]"> 一節，MySQL 資料庫、LDAP 資料庫以及從外部程式取得。要加上其它後端資料庫的支援也很容易。

<item><tt>NeighborPasswordAuth</tt>
<p>
僅使用於認證 <ref id="neighbor" name="[RasSvr::Neighbors]"> 裡定義的 neighbors 而已。

<item><tt>AliasAuth/MySQLAliasAuth/LDAPAliasAuth</tt>
<p>
本模組僅能用來做 RegistrationRequest (RRQ) 的認證。端點的 IP 必須符合某一指定的樣式。<tt/AliasAuth/ 模組的樣式定義於 <ref id="rrqauth" name="[RasSrv::RRQAuth]"> 一節，<tt/MySQLAliasAuth/ 模組定義於 <ref id="mysqlaliasauth" name="[MySQLAliasAuth]">，而對 <tt/LDAPAliasAuth/ 模組而言，alias 及 IP 必須定義於 LDAP 項目中。

<item><tt>PrefixAuth</tt>
<p>
原先叫 <tt/GkAuthorize/。具有某一前置碼的 RAS 請求而言，其 IP 或 aliases 必須符合某一指定的樣式。見 <ref id="prefixauth" name="[PrefixAuth]"> 的詳細說明。目前本模組僅能做 AdmissionRequest (ARQ) 及 LocationRequest (LRQ) 的認證。
</itemize>

另外，你可以設定某一模組只針對某些 RAS 訊息做檢查。例如下例中，<tt/SimplePasswordAuth/ 被定為 <tt/optional/，僅針對 RRQ 及 ARQ 做檢查。若某個 RRQ 未被 <tt/SimplePasswordAuth/ 認可，再交由 <tt/AliasAuth/ 模組檢查。預設是接受所有的請求。

<descrip>
<tag/範例：/
<tt/SimplePasswordAuth=optional;RRQ,ARQ/<newline>
<tt/AliasAuth=sufficient;RRQ/<newline>
<tt/default=allow/
</descrip>

<sect2>Section &lsqb;Password&rsqb;
<label id="password">
<p>
本節定義 <tt/SimplePasswordAuth/ 模組的使用者 ID 及密碼。請使用 `<tt/make addpasswd/' 產生 <tt/addpasswd/ 工具程式來加入 ID 及密碼。

用法：
<tscreen><verb>
addpasswd config userid password
</verb></tscreen>

選項：
<itemize>
<item><tt/KeyFilled=123/<newline>
預設值：<tt/0/
<p>
定義加密的鍵值。注意如果你重設此值的話，所有的密碼都必須重新產生。

<item><tt/CkeckID=1/<newline>
預設值：<tt/0/
<p>
要不要檢查 aliases 和 ID 是否相同。

<item><tt/PasswordTimeout=120/<newline>
預設值：<tt/-1/
<p>
<tt/SimplePasswordAuth/ 系統的模組會將查驗過的密碼暫存下來以加快下次的檢查。本選項定義暫存的時間長短，以秒為單位。若設為 <tt/0/ 表示關閉密碼暫存功能，設為負值的話表示不清除暫存的密碼。
</itemize>

<sect2>Section &lsqb;MySQLAuth&rsqb;
<p>
定義 <tt/MySQLPasswordAuth/ 模組使用的資料庫、表格和欄位以取得的使用者 ID 和密碼。

<itemize>
<item><tt/Host=localhost/<newline>
預設值：<tt/localhost/
<p>
MySQL 伺服器的主機名稱或 IP。

<item><tt/Database=billing/<newline>
預設值：<tt/billing/
<p>
欲連接的資料庫。

<item><tt/User=cwhuang/<newline>
<item><tt/Password=123456/<newline>
<p>
使用此名稱和密碼來連接資料庫。

<item><tt/Table=customer/<newline>
<p>
放置使用者 ID 和密碼的表格。

<item><tt/IDField=IPN/<newline>
<p>
使用者 ID 的欄位名稱。

<item><tt/PasswordField=Password/<newline>
<p>
密碼的欄位名稱。

<item><tt/ExtraCriterion=Kind > 0/<newline>
預設值：<tt>無</tt>
<p>
指定額外的查詢條件。
</itemize>

上面的設定將產生如下的 SQL 查詢指令：
<tscreen><verb>
SELECT $PasswordField FROM $Table WHERE $IDField = %id [AND $ExtraCriterion]
</verb></tscreen>

<sect2>Section &lsqb;ExternalPasswordAuth&rsqb;
<p>
指定一外部程式以取得密碼做為認證。此程式應從 stdin 輸入 ID 並從 stdout 輸出密碼。

<itemize>
<item><tt>PasswordProgram=/usr/local/bin/getpasswd</tt><newline>
Default: <tt>N/A</tt>
<p>
外部程式的執行檔名。
</itemize>

<sect2>Section &lsqb;RasSrv::RRQAuth&rsqb;
<label id="rrqauth">
<p>
指定 <tt/AliasAuth/ 模式認證用的樣式。首先以 RRQ 中的 alias 為鍵值來查詢，若找到的話則應用該規則決定是否接受此 RRQ。規則可以包含以 `&' 隔開的多個條件。

<descrip>
<tag/語法：/
<tscreen><verb>
<authrules> :=  empty  |  <authrule> "&" <authrules>

  <authrule>  := <authtype> ":" <authparams>
  <authtype>  := "sigaddr" | "sigip"
  <autparams> := [!&]*
</verb></tscreen>
</descrip>

<tt/&lt;authparams&gt;/ 記號的意義依 <tt/&lt;authtype&gt;/ 而定：

<itemize>
<item><tt/sigaddr/ - 由 ``PrintOn(ostream)'' 顯示的位置須符合正規表示式。
<p>
範例：
<tscreen><verb>
sigaddr:.*ipAddress .* ip = .* c0 a8 e2 a5 .*port = 1720.*
</verb></tscreen>

<item><tt/sigip/ - 特殊的 `<tt/sigaddr/'，以一般的 IP 表示法來表示：
``<tt/byteA.byteB.byteC.byteD:port/''.
<p>
範例：
<tscreen><verb>
sigip:192.168.242.165:1720
</verb></tscreen>

<item><tt/allow/ - 允許此 alias 註冊，不論 IP 為何。

<item><tt/deny/ - 拒絕此 alias 註冊，不論 IP 為何。

</itemize>

<sect2>Section &lsqb;MySQLAliasAuth&rsqb;
<label id="mysqlaliasauth">
<p>
定義 <tt/MySQLAliasAuth/ 模組使用的資料庫、表格和欄位以取得某一 alias 的認證樣式。

<itemize>
<item><tt/Host=localhost/<newline>
預設值：<tt/localhost/
<p>
MySQL 伺服器的主機名稱或 IP。

<item><tt/Database=billing/<newline>
預設值：<tt/billing/
<p>
欲連接的資料庫。

<item><tt/User=cwhuang/<newline>
<item><tt/Password=123456/<newline>
<p>
使用此名稱和密碼來連接資料庫。

<item><tt/Table=customer/<newline>
<p>
查詢的表格。

<item><tt/IDField=IPN/<newline>
<p>
使用者 ID 的欄位名稱。

<item><tt/IPField=Address/<newline>
<p>
IP 樣式的欄位名稱。

<item><tt/ExtraCriterion=Kind > 0/<newline>
預設值：<tt>無</tt>
<p>
指定額外的查詢條件。
</itemize>

上面的設定將產生如下的 SQL 查詢指令：
<tscreen><verb>
SELECT $IPField FROM $Table WHERE $IDField = %alias [AND $ExtraCriterion]
</verb></tscreen>

<sect2>Section &lsqb;PrefixAuth&rsqb;
<label id="prefixauth">
<p>
本節定義 <tt/PrefixAuth/ 模組的認證規則。目前，本模組僅能用來認證 ARQ 及 LRQ。

首先，依據 RAS 請求中的 <bf/destinationInfo/ 選擇最長的前置碼，然後根據以最符合的網段決定是否接受該請求。如果找不到適當的前置碼規則，而有指定 <tt/default/ 選項，則依據 <tt/default/ 來決定，否則的話就根據模組的設定決定將請求轉給下一模組或是直接拒絕。

<descrip>
<tag/格式：/
<tscreen><verb>
prefix=authrule[|authrule|...]
</verb></tscreen>

<tag/語法：/
<tscreen><verb>
<authrule> :=  <result> <authrule>

  <result>    := deny | allow
  <authrule>  := [!]ipv4:<iprule> | [!]alias:<aliasrule>
</verb></tscreen>
</descrip>
其中 <tt/&lt;iprule&gt;/ 可用點表示法或 CIDR 表示法，而 <tt/&lt;aliasrule&gt;/ 須為正規表示法。如果前面加 `<tt/!/' 旗號表示意義相反。

<descrip>
<tag/範例：/
<tscreen><verb>
555=deny ipv4:10.0.0.0/27|allow ipv4:0/0
5555=allow ipv4:192.168.1.1|deny ipv4:192.168.1.0/255.255.255.0
86=deny !ipv4:172.16.0.0/24
09=deny alias:^188884.*
ALL=allow ipv4:ALL
</verb></tscreen>
</descrip>

在此設定中，除了 <tt>10.0.0.0/27</tt> 網段外所有的端點都可以打 555 但非 5555 開頭的號碼。除了 <tt/192.168.1.1/ 外 <tt>192.168.1.0/24</tt> 網段來的端點都不能撥 5555 開頭的號碼。除了 <tt>172.16.0.0/24</tt> 網段外的端點都不能撥 86 開頭的號碼。而 alias 開頭為 188884 的端點不能撥 09。此外所有的情形都是允許的。

<sect2>Section &lsqb;GkLDAP::LDAPAttributeNames&rsqb;
<p>
本節定義 LDAP 資料庫使用的屬性名稱。

<itemize>
<item><tt/H323ID/<newline>
<p>
端點的 H.323 ID。在 LDAP 資料庫中須為唯一(這是為何我們選擇 email 做為預設值)。

<item><tt/TelephonNo/<newline>
<p>
端點的 E.164 alias。

<item><tt/voIPIpAddress/<newline>
<p>
<tt/LDAPAliasAuth/ 模組用以比對的 IP 位置。目前只能指定一個值。

<item><tt/H235PassWord/<newline>
<p>
<tt/LDAPPasswordAuth/ 模組用以比對的密碼欄位。目前只能指定一個值。
</itemize>

<sect2>Section &lsqb;GkLDAP::Settings&rsqb;
<p>
本節定義 LDAP 伺服器及客戶端的一些參數。

<itemize>
<item><tt/ServerName/<newline>
預設值：<tt/ldap/
<p>
LDAP 伺服器的網域名稱。

<item><tt/ServerPort/<newline>
預設值：<tt/389/
<p>
LDAP 伺服器的 TCP 埠號(通常是 389)。

<item><tt/SearchBaseDN/<newline>
預設值：<tt/o=University of Michigan, c=US/
<p>
LDAP 伺服器樹狀結構的入口點。僅會從此節點之下開始搜尋。

<item><tt/BindUserDN/<newline>
預設值：<tt/cn=Babs Jensen,o=University of Michigan, c=US/
<p>
Gatekeeper 用以連接 LDAP 伺服器的唯一名稱。若不指定則使用匿名查詢。

<item><tt/BindUserPW/<newline>
預設值：<tt/ReallySecretPassword/
<p>
若指定 <tt/BindUserDN/，須在此指定對應的密碼。

<item><tt/sizelimit/<newline>
預設值：<tt/0/
<p>
單一查詢可能回傳的最多結果。因為 Gatekeeper 預期每次查詢應該只有零個或一個結果，所以此參數很少用到。

<item><tt/timelimit/<newline>
預設值：<tt/0/
<p>
查詢的逾時秒數。

</itemize>


<!----------          Monitor Section          ---------->
<sect>狀態監控
<label id="monitor">
<p>
<sect1>狀態界面
<p>
狀態界面是一個用來監視和控制 gatekeeper 的外部界面。Gatekeeper 將會傳送關於撥打出去之電話的訊息給所有有接通的用戶端，並且可以透過這個界面接受指令。

這個界面是一個簡單的 TCP port (預設是 7000)，你可以使用 telnet 或是其他相關程式來連線。另一個不同的用戶端程式範例即是 Java GUI，亦稱為 GkGUI。

<sect2>應用程式
<p>
你要利用狀態界面來做些什麼事取決於你自己，但這裡有一些建議：
<itemize>
<item>監視通話狀況
<item>監視已註冊的端點
<item>圖形化使用者界面
<quote>
參考 GkGUI。
</quote>
<item>計費應用程式
<quote>
分析通話明細記錄的訊息並轉送給計費應用程式。
</quote>
<item>界面外部擴充
<quote>
若你不想發佈某額外功能的原始碼，那就僅發佈通過狀態界面主要的核心機能和界面並保留外在私密部份即可。
</quote>
</itemize>
<p>
<sect2>範例
<p>
假設你對通話明細記錄有興趣並且想要在固定間隔內批次執行它們。

這裡有個簡單的 Perl script (<tt/gnugk_cdr.pl/)，它啟動 gatekeeper 並且產生一個狀態界面的簡單用戶端子程式，並且把 CDRs 寫入到一個記錄檔中。

<verb>
#!/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";
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");
}
</verb>
<p>

<sect2>圖形化使用者界面
<p>
目前有數個圖形化使用者前端界面，分別由不同的人們或單位所開發。

<itemize>
<item>Java GUI<p>
由 Jan Willamowius 所開發。你可以監控通過 gatekeeper 的註冊者和通話狀況。對 endpoint 按下滑鼠右鍵時將會彈出一個選單。

這個圖形化使用者界面能夠在內建 Java 1.0 的大部份網頁瀏覽器上執行。基於安全因素，圖形化使用者界面必須是單獨執行(standalone)的方式，或是附掛在 web 伺服器上，但是此 web 伺服器必須和 gatekeeper 的 IP 相同(也就是你無法以本地端檔案的 applet 形式來執行)。

螢幕快照可在下列網址取得
<url url="http://www.willamowius.de/h323download.html#java">。

<item>GkGUI<p>
這是由
<url url="http://www.citron.com.tw/" name="呈祺資訊網路公司">
所開發的新 Java 程式，以單獨的方式執行，需要 Java 1.4。新功能包括：

<itemize>
<item>同時可監控多個 gatekeepers。
<item>兩種檢視模式：Button List 和 Tree List。
<item>詳細通話記錄(CDR)和統計資料。
<item>可產生狀態記錄檔。
<item>不同的類型的端點使用不同的顏色來區別。
<item>可調整 gatekeeper 設定檔。
<item>可強制取消端點的註冊。
<item>儲存和列印狀態記錄檔及通話明細記錄。
</itemize>

GkGUI 是以 GNU 通用公共許可證的版權形式發佈。
</itemize>

<sect1>命令
<p>
<tt/help/ 或 <tt/h/ 命令將會顯示出所有可獲得的命令清單。
<p>
<itemize>
<item><tt/Reload/
<p>重新載入設定檔。

<item><tt/Version/, <tt/v/
<p>顯示版本及 gatekeeper 的作業系統資訊。

<item><tt/Statistics/, <tt/s/
<p>顯示 gatekeeper 的統計資訊。
<descrip>
<tag/範例：/
<tscreen><verb>
Statistics
-- Endpoint Statistics --
Total Endpoints: 21  Terminals: 17  Gateways: 4
Cached Endpoints: 1  Terminals: 1  Gateways: 0
-- Call Statistics --
Current Calls: 1 Active: 1 From Neighbor: 0
Total Calls: 1539  Successful: 1076  From Neighbor: 65
Startup: Fri, 21 Jun 2002 10:50:22 +0800   Running: 11 days 04:22:59
;
</verb></tscreen>
</descrip>

<item><tt/PrintAllRegistrations/, <tt/r/, <tt/?/
<p>顯示所有已註冊的端點。
<descrip>
<tag/格式：/
<tscreen><verb>
AllRegistrations
RCF|IP:Port|Aliases|Terminal_Type|EndpointID
...
Number of Endpoints: n
;
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
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
;
</verb></tscreen>
</descrip>

<item><tt/PrintAllRegistrationsVerbose/, <tt/rv/, <tt/??/
<p>顯示所有已註冊端點的詳細資烞。
<descrip>
<tag/格式：/
<tscreen><verb>
AllRegistrations
RCF|IP:Port|Aliases|Terminal_Type|EndpointID
Registration_Time C(Active_Call/Connected_Call/Total_Call) <r>
[Prefixes: ##] (gateway only)
...
Number of Endpoints: n
;
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
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) <1>
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) <1>
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) <1>
Number of Endpoints: 2
;
</verb></tscreen>
</descrip>

<item><tt/PrintCurrentCalls/, <tt/c/, <tt/!/
<p>顯示目前所有的通話。
<descrip>
<tag/格式：/
<tscreen><verb>
CurrentCalls
Call No. # | CallID | Call_Duration | Left_Time
Dialed_Number
ACF|Caller_IP:Port|Caller_EPID|CRV
ACF|Callee_IP:Port|Callee_EPID|CRV
...
Number of Calls: Current_Call Active: Active_Call From NB: Call_From_Neighbor
;
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
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
ACF|10.1.1.1:1720|4037_CGK1|25263
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
ACF|10.1.1.1:1720|4037_CGK1|11896
Number of Calls: 2 Active: 2 From NB: 0
;
</verb></tscreen>
</descrip>

<item><tt/PrintCurrentCallsVerbose/, <tt/cv/, <tt/!!/
<p>顯示目前所有通話的詳細資料。
<descrip>
<tag/格式：/
<tscreen><verb>
CurrentCalls
Call No. # | CallID | Call_Duration | Left_Time
Dialed_Number
ACF|Caller_IP:Port|Caller_EPID|CRV
ACF|Callee_IP:Port|Callee_EPID|CRV
# Caller_Aliases|Callee_Aliases|Bandwidth|Connected_Time <r>
...
Number of Calls: Current_Call Active: Active_Call From NB: Call_From_Neighbor
;
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
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
ACF|10.0.1.7:1720|1325_endp|19618
# Sherry:h323_ID|Accel-GW1:h323_ID|200000|Wed, 26 Jun 2002 17:29:55 +0800 <2>
Number of Calls: 1 Active: 1 From NB: 0
;
</verb></tscreen>
</descrip>

<item><tt/Find/, <tt/f/
<p>以 alias 或 prefix 的方式來搜尋已註冊的端點。
<descrip>
<tag/格式：/
<tscreen><verb>
Find Alias
RCF|IP:Port|Aliases|Terminal_Type|EndpointID
;
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
f 800
RCF|10.1.1.10:1720|800:dialedDigits=Wei:h323_ID|terminal|1289_endp
;
f 801
SoftPBX: alias 801 not found!
</verb></tscreen>
</descrip>

<item><tt/FindVerbose/, <tt/fv/
<p>以 alias 或 prefix 的方式來搜尋已註冊端點的詳細資訊。
<descrip>
<tag/格式：/
<tscreen><verb>
FindVerbose Alias
RCF|IP:Port|Aliases|Terminal_Type|EndpointID
Registration_Time C(Active_Call/Connected_Call/Total_Call) <r>
[Prefixes: ##] (gateway only)
;
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
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) <1>
Prefixes: 02,09
;
</verb></tscreen>
</descrip>

<item><tt/UnregisterIP/
<p>強制取消某一特定 IP 及埠號端點的註冊。
<descrip>
<tag/格式：/
<tscreen><verb>
UnregisterIP IP[:Port]
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
UnregisterIP 10.0.1.31:1720
URQ|10.0.1.31:1032|1326_endp|maintenance;
SoftPBX: Endpoint 10.0.1.31:1720 unregistered!
</verb></tscreen>
</descrip>

<item><tt/UnregisterAlias/
<p>強制取消擁有某一 aliases 端點的註冊。
<descrip>
<tag/格式：/
<tscreen><verb>
UnregisterAlias Alias
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
UnregisterAlias 601
URQ|10.0.1.31:1032|1326_endp|maintenance;
SoftPBX: Endpoint 601 unregistered!
</verb></tscreen>
</descrip>

<item><tt/UnregisterAllEndpoints/
<p>強制取消所有端點的註冊。
<descrip>
<tag/格式：/
<tscreen><verb>
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
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
;
</verb></tscreen>
</descrip>

<item><tt/DisconnectCall/
<p>強制切斷某一特定號碼的通話。
<descrip>
<tag/格式：/
<tscreen><verb>
DisconnectCall Number
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
DisconnectCall 1533
</verb></tscreen>
</descrip>

<item><tt/DisconnectIP/
<p>強制切斷某一特定 IP 及埠號端點的所有通話。
<descrip>
<tag/格式：/
<tscreen><verb>
DisconnectIP IP[:Port]
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
DisconnectIP 10.0.1.31:1720
</verb></tscreen>
</descrip>

<item><tt/DisconnectAlias/
<p>強制切斷擁有某一 aliases 端點的所有通話。
<descrip>
<tag/格式：/
<tscreen><verb>
DisconnectAlias Alias
</verb></tscreen>
<tag/範例：/
<tscreen><verb>
DisconnectAlias 601
</verb></tscreen>
</descrip>

<item><tt/ClearCalls/
<p>強制切斷所有的通話。

<item><tt/Debug/
<p>僅用在除錯目的。選項：
<itemize>
<item><tt/trc [+|-|n]/
<p>顯示/調整除錯等級。
<item><tt/cfg SEC PAR/
<p>讀取並列出一個章節中的設定參數。
<item><tt/set SEC PAR VAL/
<p>寫入一個章節中的參數設定值。
<item><tt/remove SEC PAR/
<p>移除一個章節中的參數設定值。
<item><tt/remove SEC/
<p>移除一個章節。
<item><tt/printrm VERBOSE/
<p>列出已取消註冊但尚未移除的端點記錄。
</itemize>
<descrip>
<tag/範例：/
<tscreen><verb>
debug trc 3
debug set RoutedMode H245Routed 1
</verb></tscreen>
</descrip>

<item><tt/Who/
<p>顯示所有監看狀態界面的人。

<item><tt/Exit/, <tt/q/
<p>離開狀態界面。

</itemize>

<sect1>訊息
<p>本節說明輸出至狀態界面的所有訊息及其格式。

<itemize>
<item><tt/GCF|IP|Aliases|Endpoint_Type;/
<p>Gatekeeper 收到一個 GatekeeperRequest (GRQ) 並且回應一個 GatekeeperConfirm (GCF)。

<item><tt/GRJ|IP|Aliases|Endpoint_Type|RejectReason;/
<p>Gatekeeper 收到一個 GatekeeperRequest (GRQ) 並且回應一個 GatekeeperReject (GRJ)。

<item><tt/RCF|IP:Port|Aliases|Endpoint_Type|EndpointID;/
<p>Gatekeeper 收到一個 RegistrationRequest (RRQ) 並且回應一個 RegistrationConfirm (RCF)。

<item><tt/RRJ|IP|Aliases|Endpoint_Type|RejectReason;/
<p>Gatekeeper 收到一個 RegistrationRequest (RRQ) 並且回應一個 RegistrationReject (RRJ)。

<item><tt/ACF|Caller_IP:Port|Caller_EndpointID|CRV|DestinationInfo|SrcInfo;/
<p>Gatekeeper 收到一個 AdmissionRequest (ARQ) 並且回應一個 AdmissionConfirm (ACF)。

<item><tt/ARJ|Caller_IP:Port|DestinationInfo|SrcInfo|IsAnswered|RejectReason;/
<p>Gatekeeper 收到一個 AdmissionRequest (ARQ) 並且回應一個 AdmissionReject (ARJ)。

<item><tt/DCF|IP|EndpointID|CRV|DisengageReason;/
<p>Gatekeeper 收到一個 DisengageRequest (DRQ) 並且回應一個 DisengageConfirm (DCF)。

<item><tt/DRJ|IP|EndpointID|CRV|RejectReason;/
<p>Gatekeeper 收到一個 DisengageRequest (DRQ) 並且回應一個 DisengageReject (DRJ)。

<item><tt/LCF|IP|EndpointID|DestinationInfo|SrcInfo;/
<p>Gatekeeper 收到一個 LocationRequest (LRQ) 並且回應一個 LocationConfirm (LCF)。

<item><tt/LRJ|IP|DestinationInfo|SrcInfo|RejectReason;/
<p>Gatekeeper 收到一個 LocationRequest (LRQ) 並且回應一個 LocationReject (LRJ)。

<item><tt/BCF|IP|EndpointID|Bandwidth;/
<p>Gatekeeper 收到一個 BandwidthRequest (BRQ) 並且回應一個 BandwidthConfirm (BCF)。

<item><tt/BRJ|IP|EndpointID|Bandwidth|RejectReason;/
<p>Gatekeeper 收到一個 BandwidthRequest (BRQ) 並且回應一個 BandwidthReject (BRJ)。

<item><tt/UCF|IP|EndpointID;/
<p>Gatekeeper 收到一個 UnregistrationRequest (URQ) 並且回應一個 UnregistrationConfirm (UCF)。

<item><tt/URJ|IP|EndpointID|RejectReason;/
<p>Gatekeeper 收到一個 UnregistrationRequest (URQ) 並且回應一個 UnregistrationReject (URJ)。

<item><tt/IRQ|IP:Port|EndpointID;/
<p>Gatekeeper 送出一個 InfoRequest (IRQ) 詢問某一端點是否仍存活著。如果該端點仍活著的話，應立即回應一個 InfoRequestResponse (IRR)。

<item><tt/URQ|IP:Port|EndpointID|Reason;/
<p>Gatekeeper 送出一個 UnregistrationRequest (URQ) 以強制取消某一端點的註冊。該端點應回應 UnregistrationConfirm (UCF)。

<item><tt/CDR|CallNo|CallId|Duration|Starttime|Endtime|CallerIP|CallerEndId|/ \
<newline><tt/CalledIP|CalledEndId|DestinationInfo|SrcInfo|GatekeeperID;/
<p>當某一通話結束後，會顯示所有的通話明細，包括發話端及受話端的 IP、起始和結束時間，以及通話時間等。

</itemize>

<!----------          FAQ Section          ---------->
<!--
<sect>Frequently Asked Questions
<sect1>General Questions
<p>

<itemize>
<item>
</itemize>

<sect1>Firewall/NAT Issues

<sect1>Redundancy

<sect1>Inter-Zone
-->
</article>
