ASTERISKでは、”#include<ファイル名>”ステートメントで、各種.confファイルにファイル内容を挿入することができるが、
ここで存在しないファイル名を指定すると、ASTERISKは正常に動作しなくなった。
たとえばextensions.confで、#includeステートメントをつかっていくつかのファイルを挿入しようとしたとする。
このうちいくつかのファイルは存在し成功したものの、いくつかのファイルは存在せずに失敗した場合には、
存在していて挿入できたはずのファイルに書かれていたコンテクストやエクステンションについても、ASTERISKは見つけられずに運用時にエラーとなった。
次のエラーがログに見られた。
(略)
ERROR[20071] config.c: The file 'abc.conf' was listed as a #include but it does not exist.
(略)
NOTICE[20086] chan_sip.c: Call from '123456789' to extension 'test' rejected because extension not found in context 'test-context'.
(略)
上記、エラーで表示されている、
コンテクスト'test-context'もエクステンション'test'も、#includeステートメントによって挿入されたはずの存在していたファイルに書かれていたものである。
これらは存在しない'abc.conf'に含まれていたわけではない。
それなのに、ASTERISKはこれらを見つけることができずにエラーとなった。
存在しないファイルを指定しても、エラーメッセージを吐くだけで、それについては無視されるだろうと考えていたが、その認識は甘かったようだ。
どうやら、
存在しないファイルを#includeステートメントで指定した場合には、
同時に指定しているきちんと存在するファイルの内容についても正常に読み込まれないようである。
#includeステートメントの数に上限があるのではないかとか、コンテクストやエクステンションの最大値を超えてしまったのではないかとか、考えたがそうではなかったようだ。
存在しないファイルを指定していた#includeステートメントをコメントアウトし取り除いてやれば、
再び正常に動作するようになった。
これは、ASTERISK 1.6.2.12 の話である。バージョンアップで改善しているのかもしれない。